LightRAG实战:轻松构建知识图谱,破解传统RAG多跳推理难题

news2025/4/9 10:03:15

作者:后端小肥肠

🍊 有疑问可私信或评论区联系我。

🥑 创作不易未经允许严禁转载。

姊妹篇:

2025防失业预警:不会用DeepSeek-RAG建知识库的人正在被淘汰_deepseek-embedding-CSDN博客

从PDF到精准答案:Coze助力RAGFlow框架提升数据召回率_rag 召回率测试-CSDN博客

基于RAGFlow本地部署DeepSeek-R1大模型与知识库:从配置到应用的全流程解析_ragflow 怎么配置自己部署的大模型-CSDN博客

目录

1. 前言

2. LightRAG简介

2.1. 什么是LightRAG

2.2. LightRAG检索和查询流程图

3. LightRAG构建检索增强生成系统(生成知识图谱)

3.1. 本地安装

3.2. LightRAG构建检索增强生成系统(生成知识图谱)实战

3.2.1. 基于ollama构建检索增强生成系统(生成知识图谱)

3.2.2. 调用云端智普大模型构建检索增强生成系统(生成知识图谱)

4. LightRAG查询

5. 资料获取

6. 结语

1. 前言

当前的检索增强生成(RAG)技术在实际应用中面临若干挑战。传统的RAG采用基于向量的扁平化数据表示,难以有效建模实体之间的复杂语义关系,导致在处理复杂领域知识时检索精度不足。此外,传统RAG在多实体关联推理中容易出现逻辑断层,且全量更新机制使得知识库的维护成本随数据规模指数增长。相比之下,LightRAG通过引入图结构和增量更新算法,大幅降低了计算开销,提高了系统在实时数据更新和复杂推理场景中的应用效能。

本文将深入探讨LightRAG的原理,通过实战演示如何基于LightRAG生成知识图谱,同时展示如何进行查询操作,帮助你全方位掌握这一工具。感兴趣的话就继续往下阅读吧~

2. LightRAG简介

2.1. 什么是LightRAG

LightRAG(Lightweight Retrieval-Augmented Generation)是香港大学团队开发的一种轻量级、高效的检索增强生成(RAG)系统。它通过将图结构融入文本索引和检索过程中,采用双层检索机制,增强了对复杂实体依赖关系的理解能力,同时提高了信息检索的效率和响应速度,项目指路:https://github.com/HKUDS/LightRAG

LightRAG的主要优势包括:

  1. 高效的知识图谱构建:LightRAG通过图结构差异分析实现增量更新算法,显著降低了计算开销,使知识库维护更加高效。
  2. 双层检索机制:该系统结合了低层次(具体实体和属性)和高层次(广泛主题和概念)的检索策略,满足了不同类型的查询需求,提高了检索的全面性和多样性。
  3. 快速适应动态数据:LightRAG能够在新数据到来时快速整合,无需重建整个知识库,确保系统在动态环境中保持高效和准确。

通过了解和使用LightRAG,您可以构建高效、灵活且易于维护的知识图谱系统,提升信息检索和生成任务的性能,特别是在处理复杂实体关系和动态数据更新的场景中。

2.2. LightRAG检索和查询流程图

上述流程可以归纳为两大步骤,分别为索引构建流程查询响应流程

索引构建流程:

这个阶段的目标是把所有资料整理好,方便后续快速查找,就像把图书馆的书按主题、内容、关系整整齐齐地放好:

1. 把文本切块 + 提取知识

  • 系统先把原始文档分成一个个小段落(Chunk),方便处理。
  • 然后通过语言模型,从中找出关键的人名、地名、概念等,并发现它们之间的联系(比如:“乔布斯 创办 苹果公司”)。
  • 最后去掉重复内容,把图谱结构整理得更紧凑、更清晰。

2. 存进图谱+向量库

  • 所有概念和它们之间的关系会被保存成一张“知识图谱”,像思维导图一样储存在图数据库里。
  • 同时,每个概念和文本也会被转成“向量”(一串数字),方便用数学方式快速找相似的内容。

3. 动态更新

  • 当新数据加入时,LightRAG采用增量更新算法,只更新相关部分,而无需重建整个知识库。

查询响应流程:

这个阶段的任务是:当用户提出一个问题时,系统先理解问题在说什么,然后去“知识库”里找答案,再组织成一段清晰自然的回复。

1. 先分析问题,分出两类关键词

系统会分析用户提问的句子,从中提取出两种关键词:

  • 局部关键词:具体的内容,比如“爱因斯坦”、“相对论”这种名词。
  • 全局关键词:更偏概念性的词,比如“物理学原理”、“科学贡献”。

2. 两步查找,信息更全面

  • 局部检索:先用具体的关键词在“向量库”里找最相关的小段落或知识点。
  • 全局检索:再根据概念性关键词,在知识图谱中沿着关系扩展,找更多相关内容。

3. 组织上下文,生成自然语言回答

  • 把刚才查到的信息拼成一个“上下文背景”,喂给语言模型(LLM)。
  • 系统会按照提前设定的“回答模板”来组织内容,确保回答连贯、有逻辑、信息完整。

3. LightRAG构建检索增强生成系统(生成知识图谱)

3.1. 本地安装

本地安装教程比较简单,首先我们需要把项目克隆到本地,可以用git下载,也可以直接下载安装包:

下载到本地后还是用Pycharm打开,配置一下环境(需要先建立虚拟环境LightRAG,怎么建的就不说了,实在不会的去看我这篇文章的3.1小节解锁DeepSeek-R1大模型微调:从训练到部署,打造定制化AI会话系统_deepseek本地模型训练后怎么讲训练成功移植到生产环境上-CSDN博客)

打开命令行:

运行以下命令安装LightRAG Core:

pip install -e .

之后运行以下命令安装LightRAG Server:

pip install -e ".[api]"

3.2. LightRAG构建检索增强生成系统(生成知识图谱)实战

在程序的examples目录下面提供了很多构建检索增强生成系统(生成知识图谱)的python示例文件:

首先我们需要下载一下用于生成知识图谱的示例文件(狄更斯的圣诞颂歌):

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,官方就有相关视频教我们怎么一步步生成知识图谱和进行查询操作:https://www.youtube.com/watch?v=g21royNJ4fw,如果你本地显存很大,可以试一下,否则我不建议你去浪费时间,我就被卡了一下午,我的chat模型用的是deepseek-r1:1.5b,向量模型用的是nomic-embed-text:latest

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

于是又去查了资料:

被自己蠢笑了,原本是本地电脑8G的显存根本不够.......

3.2.2. 调用云端智普大模型构建检索增强生成系统(生成知识图谱)

基于云端智普大模型生成知识图谱的python文件为lightrag_zhipu_demo.py,加一行代码配置一下智普大模型的apiKey就行:

os.environ["ZHIPUAI_API_KEY"] = ""

你实在不知道加哪里(纯小白),就直接粘贴我这个代码替换lightrag_zhipu_demo.py:

# 导入必要的标准库
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怎么申请的可以点击这个网址:智谱AI开放平台

填入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页面:

# 导入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 将其转换为交互式网络图,并在浏览器中显示。代码首先检查并安装所需的 pyvisnetworkx 库,随后读取存储在 ./dickens/graph_chunk_entity_relation.graphml 的图数据文件。通过 pyvisNetwork 类,将 networkx 图对象转换为可视化网络,随机为每个节点分配颜色,并设置节点和边的提示信息。最终,生成的交互式网络图被保存为 knowledge_graph.html 文件,用户可在浏览器中打开并与之交互。

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

4. LightRAG查询

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

我的问题是:

这个故事的主题是什么?

LightRAG的回答:

这个故事的主题是道德救赎和人物转变。通过讲述吝啬鬼斯克鲁奇在圣诞节的经历,以及他与三位圣诞灵的相遇,故事展现了斯克鲁奇从自私、冷酷到慷慨、仁慈的转变。圣诞节作为一个象征性的节日,强调了慷慨、善良和对他人的关怀。故事传达了深刻的道德教训,即人们可以通过反思和改变自己的行为来获得救赎。以下是几个重要的主题:
1. 道德救赎:斯克鲁奇在故事中经历了深刻的道德转变,他从最初的冷漠和吝啬,最终转变为一个慷慨和仁慈的人。
2. 人物转变:斯克鲁奇的转变是故事的核心,它展示了一个人在经历启示后如何改变自己的性格和行为。
3. 圣诞节的象征意义:圣诞节作为一个节日,象征着慷慨、善良和社区的团结,对斯克鲁奇的性格转变起到了重要的推动作用。
4. 社会批判:故事通过描绘斯克鲁奇对穷人和慈善事业的冷漠态度,对社会的不平等和贫富差距进行了批判。
5. 人性的复杂性:斯克鲁奇的形象展示了人性的复杂性,即使是一个冷酷的人也有机会改变自己,成为更好的人。
以上主题共同构成了《圣诞颂歌》的核心内容,使其成为一部经典的文学作品。

5. 资料获取

如果你对DeepSeek的相关知识还不熟悉,可以关注gzh后端小肥肠,点击底部【资源】菜单获取DeepSeek相关教程资料。

6. 结语

通过对LightRAG技术的探索与应用,我们不仅成功地构建了一个高效的知识图谱系统,还进一步理解了RAG(检索增强生成)技术在实际应用中的潜力与挑战。LightRAG通过引入图结构和增量更新机制,大大提升了知识图谱的构建效率与查询精度,特别是在处理复杂领域知识时,展现了其独特的优势。此外,LightRAG通过结合检索与生成的双层机制,能够在保持语义连贯性的同时,实现对多实体、多层次关系的深入理解。无论是在文本生成、信息检索还是知识图谱的可视化等方面,LightRAG都为我们提供了新的思路和工具,推动了智能系统在处理复杂问题时的表现。

如果本文对你有帮助,请动动小手点点关注哦~小肥肠将持续更新AI相关干货知识和好用工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++多线程编码二

1.lock和try_lock lock是一个函数模板,可以支持多个锁对象同时锁定同一个,如果其中一个锁对象没有锁住,lock函数会把已经锁定的对象解锁并进入阻塞,直到多个锁锁定一个对象。 try_lock也是一个函数模板,尝试对多个锁…

垃圾回收——三色标记法(golang使用)

三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进,它是一个并发的 GC 算法,在Golang中被用作垃圾回收的算法,但是也会有一个缺陷,可能程序中的垃圾产生的速度会大于垃圾收集的速度,这样会导…

Windows环境下开发pyspark程序

Windows环境下开发pyspark程序 一、环境准备 1.1. Anaconda/Miniconda(Python环境) 如果不怕包的版本管理混乱,可以直接使用已有的Python环境。 需要安装anaconda/miniconda(python3.8版本以上):Anaconda…

SSM婚纱摄影网的设计

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…

1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize

1110款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100 Icons Easily Customize 产品特点 — 24 x 24 px 网格大小 — 2px 线条描边 — 所有形状都是基于矢量的 — 平滑和圆角 — 易于更改颜色 类别 🚨 警报和反馈 ⬆️ 箭头 &…

Llama 4 家族:原生多模态 AI 创新的新时代开启

0 要点总结 Meta发布 Llama 4 系列的首批模型,帮用户打造更个性化多模态体验Llama 4 Scout 是有 170 亿激活参数、16 个专家模块的模型,同类中全球最强多模态模型,性能超越以往所有 Llama 系列模型,能在一张 NVIDIA H100 GPU 上运…

正则表达式(Regular Expression,简称 Regex)

一、5w2h(七问法)分析正则表达式 是的,5W2H 完全可以应用于研究 正则表达式(Regular Expressions)。通过回答 5W2H 的七个问题,我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…

JMeter脚本录制(火狐)

录制前准备: 电脑: 1、将JMeter证书导入,(bin目录下有一个证书,需要安装这个证书到电脑中) 2、按winr,输入certmgr.msc,打开证书,点击下一步,输入JMeter证书…

基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校社团管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能结构图 局部E-R图 系统首页页面 用户…

C# Winform 入门(3)之尺寸同比例缩放

放大前 放大后 1.定义当前窗体的宽度和高度 private float x;//定义当前窗体的宽度private float y;//定义当前窗台的高度 2.接收当前窗体的尺寸大小 x this.Width;//存储原始宽度ythis.Height;//存储原始高度setTag(this);//为控件设置 Tag 属性 3.声明方法,获…

infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL

一、明确目标—是否要使用 1.为什么选择InfinityFree? 对于初学者、学生或只是想尝试网站搭建的个人用户来说,InfinityFree提供了一个绝佳的免费解决方案。这个国外免费的虚拟主机服务提供: 5GB存储空间 - 足以存放个人博客、作品集或小型…

打造高效英文单词记忆系统:基于Python的实现与分析

在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…

node_modules\deasync: Command failed.

运行:“yarn install” 时报错 PS D:\WebPro\hainan-mini-program> yarn install yarn install v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > babel-loader8.2.2" has un…

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能,并且已经完成了一些基础的工作,但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据,以便在开发游戏逻辑系统时,可以清晰地查看和检查…

Zapier MCP:重塑跨应用自动化协作的技术实践

引言:数字化协作的痛点与突破 在当今多工具协同的工作环境中,开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP(Model Context Protocol)协议通过标准化数据交互框架,为跨应用自动化提供了新的…

蓝桥云客--破译密码

5.破译密码【算法赛】 - 蓝桥云课 问题描述 在近期举办的蓝桥杯竞赛中,诞生了一场激动人心的双人破译挑战。比赛的主办方准备了N块神秘的密码芯片,参赛队伍需要在这场智力竞赛中展示团队合作的默契与效率。每个队伍需选出一位破译者与一位传输者&#…

React-Diffing算法和key的作用

1.验证Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

【NLP 54、大模型训练相关知识】

目录 引言&#xff1a;大模型训练两大问题 一、并行训练 1.方式一&#xff1a;数据并行 DP ① 复制模型到多个GPU ② 各自计算梯度后累加&#xff0c;再反传更新 ③ 需要单卡就能训练整个模型&#xff08;显存够大&#xff09; 2.方式二&#xff1a;模型并行 PP ① 将模型的不同…

cursor机器码重置

1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor&#xff0c;ctrlshiftp &#xff0c;输入fake,点击确定

全国产FMC子卡-16bit 8通道2.4G

国产化FMC DA子卡&#xff0c;16bit 8通道2.4GS/s 全国产FMC子卡是一款高分辨率、高采样率的全国产多通道标准双宽DAC FMC子板。其接口电气和结构设计均依据FMC标准(ANSI/VITA 57.1)&#xff0c;通过两个高密度FMC连接器&#xff08;HPC&#xff09;连接至FPGA载板。它提供8路A…