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

有了它,如下查询可以被翻译成 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。