Neo4j 是由 Neo4j, Inc 开发的图数据库管理系统。
Neo4j 存储的数据元素包括节点、连接节点的边以及节点和边的属性。其开发者将其描述为具有原生图存储和处理功能的符合 ACID 的事务型数据库。Neo4j 提供非开源的“社区版”,采用修改版的 GNU 通用公共许可证授权,在线备份和高可用性扩展则采用闭源商业许可证授权。Neo 也以闭源商业条款授权包含这些扩展的 Neo4j。
本笔记本演示如何使用大语言模型(LLM)为可通过 Cypher 查询语言进行查询的图数据库提供自然语言接口。
Cypher 是一种声明式图查询语言,允许在属性图中进行表达力强且高效的数据查询。
设置环境
你需要一个正在运行的Neo4j 实例。一种选择是在其 Aura 云服务中创建一个免费的 Neo4j 数据库实例。你也可以使用 Neo4j Desktop 应用程序 在本地运行该数据库,或者运行 Docker 容器。
你可以通过执行以下脚本来运行本地 Docker 容器:
填充数据库
假设你的数据库为空,你可以使用 Cypher 查询语言对其进行填充。以下 Cypher 语句具有幂等性,这意味着无论执行一次还是多次,数据库信息都将保持一致。刷新图模式信息
如果数据库模式发生变化,你可以刷新生成 Cypher 语句所需的模式信息。增强模式信息
选择增强模式版本可使系统自动扫描数据库中的示例值并计算一些分布指标。例如,如果某个节点属性的不同值少于 10 个,我们将在模式中返回所有可能的值。否则,每个节点和关系属性仅返回单个示例值。查询图数据
我们现在可以使用图 Cypher QA 链向图提问。限制结果数量
你可以使用top_k 参数限制 Cypher QA 链返回的结果数量。
默认值为 10。
返回中间结果
你可以使用return_intermediate_steps 参数返回 Cypher QA 链的中间步骤。
返回直接结果
你可以使用return_direct 参数返回 Cypher QA 链的直接结果。
在 Cypher 生成提示词中添加示例
你可以定义针对特定问题希望 LLM 生成的 Cypher 语句。为 Cypher 生成和答案生成使用独立的 LLM
你可以使用cypher_llm 和 qa_llm 参数来定义不同的 LLM。
忽略指定的节点和关系类型
你可以在生成 Cypher 语句时使用include_types 或 exclude_types 忽略图模式的某些部分。
验证生成的 Cypher 语句
你可以使用validate_cypher 参数来验证并修正生成 Cypher 语句中的关系方向。
将数据库结果的上下文作为工具/函数输出提供
你可以使用use_function_response 参数将数据库结果的上下文作为工具/函数输出传递给 LLM。该方法通过使 LLM 更紧密地遵循提供的上下文,提高了回答的准确性和相关性。
要使用此功能,你需要使用支持原生函数调用的 LLM。
function_response_system 来自定义系统消息,以指导模型如何生成答案。
请注意,使用 use_function_response 时 qa_prompt 将不起作用。
通过这些文档 经由 MCP 连接到 Claude、VSCode 等,以获取实时答案。

