从零开始学图RAG:用LangChain+Neo4j构建智能知识图谱系统,零基础小白收藏这一篇就够了!!
本文详细介绍了RAG的两种实现方式,重点解析了基于图的RAG在处理关系和上下文方面的优势。通过LangChain框架与Neo4j图数据库的集成,演示了如何将文本转换为知识图谱并实现智能问答。文章提供了完整的代码示例,帮助开发者掌握构建基于图RAG应用的核心技术和方法,特别适合需要处理复杂关系数据的场景。
前言
通过上次的分享,想必大家对图数据库和Neo4j已经有了基本了解,也知道了如何以编码方式与Neo4j数据库交互。这次我会带大家先简单了解一下RAG的两种实现方式,重点解析基于图的RAG,随后一步一步带大家完成LangChain与Neo4j数据库的交互。
一、RAG概述

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

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

当你向由RAG驱动的人工智能提问时,它不仅在寻找匹配的单词,还会在向量空间中寻找相似的上下文。整个过程如下:
- 将可信来源(文档、文章或数据库)转换为向量,存到数据库中
- 将用户问题转换为向量
- 在向量库中寻找与用户问题在数学意义上最接近的向量
- 将找到的向量转回文本返回给人工智能用作上下文
- 人工智能结合用户问题及检索返回的上下文生成可信答案

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

图还有助于消除歧义。比如说你询问有关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
3.获取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与外部数据、其他系统或工具集成,从而构建更强大、更灵活的应用。
"""
6 初始化知识图谱转换器
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 用llm初始化知识图谱转换器
# LLMGraphTransformer利用llm的语义理解能力,从文本中
# 提取实体及实体间的关系
llm_transformer = LLMGraphTransformer(llm=llm)
7.将文本转换为包含节点和关系的图谱文档
# 将文本封装为符合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}")
8.存储知识图谱到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.结果验证

需要注意一点,如果你们的图和我的不一样,不用担心,这是因为大语言模型是基于概率的模型,意味着每次运行的结果会略有不同,不过参照文本来看,它仍然是有意义的。
四、总结
通过这次分享,相信大家已经对RAG、LangChain框架以及如何用它构建基于图的应用有了清晰的认识,快点动手实践起来吧,你会发现图数据库在处理复杂关系数据时的独特优势,LangChain框架带来的开发便捷性。
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐
所有评论(0)