字
字节笔记本
2026年5月30日
Text2Cypher:用自然语言查 Neo4j,不用学 Cypher
API中转
¥120
查询数据库不一定需要会 SQL 或 Cypher。自然语言直接转图查询,已经可以在生产环境中用了。
Text2CypherRetriever 做的事很直接:你把自然语言问题丢给它,它让 LLM 生成 Cypher 查询,在 Neo4j 中执行,然后把结果返回给你。整个过程对用户透明。
安装和连接:
bash
pip install neo4j-graphrag neo4j openaipython
from neo4j import GraphDatabase
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
driver = GraphDatabase.driver(URI, auth=AUTH)核心配置是给 LLM 提供数据库 schema 和示例查询,让模型理解图结构和查询模式:
python
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}
关系:
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)
(:Person)-[:FOLLOWS]->(:Person)
"""
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,
)查询时只需输入自然语言:
python
query_text = "雨果·维文参演了哪些电影?"
result = retriever.search(query_text=query_text)会自动生成 Cypher 并执行:
cypher
MATCH (p:Person {name: 'Hugo Weaving'})-[:ACTED_IN]->(m:Movie) RETURN m.title返回结果可以直接用,也可以接入 GraphRAG 流水线做进一步的生成式回答:
python
from neo4j_graphrag.generation import GraphRAG
llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})
rag = GraphRAG(retriever=retriever, llm=llm)
response = rag.search(query_text="雨果·维文参演了哪些电影?")
print(response.answer)输出:
雨果·维文参演了以下电影:裁缝、V字仇杀队、黑客帝国、沙漠妖姬、证明
Text2Cypher 的优势在于它不需要向量嵌入,不需要管理文档切分,直接面向结构化数据做精确查询。对于知识图谱类的数据场景,"问一句就能查到"比"建一套搜索系统"实用得多。
分享: