作者:后端小肥肠
🍊 有疑问可私信或评论区联系我。
🥑 创作不易未经允许严禁转载。
姊妹篇:
2025防失业预警:不会用DeepSeek-RAG建知识库的人正在被淘汰_deepseek-embedding-CSDN博客
从PDF到精准答案:Coze助力RAGFlow框架提升数据召回率_rag 召回率测试-CSDN博客
基于RAGFlow本地部署DeepSeek-R1大模型与知识库:从配置到应用的全流程解析_ragflow 怎么配置自己部署的大模型-CSDN博客
1. 前言
当前的检索增强生成(RAG)技术在实际应用中面临若干挑战。传统的RAG采用基于向量的扁平化数据表示,难以有效建模实体之间的复杂语义关系,导致在处理复杂领域知识时检索精度不足。此外,传统RAG在多实体关联推理中容易出现逻辑断层,且全量更新机制使得知识库的维护成本随数据规模指数增长。相比之下,LightRAG通过引入图结构和增量更新算法,大幅降低了计算开销,提高了系统在实时数据更新和复杂推理场景中的应用效能。
本文将深入探讨LightRAG的原理,通过实战演示如何基于LightRAG生成知识图谱,同时展示如何进行查询操作,帮助你全方位掌握这一工具。感兴趣的话就继续往下阅读吧~
2. LightRAG简介
2.1. 什么是LightRAG
LightRAG(Lightweight Retrieval-Augmented Generation)是香港大学团队开发的一种轻量级、高效的检索增强生成(RAG)系统。它通过将图结构融入文本索引和检索过程中,采用双层检索机制,增强了对复杂实体依赖关系的理解能力,同时提高了信息检索的效率和响应速度,项目指路:github.com/HKUDS/Light...

LightRAG的主要优势包括:
- 高效的知识图谱构建: LightRAG通过图结构差异分析实现增量更新算法,显著降低了计算开销,使知识库维护更加高效。
- 双层检索机制: 该系统结合了低层次(具体实体和属性)和高层次(广泛主题和概念)的检索策略,满足了不同类型的查询需求,提高了检索的全面性和多样性。
- 快速适应动态数据: LightRAG能够在新数据到来时快速整合,无需重建整个知识库,确保系统在动态环境中保持高效和准确。
通过了解和使用LightRAG,您可以构建高效、灵活且易于维护的知识图谱系统,提升信息检索和生成任务的性能,特别是在处理复杂实体关系和动态数据更新的场景中。
2.2. LightRAG检索和查询流程图

上述流程可以归纳为两大步骤,分别为索引构建流程 和查询响应流程:
索引构建流程:
这个阶段的目标是把所有资料整理好,方便后续快速查找,就像把图书馆的书按主题、内容、关系整整齐齐地放好:
1. 把文本切块 + 提取知识
- 系统先把原始文档分成一个个小段落(Chunk),方便处理。
- 然后通过语言模型,从中找出关键的人名、地名、概念等,并发现它们之间的联系(比如:"乔布斯 创办 苹果公司")。
- 最后去掉重复内容,把图谱结构整理得更紧凑、更清晰。
2. 存进图谱+向量库
- 所有概念和它们之间的关系会被保存成一张"知识图谱",像思维导图一样储存在图数据库里。
- 同时,每个概念和文本也会被转成"向量"(一串数字),方便用数学方式快速找相似的内容。
3. 动态更新
- 当新数据加入时,LightRAG采用增量更新算法,只更新相关部分,而无需重建整个知识库。

查询响应流程:
这个阶段的任务是:当用户提出一个问题时,系统先理解问题在说什么,然后去"知识库"里找答案,再组织成一段清晰自然的回复。
1. 先分析问题,分出两类关键词
系统会分析用户提问的句子,从中提取出两种关键词:
- 局部关键词:具体的内容,比如"爱因斯坦"、"相对论"这种名词。
- 全局关键词:更偏概念性的词,比如"物理学原理"、"科学贡献"。
2. 两步查找,信息更全面
- 局部检索:先用具体的关键词在"向量库"里找最相关的小段落或知识点。
- 全局检索:再根据概念性关键词,在知识图谱中沿着关系扩展,找更多相关内容。
3. 组织上下文,生成自然语言回答
- 把刚才查到的信息拼成一个"上下文背景",喂给语言模型(LLM)。
- 系统会按照提前设定的"回答模板"来组织内容,确保回答连贯、有逻辑、信息完整。

3. LightRAG构建检索增强生成系统(生成知识图谱)
3.1. 本地安装
本地安装教程比较简单,首先我们需要把项目克隆到本地,可以用git下载,也可以直接下载安装包:

下载到本地后还是用Pycharm打开,配置一下环境(需要先建立虚拟环境LightRAG,怎么建的就不说了,实在不会的去看我这篇文章的3.1小节blog.csdn.net/c1821359022...)

打开命令行:

运行以下命令安装LightRAG Core:
erlang
pip install -e .
之后运行以下命令安装LightRAG Server:
arduino
pip install -e ".[api]"
3.2. LightRAG构建检索增强生成系统(生成知识图谱)实战
在程序的examples目录下面提供了很多构建检索增强生成系统(生成知识图谱)的python示例文件:

首先我们需要下载一下用于生成知识图谱的示例文件(狄更斯的圣诞颂歌):
bash
curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt
下载完成以后记得放到examples目录下面。
3.2.1. 基于ollama构建检索增强生成系统(生成知识图谱)
基于ollama构建检索增强生成系统(生成支持图谱)的python文件为lightrag_ollama_demo.py,官方就有相关视频教我们怎么一步步生成知识图谱和进行查询操作:www.youtube.com/watch?v=g21...,如果你本地显存很大,可以试一下,否则我不建议你去浪费时间,我就被卡了一下午,我的chat模型用的是deepseek-r1:1.5b,向量模型用的是nomic-embed-text:latest

报错503,出于程序员的本能,我第一时间就想着用postman测一下这个接口能通吗?测了以后是通的。

于是又去查了资料:

被自己蠢笑了,原本是本地电脑8G的显存根本不够.......
3.2.2. 调用云端智普大模型构建检索增强生成系统(生成知识图谱)
基于云端智普大模型生成知识图谱的python文件为lightrag_zhipu_demo.py,加一行代码配置一下智普大模型的apiKey就行:
lua
os.environ["ZHIPUAI_API_KEY"] = ""
你实在不知道加哪里(纯小白),就直接粘贴我这个代码替换lightrag_zhipu_demo.py:
python
# 导入必要的标准库
import os
import logging
import asyncio
# 从lightrag库中导入LightRAG类和QueryParam类
from lightrag import LightRAG, QueryParam
# 从lightrag.llm.zhipu模块中导入智普大模型的文本生成和嵌入函数
from lightrag.llm.zhipu import zhipu_complete, zhipu_embedding
# 从lightrag.utils模块中导入EmbeddingFunc类,用于定义嵌入函数
from lightrag.utils import EmbeddingFunc
# 从lightrag.kg.shared_storage模块中导入初始化管道状态的函数
from lightrag.kg.shared_storage import initialize_pipeline_status
# 设置工作目录
WORKING_DIR = "./dickens"
# 配置日志记录,设置日志格式和日志级别为INFO
logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)
# 如果工作目录不存在,则创建该目录
if not os.path.exists(WORKING_DIR):
os.mkdir(WORKING_DIR)
# 设置智普大模型的API密钥
os.environ["ZHIPUAI_API_KEY"] = ""
# 获取环境变量中的API密钥
api_key = os.environ.get("ZHIPUAI_API_KEY")
# 如果API密钥未设置,则抛出异常提示用户设置API密钥
if api_key is None:
raise Exception("Please set ZHIPU_API_KEY in your environment")
# 定义一个异步函数,用于初始化LightRAG实例
async def initialize_rag():
# 创建LightRAG实例
rag = LightRAG(
working_dir=WORKING_DIR, # 设置工作目录
llm_model_func=zhipu_complete, # 设置使用的语言模型函数
llm_model_name="glm-4-flashx", # 设置使用的语言模型名称
llm_model_max_async=4, # 设置最大异步请求数
llm_model_max_token_size=32768, # 设置模型处理的最大token数量
# 设置嵌入函数
embedding_func=EmbeddingFunc(
embedding_dim=2048, # 设置嵌入向量的维度
max_token_size=8192, # 设置模型处理的最大token数量
func=lambda texts: zhipu_embedding(texts), # 使用智普的嵌入函数
),
)
# 初始化存储系统
await rag.initialize_storages()
# 初始化管道状态
await initialize_pipeline_status()
# 返回初始化好的LightRAG实例
return rag
# 定义主函数
def main():
# 使用异步事件循环初始化LightRAG实例
rag = asyncio.run(initialize_rag())
# 读取本地文本文件并将其内容插入到LightRAG中
with open("./book.txt", "r", encoding="utf-8") as f:
rag.insert(f.read())
# 使用不同的查询模式进行检索并打印结果
# 朴素检索:基础查询模式
print(
rag.query(
"What are the top themes in this story?", param=QueryParam(mode="naive")
)
)
# 局部检索:局部检索模式,仅查找与输入相关的区域
print(
rag.query(
"What are the top themes in this story?", param=QueryParam(mode="local")
)
)
# 全局检索:全局检索模式,扩展到整个知识图谱的关系
print(
rag.query(
"What are the top themes in this story?", param=QueryParam(mode="global")
)
)
# 混合检索:混合模式,结合局部与全局信息
print(
rag.query(
"What are the top themes in this story?", param=QueryParam(mode="hybrid")
)
)
# 如果当前模块是主模块,则调用主函数
if __name__ == "__main__":
main()
上述代码展示了如何使用LightRAG框架构建一个基于智普大模型的检索增强生成系统。首先,设置工作目录并配置智普API密钥。然后,定义了一个异步函数initialize_rag
,用于初始化LightRAG实例,包括设置语言模型、嵌入函数和其他参数。在main
函数中,读取本地文本文件,将其内容插入到LightRAG中,并执行多种查询模式(如naive、local、global、hybrid),以获取不同层次的检索结果。整个流程实现了从文本处理、嵌入生成到多模式检索的功能。
不知道智普大模型的apiKey怎么申请的可以点击这个网址:www.bigmodel.cn/usercenter/...

填入apiKey后运行代码,代码运行完毕后会在工作目录生成结果文件:

以下是对各文件功能的解释(细节图我就不截了,可以生成出来自己去看文件细节):
1. graph_chunk_entity_relation.graphml
: 该文件以GraphML格式存储知识图谱的图形结构,包括实体节点及其相互关系。这种格式便于使用图形处理工具进行可视化和分析。
2. kv_store_doc_status.json
: 此JSON文件记录文档处理的状态信息,例如文档是否已成功处理或是否存在错误。这有助于跟踪文档的处理进度和状态。
3. kv_store_full_docs.json
: 存储原始文档的完整内容。该文件包含了所有输入文档的文本数据,便于后续的检索和处理。
4. kv_store_llm_response_cache.json
: 用于缓存大型语言模型(LLM)的响应结果,以提高系统的响应速度和效率,避免对相同请求进行重复计算。
5. kv_store_text_chunks.json
: 存储将文档拆分成的小块(chunks)后的文本数据。将长文档拆分为较小的块有助于提高处理效率和检索精度。
6. vdb_chunks.json
: 包含文本块的向量化表示。通过将文本块转换为向量,可以在向量数据库中进行高效的相似度搜索和检索。
7. vdb_entities.json
: 存储知识图谱中实体的向量表示。将实体转换为向量形式,有助于在检索和推理过程中快速匹配和识别相关实体。
8. vdb_relationships.json
: 记录知识图谱中实体之间关系的向量表示。通过将关系表示为向量,可以在图谱中进行高效的关系检索和推理。
这些文件共同构成了LightRAG系统的数据存储和管理架构,支持知识图谱的构建、更新和查询等功能。
运行graph_visual_with_html.py,就可以生成可视化的知识图谱html页面:
python
# 导入pipmaster库,用于简化Python包的安装和管理
import pipmaster as pm
# 检查并安装pyvis库,如果尚未安装
if not pm.is_installed("pyvis"):
pm.install("pyvis")
# 检查并安装networkx库,如果尚未安装
if not pm.is_installed("networkx"):
pm.install("networkx")
# 导入networkx库,用于创建和操作复杂的网络图
import networkx as nx
# 从pyvis.network模块导入Network类,用于在浏览器中展示网络图
from pyvis.network import Network
# 导入random模块,用于生成随机数
import random
# 读取GraphML格式的图文件,创建一个NetworkX图对象G
G = nx.read_graphml("./dickens/graph_chunk_entity_relation.graphml")
# 创建一个Pyvis的Network对象,用于在浏览器中展示网络图
net = Network(height="100vh", notebook=True)
# 将NetworkX图对象G转换为Pyvis网络
net.from_nx(G)
# 遍历网络中的所有节点,为每个节点添加随机颜色和提示信息
for node in net.nodes:
# 为节点分配一个随机颜色
node["color"] = "#{:06x}".format(random.randint(0, 0xFFFFFF))
# 如果节点有"description"属性,将其设置为鼠标悬停时显示的提示信息
if "description" in node:
node["title"] = node["description"]
# 遍历网络中的所有边,为每条边添加提示信息
for edge in net.edges:
# 如果边有"description"属性,将其设置为鼠标悬停时显示的提示信息
if "description" in edge:
edge["title"] = edge["description"]
# 将网络图保存为HTML文件,并在浏览器中展示
net.show("knowledge_graph.html")
上述代码使用 networkx
创建图结构,利用 pyvis
将其转换为交互式网络图,并在浏览器中显示。代码首先检查并安装所需的 pyvis
和 networkx
库,随后读取存储在 ./dickens/graph_chunk_entity_relation.graphml
的图数据文件。通过 pyvis
的 Network
类,将 networkx
图对象转换为可视化网络,随机为每个节点分配颜色,并设置节点和边的提示信息。最终,生成的交互式网络图被保存为 knowledge_graph.html
文件,用户可在浏览器中打开并与之交互。

把鼠标移动到节点上还能查看详情:

4. LightRAG查询
在lightrag_zhipu_demo.py中选择你想要的查询模式(注释其他模式),输入问题即可进行查询(我选的是global模式):

我的问题是:
这个故事的主题是什么?
LightRAG的回答:
markdown
这个故事的主题是道德救赎和人物转变。通过讲述吝啬鬼斯克鲁奇在圣诞节的经历,以及他与三位圣诞灵的相遇,故事展现了斯克鲁奇从自私、冷酷到慷慨、仁慈的转变。圣诞节作为一个象征性的节日,强调了慷慨、善良和对他人的关怀。故事传达了深刻的道德教训,即人们可以通过反思和改变自己的行为来获得救赎。以下是几个重要的主题:
1. 道德救赎:斯克鲁奇在故事中经历了深刻的道德转变,他从最初的冷漠和吝啬,最终转变为一个慷慨和仁慈的人。
2. 人物转变:斯克鲁奇的转变是故事的核心,它展示了一个人在经历启示后如何改变自己的性格和行为。
3. 圣诞节的象征意义:圣诞节作为一个节日,象征着慷慨、善良和社区的团结,对斯克鲁奇的性格转变起到了重要的推动作用。
4. 社会批判:故事通过描绘斯克鲁奇对穷人和慈善事业的冷漠态度,对社会的不平等和贫富差距进行了批判。
5. 人性的复杂性:斯克鲁奇的形象展示了人性的复杂性,即使是一个冷酷的人也有机会改变自己,成为更好的人。
以上主题共同构成了《圣诞颂歌》的核心内容,使其成为一部经典的文学作品。
5. 资料获取
如果你对DeepSeek 的相关知识还不熟悉,可以关注gzh后端小肥肠,点击底部【资源】菜单获取DeepSeek相关教程资料。
6. 结语
通过对LightRAG技术的探索与应用,我们不仅成功地构建了一个高效的知识图谱系统,还进一步理解了RAG(检索增强生成)技术在实际应用中的潜力与挑战。LightRAG通过引入图结构和增量更新机制,大大提升了知识图谱的构建效率与查询精度,特别是在处理复杂领域知识时,展现了其独特的优势。此外,LightRAG通过结合检索与生成的双层机制,能够在保持语义连贯性的同时,实现对多实体、多层次关系的深入理解。无论是在文本生成、信息检索还是知识图谱的可视化等方面,LightRAG都为我们提供了新的思路和工具,推动了智能系统在处理复杂问题时的表现。
如果本文对你有帮助,请动动小手点点关注哦~小肥肠将持续更新AI相关干货知识和好用工具。
