微信扫码
添加专属顾问
我要投稿
在如今的信息时代,快速、准确地检索数据是每个人都会面临的问题。无论是开发者还是普通用户,传统的数据检索方式往往需要掌握复杂的查询语言和数据库结构,这让很多人望而却步。
为了解决这个问题,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+中大型企业
2025-09-15
AI Agent重塑商业智能:2025技术融合路线图
2025-09-14
滴滴 ChatBl 技术实践:智能数据分析的前沿探索与应用
2025-09-12
AI重塑生产关系:IT部门不会消失,只会进化
2025-09-12
企业知识库构建最佳实践:ChatBI发展中的关键角色
2025-09-06
介绍菜鸟集团ChatBI在物流领域实践及招人
2025-09-03
Dify实战:构建Text2SQL(NL2SQL)智能查询数据库并生成图表工作流
2025-09-02
NL2DSL2SQL是实现ChatBI的正确技术路线吗?
2025-09-02
Text2SQL与DataAgent技术深度对比与实践指南
2025-07-01
2025-08-19
2025-07-18
2025-07-14
2025-08-24
2025-08-28
2025-07-28
2025-09-03
2025-08-23
2025-07-21
2025-09-02
2025-08-16
2025-08-14
2025-08-06
2025-07-29
2025-05-27
2025-05-27
2025-05-12