位置:首页 > 技术资讯 > Text2CypherRetriever:像聊天一样轻松实现数据库查询

Text2CypherRetriever:像聊天一样轻松实现数据库查询

时间:2026-08-21  |  作者:极客少年  |  阅读:0

在这个信息过载的时代,快速、准确地从数据中找到答案,几乎已经成了每个人的日常刚需。

但传统的数据检索方式,通常要求你熟悉复杂的查询语言和数据库结构。这对很多开发者来说都是门槛,对普通用户就更不友好了。

Text2CypherRetriever:让数据库查询像聊天一样简单!

有没有一种方式,能让查询像聊天一样简单?Text2CypherRetriever 正是为这个目标而来。

它的思路很直接:你只需要用自然语言提问,系统就会自动生成对应的 Cypher 查询,再执行数据库检索并返回结果。

无论你对 Cypher 是否熟练,都能借助它完成复杂的数据检索任务。

下面,我们就来拆解一下,如何把这个工具集成到项目里,让它真正帮你提高效率。

什么是 Text2Cypher?

Text2Cypher 本质上是一种把自然语言“翻译”为 Cypher 查询的方法。

而 Text2CypherRetriever 则是这个方法的落地实现。它会先让大语言模型(LLM)根据用户问题生成一段 Cypher 查询,再把这段查询放到 Neo4j 数据库中执行,取回相关信息。

最后,这些结果会被放入 LLM 的上下文中,由 LLM 进一步生成最终的自然语言答案。

这相当于在用户和数据库之间搭起了一座桥。用户只需用自然语言提问,LLM 则负责查询生成和答案组织,整个交互过程会直观很多。

它的价值在哪里?

  • 降低使用门槛:不需要手写 Cypher 查询。
  • 提升交互体验:提问方式更接近日常对话。
  • 适合复杂检索:能把自然语言请求转换成结构化数据库查询。

内部研究显示,Text2Cypher 作为检索方法,在面对各种不同的问题变体时,表现得最稳定。

在处理不同复杂度的任务时,它的表现也比其他策略更靠谱。

设置

跟之前的文章类似,我们先连接一个预先配好的 Neo4j 演示数据库。

这个数据库模拟了一个电影推荐的知识图谱。你可以直接用用户名和密码 recommendations,在 https://demo.neo4jlabs.com:7473/browser/ 访问它。

这个配置提供了一个真实场景:向量嵌入数据已经是 Neo4j 数据库的一部分,拿来就能用。

安装依赖

在 Python 环境里,先把 neo4j-graphrag 包和相关依赖装好:

pip install neo4j-graphrag neo4j openai

建立数据库连接

然后,用 Neo4j Python 驱动程序建立连接:

from neo4j import GraphDatabase

URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")

driver = GraphDatabase.driver(URI, auth=AUTH)

检索

接下来,配置 Text2CypherRetriever。

from neo4j_graphrag.retrievers import Text2CypherRetriever
from neo4j_graphrag.llm import OpenAILLM

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="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None),
  RetrieverResultItem(content="", metadata=None)
]
metadata={
  'cypher': "MATCH (p:Person {name: 'Hugo Wea ving'})-[:ACTED_IN]->(m:Movie) RETURN m.title",
  '__retriever': 'Text2CypherRetriever'
}

接入 GraphRAG 流水线

你还可以把这个检索器接入 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 查询,降低了开发者的使用门槛。

更重要的是,对于那些需要精确、上下文相关信息,又不想折腾向量嵌入的场景,这个工具恰好提供了非常轻量的解决方案。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多