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。