text2cypher

这是一个受 Neo4j Labs 项目 text2cypher 启发的实验性翻译器。

如果将此翻译器添加到类路径或使用 text2cypher 包,所有以以下开头的查询将被视为

🤖,

将被视为用 普通英文 编写的 自然语言 查询。驱动程序会去除前缀,并使用 OpenAI 将输入翻译为 Cypher® 语句。驱动程序会通过传递当前图模式及输入问题来增强查询的生成。

以下数据将发送到外部 API

  • 您的数据库模式,包括标签名称

  • 任何自然语言查询

如果您不想上述数据被发送或不被允许这样做,请勿使用此翻译器。

此模块还需要一个额外配置:OpenAI API 密钥。您可以使用 URL 参数、JDBC 属性条目或环境变量之一。

  • URL 参数/属性名称为 openAIApiKey

  • 环境变量名称为 OPEN_AI_API_KEY

示例 1. 有效 URL 示例
jdbc:neo4j://:7687?openAIApiKey=sk-xxx-your-key

其他配置属性包括

属性名称 默认值

openAIBaseUrl

https://api.openai.com/v1(由 langchain4j 定义)

openAIModelName

gpt-4-turbo

openAITemperature

0.0

在此配置完成后,以下查询可以被翻译成 Cypher

🤖, How was The Da Vinci Code rated?

LLM 的输出不是确定性的,可能会有所不同。虽然您可以直接执行,但我们强烈建议使用 Connection#nativeSQL 获取 Cypher 语句,检查后再单独运行。在我们的测试中,上述问题大多被正确翻译为

MATCH (m:`Movie` {
  title: 'The Da Vinci Code'
})<-[r:`REVIEWED`]-(p:`Person`)
RETURN r.rating AS Rating, p.name AS ReviewerName

另一些情况下,结果是语法上正确的语句,但只能返回评论者和电影本身。还需注意,虽然人类通常会识别出您实际上在询问平均评分,LLM 并不会自行推断这一点。将问题表述得更明确可以得到更好的结果

🤖, How was The Da Vinci Code rated on average?

被更准确地翻译为

MATCH (m:`Movie` {
  title: 'The Da Vinci Code'
})<-[:`REVIEWED`]-(p:`Person`)
RETURN avg(p.rating) AS AverageRating
一旦自然语言查询被翻译成 Cypher,结果将被缓存,后续对同一查询的调用将使用缓存结果。

所有未以 🤖 开头的语句将原样使用并视为 Cypher。