如果你已经探索过使用 Neo4j 来实现 GraphRAG,你可能已经了解它在提升生成模型输出质量方面的潜力。传统上,这需要深入掌握 Neo4j 和 Cypher(Neo4j 的查询语言)。在本文中,您可以了解到一种更简单的方式,简化 Neo4j 与检索增强生成(RAG)应用的集成,使开发者更容易使用,那就是:适用于 Python 的官方 Neo4j GraphRAG 包(neo4j-graphrag)!
该 Python 包为您提供了管理 RAG 过程中的检索与生成任务的高效工具。本文将展示如何使用该包执行检索任务及构建基础流程。
什么是 GraphRAG?
neo4j-graphrag 包简化了图检索增强生成(GraphRAG)。在 Neo4j,将图数据库与向量搜索结合起来代表了 RAG 的下一步发展方向。
![图:Neo4j GraphRAG 概念示意图]
安装设置
首先,连接到一个预配置的 Neo4j 演示数据库,该数据库模拟了一个电影推荐知识图谱。您可以使用用户名和密码'recommendations'访问 Neo4j Browser。这一设置提供了一个现实场景,向量嵌入数据已作为 Neo4j 数据库的一部分。
使用 Cypher 命令可视化数据:
MATCH (n) RETURN n LIMIT 25;
![图:Neo4j Browser 节点列表]
观察每个节点右侧详情中的 plotEmbedding 属性。我们将在演示中使用这些嵌入执行向量搜索。您可以通过以下 Cypher 命令检查是否存在 moviePlotsEmbedding 向量索引:
SHOW INDEXES YIELD * WHERE type='VECTOR';
在您的 Python 环境中,安装 neo4j-graphrag 包及其他依赖包:
pip install neo4j-graphrag neo4j openai
接着,使用 Neo4j Python 驱动程序连接到数据库:
from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
确保您已设置 OpenAI API 密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
检索操作
我们的包提供了适用于不同检索策略的多种检索器类。在这里,我们使用 VectorRetriever 类:
from neo4j_graphrag.retrievers import VectorRetriever
retriever = VectorRetriever(
driver=driver,
embedding_model="text-embedding-ada-002",
node_label="Movie",
vector_property_name="plotEmbedding"
)
我们使用 text-embedding-ada-002 模型,因为演示数据库中的电影情节嵌入是使用该模型生成的,从而使检索结果更加相关。您可以自定义返回的结果属性,这里我们指定了返回节点属性 title 和 plot。
使用检索器搜索与查询最相关的电影情节,执行近似最近邻搜索以识别最佳匹配的前三个电影情节:


