Neo4j 向量索引和搜索

Grounding LLM Responses with Implicit and Explicit Search Through Neo4js Knowledge Graph 2048x1152

Neo4j 向量索引实现 HNSW (Hierarchical Navigatable Small World) 以创建 k-最近邻层,从而实现高效且稳健的近似最近邻搜索。该索引旨在与嵌入一起使用,例如那些由机器学习模型生成的嵌入,并可用于根据其嵌入在图中查找相似的节点。

功能包括

  • 为节点和关系创建具有指定维数和相似性函数(欧几里得、余弦)的向量索引

  • 使用嵌入和 top-k 查询向量索引,返回节点和相似性分数

  • 使用 (Azure) OpenAI、AWS Bedrock、Google Vertex AI 和其他 ML 平台计算文本向量嵌入的流程

  • 向量相似性函数,用于计算向量之间的余弦角和欧几里得距离

llm vectors unstructured

用法

// create vector index
CREATE VECTOR INDEX `abstract-embeddings`
FOR (n: Abstract) ON (n.embedding)
OPTIONS {indexConfig: {
 `vector.dimensions`: 1536,
 `vector.similarity_function`: 'cosine'
}};


// set embedding as parameter
MATCH (a:Abstract {id: $id})
CALL db.create.setNodeVectorProperty(a, 'embedding', $embedding);


// use a genai function to compute the embedding
MATCH (a:Abstract {id: $id})
WITH a, genai.vector.encode(a.text, "OpenAI", { token: $token }) AS embedding
CALL db.create.setNodeVectorProperty(n, 'embedding', embedding);


// query vector index for similar abstracts
MATCH (title:Title)<--(:Paper)-->(abstract:Abstract)
WHERE title.text CONTAINS = 'hierarchical navigable small world graph'
CALL db.index.vector.queryNodes('abstract-embeddings', 10, abstract.embedding)
YIELD node AS similarAbstract, score

MATCH (similarAbstract)<--(:Paper)-->(similarTitle:Title)
RETURN similarTitle.text AS title, score;


// use cosine similarity for exact nearest neighbor search
// pre-filter vector search
MATCH (venue:Venue)<--(:Paper)-->(abstract:Abstract)
WHERE venue.name CONTAINS 'NETWORK'

WITH abstract, paper,
     vector.similarity.cosine(abstract.embedding, $embedding) AS score
WHERE score > 0.9

RETURN paper.title AS title, abstract.text, score
ORDER BY score DESC LIMIT 10;

文档

视频和教程