Neo4j 是由 Neo4j, Inc 开发的图数据库管理系统。
Neo4j存储的数据元素包括节点、连接节点的边以及节点和边的属性。开发者将其描述为具有原生图存储和处理能力的符合 ACID 标准的事务数据库。Neo4j提供非开源的”社区版”(采用 GNU 通用公共许可证的修改版本授权),在线备份和高可用性扩展采用封闭源代码的商业许可证。Neo 还以封闭源代码的商业条款许可包含这些扩展的Neo4j。
本 notebook 展示如何使用 LLM 为可以用 Cypher 查询语言查询的图数据库提供自然语言接口。
Cypher 是一种声明式图查询语言,允许在属性图中进行富有表现力且高效的数据查询。
配置
你需要有一个运行中的Neo4j 实例。一种选择是在其 Aura 云服务中创建免费的 Neo4j 数据库实例。你也可以使用 Neo4j Desktop 应用程序在本地运行数据库,或运行 Docker 容器。
你可以通过执行以下脚本来运行本地 Docker 容器:
初始化数据库
假设数据库为空,可以使用 Cypher 查询语言填充数据。以下 Cypher 语句是幂等的,这意味着无论运行一次还是多次,数据库信息都将保持一致。刷新图 schema 信息
如果数据库的 schema 发生变化,可以刷新生成 Cypher 语句所需的 schema 信息。增强的 schema 信息
选择增强版 schema 后,系统会自动扫描数据库中的示例值并计算一些分布指标。例如,如果某个节点属性的不同值少于 10 个,则在 schema 中返回所有可能的值;否则,每个节点和关系属性只返回一个示例值。查询图
现在可以使用图 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_llm 和 qa_llm 参数定义不同的 LLM
忽略指定的节点和关系类型
可以使用include_types 或 exclude_types 在生成 Cypher 语句时忽略部分图 schema。
验证生成的 Cypher 语句
可以使用validate_cypher 参数来验证并修正生成的 Cypher 语句中的关系方向
将数据库结果上下文作为工具/函数输出提供
可以使用use_function_response 参数将数据库结果的上下文作为工具/函数输出传递给 LLM。此方法提高了答案的响应准确性和相关性,因为 LLM 会更紧密地遵循提供的上下文。
使用此功能需要使用支持原生函数调用的 LLM。
function_response_system 来提供自定义系统消息,以指示模型如何生成答案。
注意:使用 use_function_response 时,qa_prompt 将不起作用
将这些文档连接到 Claude、VSCode 等工具,通过 MCP 获取实时答案。

