Skip to main content
Neo4j 是由 Neo4j, Inc.
Neo4j 存储的数据元素包括节点、连接节点的边以及节点和边的属性。开发者将其描述为一个符合 ACID 标准的事务型数据库,具有原生图存储和处理能力。Neo4j 提供非开源的”社区版”(使用修改版 GNU 通用公共许可证授权),在线备份和高可用性扩展则使用闭源商业许可证授权。
本 notebook 展示如何使用 LLM 为图数据库提供自然语言接口,你可以使用 Cypher 查询语言来查询该数据库。
Cypher 是一种声明式图查询语言,允许在属性图中进行富有表达力且高效的数据查询。

设置

你需要一个正在运行的 Neo4j instance. One option is to create a free Neo4j database instance in their Aura cloud service. 你也可以使用以下方式在本地运行数据库: Neo4j Desktop application, or running a docker container. 你可以通过执行以下脚本运行本地 docker 容器:
如果使用 docker 容器,你需要等待几秒钟让数据库启动。
本指南中我们默认使用 OpenAI 模型。

填充数据库

假设你的数据库为空,你可以使用 Cypher 查询语言填充数据。 以下 Cypher 语句是幂等的,这意味着无论运行一次还是多次,数据库信息都是相同的。

刷新图 Schema 信息

如果数据库的 Schema 发生变化,你可以刷新生成 Cypher 语句所需的 Schema 信息。

增强 Schema 信息

选择增强 Schema 版本使系统能够自动扫描数据库中的示例值 并计算一些分布指标。 例如, if a node property has less than 10 distinct values, we return all possible values in the schema. 否则,每个节点和关系属性仅返回一个示例值。

查询图

我们现在可以使用 graph cypher QA chain 来查询图

限制结果数量

你可以使用 top_k 参数来限制 Cypher QA Chain 返回的结果数量。 默认值为 10。

返回中间结果

你可以使用 return_intermediate_steps 参数从 Cypher QA Chain 返回中间步骤

返回直接结果

你可以使用 return_direct 参数从 Cypher QA Chain 返回直接结果

在 Cypher 生成提示词中添加示例

你可以定义希望 LLM 为特定问题生成的 Cypher 语句

使用不同的 LLM 进行 Cypher 和答案生成

你可以使用 cypher_llmqa_llm 参数来定义不同的 LLM

忽略指定的节点和关系类型

你可以使用 include_typesexclude_types 来在生成 Cypher 语句时忽略部分图 Schema。

验证生成的 Cypher 语句

你可以使用 validate_cypher 参数来验证和修正生成的 Cypher 语句中的关系方向

将数据库结果作为工具/函数输出提供上下文

你可以使用 use_function_response 参数将数据库结果作为工具/函数输出传递给 LLM。 此方法提高了响应的准确性和相关性 of an answer as the LLM follows the provided context more closely. 你需要使用支持原生函数调用的 LLM 来使用此功能
使用函数响应功能时,你可以提供自定义系统消息 by providing function_response_system to instruct the model on how to generate answers. 注意使用 use_function_responseqa_prompt 将不起作用