配置
完成本指南需要安装 Docker 和 Python 3.x。 要快速首次运行 Memgraph Platform(Memgraph 数据库 + MAGE 库 + Memgraph Lab),请执行以下操作: 在 Linux/MacOS 上:memgraph-mage 和 memgraph-lab Docker 服务。现在 Memgraph 已经运行起来了!在 Memgraph 文档中了解更多安装过程。
要使用 LangChain,需要安装并导入所有必要的包。我们将使用包管理器 pip 并配合 --user 标志以确保正确的权限。如果你安装了 Python 3.4 或更高版本,pip 默认已包含在内。使用以下命令安装所有必需的包:
自然语言查询
Memgraph 与 LangChain 的集成包含自然语言查询功能。要使用它,首先进行所有必要的导入,我们会在代码出现时逐一说明。 首先,实例化MemgraphGraph。该对象持有到运行中的 Memgraph 实例的连接。请确保正确设置所有环境变量。
refresh_schema 初始设置为 False,因为数据库中还没有数据,我们希望避免不必要的数据库调用。
填充数据库
要填充数据库,首先确保它是空的。最有效的方法是切换到内存分析存储模式,删除图,然后切换回内存事务模式。了解更多关于 Memgraph 的存储模式。 我们将添加到数据库的数据是关于不同类型的视频游戏,这些游戏可在各种平台上获得,并与发行商相关联。graph 对象持有 query 方法。该方法在 Memgraph 中执行查询,也被 MemgraphQAChain 用于查询数据库。
刷新图 schema
由于在 Memgraph 中创建了新数据,有必要刷新 schema。生成的 schema 将被MemgraphQAChain 用于指导 LLM 更好地生成 Cypher 查询。
查询数据库
要与 OpenAI API 交互,必须将 API 密钥配置为环境变量。这确保了请求的正确授权。你可以在这里找到有关获取 API 密钥的更多信息。要配置 API 密钥,可以使用 Python os 包:MemgraphQAChain,它将在基于图数据的问答过程中使用。temperature 参数设置为零以确保可预测且一致的答案。你可以将 verbose 参数设置为 True 以接收有关查询生成的更详细消息。
链修饰符
要修改链的行为并获取更多上下文或附加信息,可以修改链的参数。返回直接查询结果
return_direct 修饰符指定是返回执行的 Cypher 查询的直接结果,还是经过处理的自然语言响应。
返回查询中间步骤
return_intermediate_steps 链修饰符通过在初始查询结果之外包含查询的中间步骤来增强返回的响应。
限制查询结果数量
top_k 修饰符可在想要限制查询结果最大数量时使用。
高级查询
随着解决方案复杂性的增加,你可能会遇到需要谨慎处理的不同用例。确保应用程序的可扩展性对于维持流畅的用户流程至关重要。 让我们再次实例化链并尝试提一些用户可能会问的问题。提示词优化
为了解决这个问题,我们可以调整 QA chain 的初始 Cypher 提示词。这涉及向 LLM 添加关于用户如何引用特定平台(例如本例中的 PS5)的指导。我们通过 LangChain PromptTemplate 来实现,创建一个修改后的初始提示词,然后将其作为参数提供给精炼后的MemgraphQAChain 实例。
构建知识图谱
将非结构化数据转化为结构化数据并不是一项简单或直接的任务。本指南将展示如何利用 LLM 来帮助我们完成这项工作,以及如何在 Memgraph 中构建知识图谱。创建知识图谱后,你可以将其用于 GraphRAG 应用。 从文本构建知识图谱的步骤如下:- 从文本中提取结构化信息:使用 LLM 以节点和关系的形式从文本中提取结构化图信息。
- 存储到 Memgraph:将提取的结构化图信息存储到 Memgraph 中。
从文本中提取结构化信息
除了配置部分中的所有导入外,还需导入LLMGraphTransformer 和 Document,用于从文本中提取结构化信息。
LLMGraphTransformer 并将文档转换为图结构。
存储到 Memgraph
一旦数据以GraphDocument 的格式准备好(即节点和关系),你可以使用 add_graph_documents 方法将其导入 Memgraph。该方法将 graph_documents 列表转换为需要在 Memgraph 中执行的适当 Cypher 查询。完成后,知识图谱即存储在 Memgraph 中。
图构建过程是非确定性的,因为用于从非结构化数据生成节点和关系的 LLM 本身是非确定性的。
其他选项
此外,你可以根据需求灵活定义要提取的特定节点和关系类型。__Entity__ 标签,这将为更快速的检索建立索引。
include_source 设置为 True,然后源文档将被存储,并使用 MENTIONS 关系与图中的节点相连。
id,因此会生成 id 属性。
你可以同时使用 __Entity__ 标签和文档来源。但请注意,两者都会占用内存,特别是包含来源时,由于内容字符串较长,内存占用更大。
最后,你可以像之前章节中解释的那样查询知识图谱:
将这些文档连接到 Claude、VSCode 等工具,通过 MCP 获取实时答案。

