微信扫码
与创始人交个朋友
我要投稿
在如今的信息时代,快速、准确地检索数据是每个人都会面临的问题。无论是开发者还是普通用户,传统的数据检索方式往往需要掌握复杂的查询语言和数据库结构,这让很多人望而却步。
为了解决这个问题,Text2CypherRetriever 提供了一种全新的解决方案。通过自然语言生成 Cypher 查询,用户只需输入简单的自然语言问题,系统就能自动生成查询并返回结果。无论你是否熟悉数据库查询语言,都可以轻松完成复杂的数据检索任务。
接下来,我们将介绍如何使用 Text2CypherRetriever,并将其集成到你的项目中,帮助你更高效地检索数据。
Text2Cypher 是一种将自然语言转换为 Cypher 查询的翻译方法。Text2CypherRetriever
通过首先请求 LLM 根据用户的问题生成一个 Cypher 查询来执行此方法。然后,该生成的查询将在 Neo4j 数据库中执行,以获取所需的信息。结果记录将添加到 LLM 的上下文中,以便为用户的查询生成最终答案。这种方法允许用户以自然语言输入查询,而 LLM 负责查询生成和答案编写,从而实现与数据库的更直观交互。
我们的内部研究表明,使用 Text2Cypher 作为检索方法相对来说是对不同问题变体最一致的应对方法,并且在处理不同复杂度的任务时表现优于其他策略。
与之前的文章类似,首先连接到一个预配置的 Neo4j 演示数据库,该数据库模拟了一个电影推荐知识图谱。你可以使用 recommendations
作为用户名和密码,在 https://demo.neo4jlabs.com:7473/browser/ 访问该数据库。这个设置提供了一个现实的场景,你的向量嵌入数据已经是 Neo4j 数据库的一部分,可以直接使用。
在你的 Python 环境中,安装 neo4j-graphrag
包以及以下其他包:
pip install neo4j-graphrag neo4j openai
然后,使用 Neo4j Python 驱动程序建立与 Neo4j 数据库的连接:
from neo4j import GraphDatabase
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
driver = GraphDatabase.driver(URI, auth=AUTH)
设置 Text2CypherRetriever
:
from neo4j_graphrag.retrievers importText2CypherRetriever
from neo4j_graphrag.llm importOpenAILLM
t2c_llm =OpenAILLM(model_name="gpt-3.5-turbo")
neo4j_schema ="""
节点属性:
Person {name: STRING, born: INTEGER}
Movie {tagline: STRING, title: STRING, released: INTEGER}
关系属性:
ACTED_IN {roles: LIST}
REVIEWED {summary: STRING, rating: INTEGER}
关系:
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)
(:Person)-[:PRODUCED]->(:Movie)
(:Person)-[:WROTE]->(:Movie)
(:Person)-[:FOLLOWS]->(:Person)
(:Person)-[:REVIEWED]->(:Movie)
"""
examples =[
"用户输入: '《黑客帝国》有哪些演员参演?' 查询: MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WHERE m.title = 'The Matrix' RETURN p.name"
]
retriever =Text2CypherRetriever(
driver=driver,
llm=t2c_llm,
neo4j_schema=neo4j_schema,
examples=examples,
)
使用 Text2CypherRetriever
,你可以轻松生成并执行查询,从数据库中检索信息:
query_text = "雨果·维文参演了哪些电影?"
print(retriever.search(query_text=query_text))
结果为:
items=[
RetrieverResultItem(content="<Record m.title='云图'>", metadata=None),
RetrieverResultItem(content="<Record m.title='裁缝'>", metadata=None),
RetrieverResultItem(content="<Record m.title='小猪宝贝'>", metadata=None),
RetrieverResultItem(content="<Record m.title='V字仇杀队'>", metadata=None),
RetrieverResultItem(content="<Record m.title='黑客帝国'>", metadata=None),
RetrieverResultItem(content="<Record m.title='采访'>", metadata=None),
RetrieverResultItem(content="<Record m.title='沙漠妖姬'>", metadata=None),
RetrieverResultItem(content="<Record m.title='证明'>", metadata=None)
]
metadata={
'cypher':"MATCH (p:Person {name: 'Hugo Weaving'})-[:ACTED_IN]->(m:Movie) RETURN m.title",
'__retriever':'Text2CypherRetriever'
}
将此检索器添加到 GraphRAG 流水线中:
from neo4j_graphrag.generation import GraphRAG
llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})
rag = GraphRAG(retriever=retriever, llm=llm)
query_text = "雨果·维文参演了哪些电影?"
response = rag.search(query_text=query_text)
print(response.answer)
结果为:
雨果·维文参演了以下电影:
- 裁缝
- V字仇杀队
- 黑客帝国
- 沙漠妖姬
- 证明
Text2CypherRetriever
是将 Neo4j 与生成式 AI 集成的一个重大进展。它通过使用自然语言处理生成 Cypher 查询,简化了检索过程,使开发人员更容易使用。此工具在需要精确、上下文相关的信息时特别有用,而无需管理向量嵌入。
若要了解更多知识图谱或neo4j图数据库相关教学,你可以查看公众号的其他文章:
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-21
全网最全ChatGPT财务分析提示词解决方案
2024-12-21
万字长文梳理基于LLM的Text-to-SQL发展进程
2024-12-20
从0到1解构数据问答系统架构:三层模型全解析
2024-12-19
博士眼镜 × 观远数据 × 飞书 | AI 和 BI 赋能业务实践
2024-12-19
传统水务如何借助AI完成智能化升级?一文看懂核心架构与实战应用!
2024-12-18
ChatBl有什么用,看这篇就够了!
2024-12-18
在Windows上使用RAGFlow+Ollama+Qwen2.5,搭建医疗问诊助手(附相关数据集和案例)
2024-12-16
LLM+数据分析,大模型的一个攻坚领域市场观察
2024-06-20
2024-06-14
2024-07-03
2024-06-06
2024-06-14
2024-06-21
2024-06-16
2024-06-07
2024-07-24
2024-10-09
2024-12-13
2024-11-19
2024-11-06
2024-10-25
2024-10-25
2024-10-25
2024-10-18
2024-10-09