Bootstrap

使用 LangChain 和 Neo4j 构建 GraphRAG 工作流

随着 Neo4j 宣布与 LangChain 的集成,我们见证了大量基于知识图谱和大语言模型(LLM)的检索增强生成(RAG)应用场景的涌现。这一发展在最近几个月显著推动了知识图谱在 RAG 中的应用。相比传统的 RAG 系统,基于知识图谱的 RAG 系统在管理幻觉(hallucinations)方面表现更佳。此外,基于代理的系统的使用也在快速增长,以进一步增强 RAG 应用。为了更进一步,LangChain 生态系统中新增了 LangGraph 框架,为 LLM 应用添加了循环和持久化功能。

本文将详细介绍如何使用 LangChain 和 Neo4j 构建一个 GraphRAG 工作流,并通过实际代码示例进行分步讲解,最后提供完整的代码实现。

目录

  1. 项目简介
  2. 环境配置
    • 安装必要的库
    • 配置环境变量
  3. 代码结构与功能概述
  4. 分步讲解代码
    • 导入库与加载环境变量
    • 配置 OpenAI LLM
    • 读取和分割文本
    • 转换为图文档
    • 连接 Neo4j 数据库
    • 写入图数据库
    • 查询与验证
  5. 完整代码
  6. 总结与展望

项目简介

在本项目中,我们将使用 LangChain 构建一个工作流,该工作流能够读取文本数据,使用大语言模型进行处理,并将结果存储在 Neo4j 图数据库中。这种方式不仅能够有效管理和查询知识,还能通过图数据库的强大关系分析能力,增强 RAG 应用的表现。

环境配置

安装必要的库

首先,确保您的开发环境中安装了以下必要的 Python 库:

pip install langchain_openai dotenv langchain_community python-dotenv

配置环境变量

为了确保敏感信息(如 API 密钥、数据库链接和密码)的安全,我们将使用环境变量来存储这些信息。您可以通过创建一个 .env 文件来管理这些变量。

  1. 创建 .env 文件

在项目的根目录下创建一个名为 .env 的文件,并添加以下内容:

OPENAI_API_KEY=your_openai_api_key
OPENAI_API_URL=http://your_api_url:port/v1
NEO4J_URI=bolt://your_neo4j_host:port
NEO4J_USERNAME=your_neo4j_username
NEO4J_PASSWORD=your_neo4j_password

注意: 请将 your_openai_api_keyyour_api_urlyour_neo4j_hostyour_neo4j_usernameyour_neo4j_password 替换为您的实际凭证信息。

  1. 加载环境变量

在代码中使用 python-dotenv 库加载 .env 文件中的环境变量:

from dotenv import load_dotenv

# 加载 .env 文件中的环境变量
load_dotenv()

代码结构与功能概述

整个工作流分为以下几个主要步骤:

  1. 导入库与加载环境变量:引入必要的 Python 库并加载环境变量。
  2. 配置 OpenAI LLM:设置大语言模型的相关参数。
  3. 读取和分割文本:从文件中读取文本内容,并使用 RecursiveCharacterTextSplitter 进行分块处理。
  4. 转换为图文档:将分割后的文档转换为适合存储在图数据库中的格式。
  5. 连接 Neo4j 数据库:配置并连接到 Neo4j 图数据库。
  6. 写入图数据库:将转换后的图文档写入 Neo4j 数据库中。
  7. 查询与验证:执行数据库查询以验证数据的正确写入。

分步讲解代码

下面我们将逐步解析每一部分代码,理解其功能与实现。

导入库与加载环境变量

from langchain_openai import OpenAI
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from langchain_core.documents import Document
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_experimental.graph_transformers import LLMGraphTransformer
# 对接国产模型需要修改use_function_call 
# from llm_cn import LLMGraphTransformer 

import os
from dotenv import load_dotenv
from langchain_community.graphs import Neo4jGraph

# 加载 .env 文件中的环境变量
load_dotenv()

说明:

  • 导入了 LangChain
;