AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Text2CypherRetriever:让数据库查询像聊天一样简单!
发布日期:2024-12-13 12:11:43 浏览次数: 1614 来源:活水智能


在如今的信息时代,快速、准确地检索数据是每个人都会面临的问题。无论是开发者还是普通用户,传统的数据检索方式往往需要掌握复杂的查询语言和数据库结构,这让很多人望而却步。

为了解决这个问题,Text2CypherRetriever 提供了一种全新的解决方案。通过自然语言生成 Cypher 查询,用户只需输入简单的自然语言问题,系统就能自动生成查询并返回结果。无论你是否熟悉数据库查询语言,都可以轻松完成复杂的数据检索任务。

接下来,我们将介绍如何使用 Text2CypherRetriever,并将其集成到你的项目中,帮助你更高效地检索数据。

什么是 Text2Cypher?

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图数据库相关教学,你可以查看公众号的其他文章:

  •   如何用GPT-3.5构建知识图谱?这份实操指南告诉你!
  • Neo4j GraphRAG:1个Python包,轻松搞定RAG + 知识图谱!
  • Mistral 7B+Neo4j:构建知识图谱的免费开源利器!
  • 利用AI大模型,将任何文本语料转化为知识图谱,可本地运行
  • 解读 Graph RAG:从大规模文档中发现规律,找到相互关系,速度更快,信息更全面!
  • 利用LLM构建非结构化文本的知识图谱



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询