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
忽略指定的节点和关系类型
你可以使用include_types 或 exclude_types 在生成 Cypher 语句时忽略图模式的部分内容。
验证生成的 Cypher 语句
你可以使用validate_cypher 参数来验证并纠正生成的 Cypher 语句中的关系方向
将数据库结果作为工具/函数输出提供上下文
你可以使用use_function_response 参数将数据库结果的上下文作为工具/函数输出传递给 LLM。这种方法提高了答案的响应准确性和相关性,因为 LLM 会更紧密地遵循提供的上下文。
你需要使用具有原生函数调用支持的 LLM 才能使用此功能。
function_response_system 来提供自定义系统消息,以指导模型如何生成答案。
请注意,当使用 use_function_response 时,qa_prompt 将不会生效
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时答案。

