使用 Neo4j GraphRAG Python 包构建 RAG 与知识图谱应用
本文介绍了如何使用 Neo4j GraphRAG Python 包构建检索增强生成应用。内容涵盖 GraphRAG 概念、环境安装、数据库连接、VectorRetriever 检索器使用及 LLM 集成流程。通过对比传统 RAG,阐述了图结构在提升回答准确性方面的优势,并提供代码示例与最佳实践建议,帮助开发者快速上手 Neo4j 与向量搜索结合的 RAG 方案。

本文介绍了如何使用 Neo4j GraphRAG Python 包构建检索增强生成应用。内容涵盖 GraphRAG 概念、环境安装、数据库连接、VectorRetriever 检索器使用及 LLM 集成流程。通过对比传统 RAG,阐述了图结构在提升回答准确性方面的优势,并提供代码示例与最佳实践建议,帮助开发者快速上手 Neo4j 与向量搜索结合的 RAG 方案。

如果你已经探索过使用 Neo4j 来实现 GraphRAG,你可能已经了解它在提升生成模型输出质量方面的潜力。传统上,这需要深入掌握 Neo4j 和 Cypher(Neo4j 的查询语言)。在本文中,我们将介绍一种更简单的方式,简化 Neo4j 与检索增强生成(RAG)应用的集成,使开发者更容易使用,那就是:适用于 Python 的官方 Neo4j GraphRAG 包(neo4j-graphrag)。
该 Python 包为您提供了管理 RAG 过程中的检索与生成任务的高效工具。本文将展示如何使用该包执行检索任务,并简要介绍其生成功能,帮助您构建完整的端到端 RAG 流程。
neo4j-graphrag 包简化了图检索增强生成(GraphRAG)。在 Neo4j,将图数据库与向量搜索结合起来代表了 RAG 的下一步发展方向。通过利用图结构中的关系信息,GraphRAG 能够提供比传统向量搜索更丰富的上下文,从而显著提升大语言模型(LLM)回答的准确性和可解释性。

传统的 RAG 通常仅依赖向量相似度检索文档片段,容易丢失实体间的关联信息。GraphRAG 则通过遍历图结构,能够发现间接相关的节点,例如在电影推荐场景中,不仅找到相似情节的电影,还能找到同一导演或演员的其他作品,从而提供更全面的回答依据。
首先,连接到一个预配置的 Neo4j 演示数据库,该数据库模拟了一个电影推荐知识图谱。您可以使用用户名和密码 "recommendations" 访问 https://demo.neo4jlabs.com:7473/browser/。这一设置提供了一个现实场景,向量嵌入数据已作为 Neo4j 数据库的一部分。
使用 Cypher 命令可视化数据:
MATCH (n) RETURN n LIMIT 25;

观察每个节点右侧详情中的 plotEmbedding 属性。我们将在演示中使用这些嵌入执行向量搜索。您可以通过以下 Cypher 命令检查是否存在 moviePlotsEmbedding 向量索引:
SHOW INDEXES YIELD * WHERE type='VECTOR';
在您的 Python 环境中,建议先创建虚拟环境以保持依赖隔离。安装 neo4j-graphrag 包及其他依赖包:
pip install neo4j-graphrag neo4j openai
接着,使用 Neo4j Python 驱动程序连接到数据库。确保您已设置 OpenAI API 密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
连接代码示例如下:
from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
(注:实际使用时请替换为演示数据库的连接字符串)
我们的包提供了适用于不同检索策略的多种检索器类。在这里,我们使用 VectorRetriever 类来执行基于向量的检索。
我们使用 text-embedding-ada-002 模型,因为演示数据库中的电影情节嵌入是使用该模型生成的,从而使检索结果更加相关。您可以自定义返回的结果属性,这里我们指定了返回节点属性 title 和 plot。
使用检索器搜索与查询最相关的电影情节,执行近似最近邻搜索以识别最佳匹配的前三个电影情节:
from neo4j_graphrag.retrievers import VectorRetriever
retriever = VectorRetriever(
driver=driver,
llm=openai_client, # 假设已初始化
node_label="Movie",
vector_property_name="plotEmbedding",
embedding_model="text-embedding-ada-002"
)
results = retriever.retrieve(query="Action movie with robots", top_k=3)
结果可以进一步解析为结构化数据供 LLM 使用:
for result in results:
print(f"Title: {result.title}, Plot: {result.plot}")
让我们看看检索器如何集成到简单的 GraphRAG 流程中。要使用 neo4j-graphrag 包执行 GraphRAG 查询,需要以下几个组件:
实际操作只需几行代码即可完成端到端的问答:
from neo4j_graphrag import GraphRAG
rag = GraphRAG(
driver=driver,
llm=openai_client,
retriever=retriever
)
response = rag.query("What are the best action movies?")
print(response)
在使用 Neo4j GraphRAG 时,建议注意以下几点以确保最佳性能:
本文展示了如何使用 neo4j-graphrag 包中的 VectorRetriever 类执行简单的检索查询,并将其集成到 GraphRAG 流程中。通过结合图数据库的结构化知识与向量搜索的语义能力,开发者可以更高效地构建智能问答系统。
未来的开发方向包括支持更多检索策略以及如何在 GraphRAG 流程中使用不同的 LLM 后端。建议关注官方文档获取最新功能更新。
该包代码是开源的,您可以在 GitHub 上找到它,欢迎在上面提交问题。
*本文旨在分享技术实践,如有侵权请联系删除。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online