微信扫码
与创始人交个朋友
我要投稿
如果你已经探索过使用 Neo4j 来实现 GraphRAG,你可能已经了解它在提升生成模型输出质量方面的潜力。传统上,这需要深入掌握 Neo4j 和 Cypher(Neo4j 的查询语言)。在本文中,您可以了解到一种更简单的方式,简化 Neo4j 与检索增强生成(RAG)应用的集成,使开发者更容易使用,那就是:适用于 Python 的官方 Neo4j GraphRAG 包(neo4j-graphrag)!
neo4j-graphrag:https://pypi.org/project/neo4j-graphrag/
该 Python 包为您提供了管理 RAG 过程中的检索与生成任务的高效工具。本文将展示如何使用该包执行检索任务。接下来的文章将介绍其生成功能,帮助您构建完整的端到端 RAG 流程。
neo4j-graphrag 包简化了图检索增强生成(GraphRAG)。在 Neo4j,我们相信将图数据库与向量搜索结合起来代表了 RAG 的下一步发展方向。
首先,连接到一个预配置的 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 驱动程序连接到数据库:
from neo4j import GraphDatabase
# 演示数据库凭证
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
# 连接到 Neo4j 数据库
driver = GraphDatabase.driver(URI, auth=AUTH)
确保您已设置 OpenAI API 密钥:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
我们的包提供了适用于不同检索策略的多种检索器类(参见文档:https://neo4j.com/docs/neo4j-graphrag-python/current/)。在这里,我们使用 VectorRetriever
类:
from neo4j-graphrag.retrievers import VectorRetriever
from neo4j-graphrag.embeddings.openai import OpenAIEmbeddings
embedder = OpenAIEmbeddings(model="text-embedding-ada-002")
retriever = VectorRetriever(
driver,
index_name="moviePlotsEmbedding",
embedder=embedder,
return_properties=["title", "plot"],
)
我们使用 text-embedding-ada-002 模型,因为演示数据库中的电影情节嵌入是使用该模型生成的,从而使检索结果更加相关。您可以自定义返回的结果属性,这里我们指定了返回节点属性 title
和 plot
。
使用检索器搜索与查询最相关的电影情节,执行近似最近邻搜索以识别最佳匹配的前三个电影情节:
query_text = "A movie about the famous sinking of the Titanic"
retriever_result = retriever.search(query_text=query_text, top_k=3)
print(retriever_result)
结果可以进一步解析为:
import re
for k, item in enumerate(retriever_result.items):
plot = re.search(r"'plot':\s*'([^']*)'", item.content).group(1)
title = re.search(r"'title':\s*'([^']*)'", item.content).group(1)
score = item.metadata["score"]
print(f"Result {k}: {title} - {score} - {plot}")
让我们看看检索器如何集成到简单的 GraphRAG 流程中。要使用 neo4j-graphrag 包执行 GraphRAG 查询,需要以下几个组件:
1. 一个 Neo4j 驱动——用于查询 Neo4j 数据库。
2. 一个检索器——neo4j-graphrag 包提供了一些实现,并允许您编写自己的检索器。
3. 一个 LLM——我们需要调用一个 LLM 来生成答案。neo4j-graphrag 包目前仅提供 OpenAI 的 LLM 实现,但其接口与 LangChain 的聊天模型兼容,并允许您编写自己的接口。
实际操作只需几行代码:
from neo4j-graphrag.llm importOpenAILLM
from neo4j-graphrag.generation importGraphRAG
# LLM
llm =OpenAILLM(model_name="gpt-4", model_params={"temperature":0})
# 初始化 RAG 流程
rag =GraphRAG(retriever=retriever, llm=llm)
# 查询图谱
query_text ="What movies are sad romances?"
response = rag.search(query_text=query_text, retriever_config={"top_k":5})
print(response.answer)
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-21
SAC-KG:利用大型语言模型一键构建领域知识图谱 - 中科大&阿里
2024-12-19
北大Chatlaw - 基于知识图谱增强混合专家模型的多智能体法律助手
2024-12-18
Elasticsearch vs 向量数据库:寻找最佳混合检索方案
2024-12-16
轻量高效的知识图谱RAG系统:LightRAG
2024-12-16
5种方法,让文本信息瞬间变成结构化图谱!
2024-12-16
向量数据库到底算不算一种NoSQL数据库?
2024-12-14
大模型能自动创建高质量知识图谱吗?可行性及人机协同机制 - WhyHow.AI
2024-12-12
大模型+知识图谱在工业领域落地的4大场景
2024-07-17
2024-07-11
2024-08-13
2024-07-13
2024-07-12
2024-06-24
2024-07-08
2024-06-10
2024-07-26
2024-07-04
2024-12-16
2024-12-10
2024-12-04
2024-12-01
2024-11-30
2024-11-22
2024-11-04
2024-10-10