text2cypher

这是一个实验性翻译器,灵感来源于 Neo4j Labs 项目 text2cypher

如果您将此翻译器添加到类路径中或使用 text2cypher 捆绑包,所有以以下内容开头的查询:

🤖,

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

以下数据将发送到外部 API:

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

  • 任何自然语言查询

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

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

  • URL 参数/属性名称为 openAIApiKey

  • 环境变量名称为 OPEN_AI_API_KEY

列表 1. 有效 URL 示例
jdbc:neo4j://localhost: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。

© . All rights reserved.