从零开始掌握基于图的RAG:LangChain+Neo4j构建智能知识图谱应用!
本文详细介绍了RAG的两种实现方式,重点解析了基于图的RAG及其优势(处理关系、消除歧义、可解释性等)。文章通过完整代码示例,展示了如何使用LangChain框架与Neo4j数据库交互,实现基于图RAG的应用。内容包括RAG概述、LangChain基本用法、Neo4j连接配置、知识图谱创建与填充等,为开发者提供了构建智能知识图谱应用的完整指南。
简介
本文详细介绍了RAG的两种实现方式,重点解析了基于图的RAG及其优势(处理关系、消除歧义、可解释性等)。文章通过完整代码示例,展示了如何使用LangChain框架与Neo4j数据库交互,实现基于图RAG的应用。内容包括RAG概述、LangChain基本用法、Neo4j连接配置、知识图谱创建与填充等,为开发者提供了构建智能知识图谱应用的完整指南。
通过上次的分享,想必大家对图数据库和Neo4j已经有了基本了解,也知道了如何以编码方式与Neo4j数据库交互。这次我会带大家先简单了解一下RAG的两种实现方式,重点解析基于图的RAG,随后一步一步带大家完成LangChain与Neo4j数据库的交互。
一、RAG概述

RAG是一种让人工智能更聪明的两步流程:首先,人工智能从可信来源搜索相关信息。然后,对找到的内容精心组织,生成既相关又准确的回答。

RAG使用的数据几乎没有任何限制,这些数据可以来自PDF、网站、数据库,甚至是API。例如,在我们的后期分享中会使用图作为我们的RAG工具,从像PDF文档这类非结构化数据中创建这些图。RAG让人工智能在客户支持、研究、医疗建议甚至Coding等方面更加准确、可靠。只要你需要人工智能生成真实、可信信息,而不是胡编乱造,RAG都是不二之选。
基于向量的方法
目前,RAG的实现方式归根结底主要有两种:一种基于向量,另一种就是基于图。先来看看基于向量的方式,大家都知道,RAG的核心在于生成响应之前能检索到有用的信息。传统基于关键词的搜索过于死板,比如我们之前谈到的“苹果”的例子,如果只采用关键词搜索,大概率得到的结果是不准确的。
想必大家都知道,生成式人工智能的原理:模型会将输入转换为数字,代入巨型方程后通过计算来预测下一个可能出现的词。所以模型首先会把你输入的文本,通过嵌入转换为向量表示。这些向量不仅捕捉单词,还捕捉文本的语义。在向量空间中,Dog和Puppy这样语义相似的单词会彼此靠近,而Dog和Toaster语义天差地别,彼此会相距甚远。

当你向由RAG驱动的人工智能提问时,它不仅在寻找匹配的单词,还会在向量空间中寻找相似的上下文。整个过程如下:
- 将可信来源(文档、文章或数据库)转换为向量,存到数据库中
- 将用户问题转换为向量
- 在向量库中寻找与用户问题在数学意义上最接近的向量
- 将找到的向量转回文本返回给人工智能用作上下文
- 人工智能结合用户问题及检索返回的上下文生成可信答案
一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

基于图的方法
通过前面的讲述,想必大家已经知道,向量检索很强大,它能找到相似的上下文。可是,在某些场景(比如医疗、法律)下,仅有相似的上下文是不够的,关系也很重要,而这正是图最擅长的领域。
你可以把向量检索想象成在图书馆里根据主题来找书,这个它很擅长,但如果你需要的是该主题的专家撰写的全部书籍,而非该主题本身的书,它就有点捉襟见肘了。
此时,图就派上用场了,图不仅存储数据,还存储数据之间的关系,它能告诉你谁认识谁,什么影响了什么,事物之间如何关联,超越简单的关键词重叠和上下文相似性。
这也就是说你可以基于关系而非仅仅是表面相似性来检索信息,通过追踪连接来深化检索。例如,假设你向人工智能询问某个具体法条,向量搜索可能会找到类似的法律文件,但图还能链接到相关判例、专家意见和立法过程。

图还有助于消除歧义。比如说你询问有关Python的信息,向量搜索可能会同时返回Python语言和蟒蛇的信息。而图由于能理解上下文(比如你的查询是与编码还是野生动物相关),它能区分两者。这是图的可解释性优势。
如果人工智能的响应来自图,你就可以追溯其推理过程。比如查看它为什么引用那篇论文?因为它与该领域的一位专家有关联。

接下来我们聊聊修改RAG向量库中的数据。使用基于向量的RAG时,修改向量库有点麻烦,通常需要重新处理向量嵌入。而给图添加新文本,只需添加新的节点和关系即可,这让修改更加容易、顺畅。
看到这里,大家可能会有个疑问,既然图RAG这么好,是不是可以只使用它呢?基于向量的RAG和图RAG各自的使用场景是什么呢:
- 如果处理的是简短、简单的查询,向量搜索可能就足够了。
- 如果需要上下文、推理或深度关联,就要使用图RAG,它能给你带来显著优势。
简单一句话:向量提供相似性,图提供意义。而在检索方面,有时意义至关重要。
二、LangChain概述
接下来我们会使用名为LangChain的Python包来构建基于图RAG的人工智能应用,有必要先了解一下它。
LangChain是一个用来同大语言模型进行协作的开发框架,目标是让人工智能应用的开发更简单、更灵活。我们可以将其视为一个工具包,为你提供构建模块,用来构建和控制模型与用户和数据的交互方式。之所以它如此实用,原因之一就在于它高度的模块化,这些模块可以:
- 让你连接到LLM
- 创建提示词以及对提示词进行标准化
- 历史跟踪
- 从外部来源提取数据
通过提供这些模块,会大大降低需要编写的代码量,让开发人工智能应用变得更轻松便捷。
LangChain的另一大优点是支持广泛的集成,能轻松将代码与数据连接起来。它几乎兼容所有主流的大语言模型,比如 OpenAI、Anthropic和Deepseek等。同时,还能同像Neo4j这样的数据库以及 AWS和Azure 等云服务协同工作。
LangChain的基本用法
稍后,我们会用LangChain框架来开发基于图RAG的人工智能应用,不过在这之前,我想先给大家演示一下用它来开发人功智能应用的通用做法。
观其名知其意,通过LangChain我们能把各种组件组合起来,这些组合的组件代表了人工智能流程的各个环节。
一般来说,在使用大语言模型时会先从Prompt开始。Prompt是我们传递给大语言模型的一组指令,这些指令用来告诉模型需要它要完成的任务,Prompt有几种不同的类型:
- 系统提示。定义预期行为的基础指令。
system_prompt = SystemMessagePromptTemplate.from_template(
"You are a helpful assistant. Return your answer in priate speak in 3 sentences maximum."
)
- 用户提示。用户对应用所说的推动对话或查询的内容。
human_prompt = HumanMessagePromptTemplate.from_template("{input}")
整体提示是系统提示和用户提示的组合,两者都会传递给大语言模型。LangChain 的优点之一是它为全部这些环节提供了模板。
prompt = ChatPromptTemplate.from_messages([system_prompt,human_prompt])
一旦有了提示,就需要将其传递给大语言模型。LangChain使用LCEL将提示向大语言模型传递信息的操作视作一个链。
llm = ChatOpenAI(model="gpt-4o", temperature=0)
chain = prompt | llm
LCEL使用管道运算符来定义链中各个组件之间的数据流。链创建完成后,我们调用它并向其发送输入,大语言模型就会生成响应。
chain.invoke({"input": "What is the plot of Hamlet?"})
LangChain中图的核心概念
前面我们了解了LangChain的基本用法,也就是怎样通过提示将用户查询输入到大语言模型中,让模型生成响应。但如何将其应用到图中呢?
LangChain自身提供了对Neo4j和其他图工具的集成,我们可以使用langchain_neo4j来操作Neo4j实例,比如建立连接,使用自然语言而非Cypher来进行查询,创建自己的知识图谱等。要使用这个组件,需要先安装langchain-neo4j软件包,并将Neo4j的凭证保存到.env文件中。
1.安装包
pip install python-dotenv
pip install langchain
pip install langchain-neo4j
pip install langchain-openai
2.导入包
import os
from dotenv import load_dotenv
from langchain.prompts import ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate
from langchain_neo4j import Neo4jGraph,GraphCypherQAChain
from langchain_openai import ChatOpenAI
3.获取Neo4j实例连接凭证
load_dotenv()
URI = os.getenv("NEO4J_URI")
USER = os.getenv("NEO4J_USER")
PASS = os.getenv("NEO4J_PASS")
4.与Neo4j实例建立连接
# 需要确保Neo4j实例处于'RUNNING'状态,否则报错
graph = Neo4jGraph(url=URI, username=USER, password=PASS)
5.创建Cypher问答链
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 创建Cypher问答链
chain = GraphCypherQAChain.from_llm(
# llm提供对使用自然语言来查询图数据库的支持
llm = llm,
graph = graph,
# 告诉langchain使用受限凭证访问数据库
allow_dangerous_requests = True,
# 观察运行情况,需将verbose设置为True
verbose = True
)
6.查询的问题
chain.invoke(input={"query":"图中有多少个节点?"})
7.完整演示代码
import os
from dotenv import load_dotenv
from langchain.prompts import ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate
from langchain_neo4j import Neo4jGraph,GraphCypherQAChain
from langchain_openai import ChatOpenAI
load_dotenv()
URI = os.getenv("NEO4J_URI")
USER = os.getenv("NEO4J_USER")
PASS = os.getenv("NEO4J_PASS")
graph = Neo4jGraph(url=URI, username=USER, password=PASS)
llm = ChatOpenAI(model="gpt-4o", temperature=0)
chain = GraphCypherQAChain.from_llm(
llm = llm,
graph = graph,
allow_dangerous_requests = True,
verbose = True
)
chain.invoke(input={"query":"图中有多少个节点?"})
三、用LangChain填充知识图谱到Neo4j
截止目前,我们一直在使用预填充到Neo4j中的图,现在我们来看看怎样填充我们自己的知识图谱,要做这件事有多种方法,不过我们这里会使用LangChain中的一些工具来完成。
有两个事情需要注意一下,一个是LangChain处于快速发展之中,尤其是在处理图数据方面,所以最好使用最新版本的软件包,定期查看文档***。另一个需要注意的点是,由于云平台同时只允许运行一个免费版实例*,要完成本节的任务,我会删掉之前的实例,重新创建一个。
1.安装包
pip install python-dotenv
pip install langchain
pip install langchain-neo4j
pip install langchain-openai
pip install langchain-experimental
2.导入包
import os
from pprint import pprint
from dotenv import load_dotenv
from langchain_core.documents import Document
from langchain_experimental.graph_transformers import LLMGraphTransformer
from langchain_neo4j import Neo4jGraph
from langchain_openai import ChatOpenAI
- 获取Neo4j实例连接凭证
load_dotenv()
URI = os.getenv("NEO4J_URI")
USER = os.getenv("NEO4J_USER")
PASS = os.getenv("NEO4J_PASS")
4.与Neo4j实例建立连接
graph = Neo4jGraph(url=URI, username=USER, password=PASS)
5.定义要处理的文本
text = """
LangChain是一个围绕LLMs构建的开源框架,旨在简化基于LLMs开发复杂应用的流程。它通过提供一系列工具、组件和接口,帮助开发者将LLMs与外部数据、其他系统或工具集成,从而构建更强大、更灵活的应用。
"""
- 初始化知识图谱转换器
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 用llm初始化知识图谱转换器
# LLMGraphTransformer利用llm的语义理解能力,从文本中
# 提取实体及实体间的关系
llm_transformer = LLMGraphTransformer(llm=llm)
- 将文本转换为包含节点和关系的图谱文档
# 将文本封装为符合LangChain框架要求的Document对象
documents = [Document(page_content=text)]
# 将文本文档转换为包含节点和关系的图谱文档
graph_documents = llm_transformer.convert_to_graph_documents(documents)
# 打印提取的节点和关系
pprint(f"Nodes:{graph_documents[0].nodes}")
pprint(f"Relationships:{graph_documents[0].relationships}")
- 存储知识图谱到Neo4j
# 方式1:节点中不包含源文本
graph.add_graph_documents(graph_documents)
# 方式2:节点中包含引用的源文本
graph.add_graph_documents(graph_documents,include_source=True)
9.完整代码
import os
from pprint import pprint
from dotenv import load_dotenv
from langchain_core.documents import Document
from langchain_experimental.graph_transformers import LLMGraphTransformer
from langchain_neo4j import Neo4jGraph
from langchain_openai import ChatOpenAI
load_dotenv()
URI = os.getenv("NEO4J_URI")
USER = os.getenv("NEO4J_USER")
PASS = os.getenv("NEO4J_PASS")
graph = Neo4jGraph(url=URI, username=USER, password=PASS)
text = """
LangChain是一个围绕LLMs构建的开源框架,旨在简化基于LLMs开发复杂应用的流程。它通过提供一系列工具、组件和接口,帮助开发者将LLMs与外部数据、其他系统或工具集成,从而构建更强大、更灵活的应用。
"""
llm = ChatOpenAI(model="gpt-4o", temperature=0)
llm_transformer = LLMGraphTransformer(llm=llm)
documents = [Document(page_content=text)]
graph_documents = llm_transformer.convert_to_graph_documents(documents)
pprint(f"Nodes:{graph_documents[0].nodes}")
pprint(f"Relationships:{graph_documents[0].relationships}")
graph.add_graph_documents(graph_documents)
10.结果验证

需要注意一点,如果你们的图和我的不一样,不用担心,这是因为大语言模型是基于概率的模型,意味着每次运行的结果会略有不同,不过参照文本来看,它仍然是有意义的。
四、如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

2025年大模型应用呈现爆发式增长,根据工信部最新数据:
国内大模型相关岗位缺口达47万
初级工程师平均薪资28K(数据来源:BOSS直聘报告)
70%企业存在"能用模型不会调优"的痛点
真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!
02.如何学习大模型 AI ?
🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)






第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)