LightRAG论文阅读以及使用本地向量数据库和云LLM跑通(已经跑通)

LightRAG

论文题目:LIGHTRAG: SIMPLE AND FAST RETRIEVAL-AUGMENTED GENERATION

论文题目LIGHTRAG: SIMPLE AND FAST RETRIEVAL-AUGMENTED GENERATION
论文位置https://arxiv.org/html/2410.05779?_immersive_translate_auto_translate=1
文章信息**作者:**Zirui Guo **通讯作者:**Chao Huang

**单位:**Beijing University of Posts and Telecommunications ,University of Hong Kong
论文阅读通过整合外部知识源提升结果准确度与上下文相关性RAG
RAG-Ex: A Generic Framework for Explaining Retrieval Augmented Generation
RAGAS: Automated Evaluation of Retrieval Augmented Generation
Evaluating Retrieval Quality in Retrieval-Augmented Generation
引入特定领域知识使RAG更符合用户需求
R-Eval: A Unified Toolkit for Evaluating Domain Knowledge of Retrieval Augmented Large Language Models
使RAG具备访问最新信息的能力
Retrieval-Augmented Generation for AI-Generated Content: A Survey
通过chunking提升检索准确性与相关性
CRUD-RAG: A Comprehensive Chinese Benchmark for Retrieval-Augmented Generation of Large Language Models
微软GraphRAG
From Local to Global: A GraphRAG Approach to Query-Focused Summarization

图结构应用到LLM
GNNs作为前缀(GNNs as Prefix)
:将图神经网络(GNN)作为图数据的初始处理模块,生成具有结构感知能力的 token,供LLM在推理过程中使用。GraphGPT: Graph Instruction Tuning for Large Language ModelsLLaGA: Large Language and Graph Assistant;
LLMs作为前缀(LLMs as Prefix):由LLM处理带有文本信息的图数据,用于生成节点嵌入或标签,进而用于优化GNN的训练过程,代表系统包括 Graph-Aware Language Model Pre-Training on a Large Graph Corpus Can Help Multiple Graph Applications
LLMs-图融合(LLMs-Graphs Integration):致力于实现LLM与图数据之间的深度融合,通过融合训练、GNN对齐等方法,构建能够直接处理图结构信息的LLM代理系统。代表性研究包括**ConGraT: Self-Supervised Contrastive Pretraining for Joint Graph and Text EmbeddingsGRENADE: Graph-Centric Language Model for Self-Supervised Representation Learning on Text-Attributed Graphs**
背景与
目的
现有RAG系统普遍缺乏对上下文全局感知能力,回答碎片化,不能体现问题各主体间的依赖关系
因此本文提出一种新型RAG架构,通过引入图结构到相关信息检索流程中提高回答的上下文连贯性与信息覆盖度
优势1 引入图结构,有助于将来自多个来源的信息综合成连贯且上下文丰富的响应
2 增量更新机制
3 双层检索
文章值得借鉴的地方1 提示词工程的设计
2 学习论文中如何做实验评估模型的好坏
新概念消融实验:目的在于移除系统中的特定的部分,来控制变量式的研究这个部分对于系统整体的影响。如果去除这一部分后系统的性能没有太大损失,那么说明这一部分对于整个系统而言并不具有太大的重要性;如果去除之后系统性能明显的下降,则说明这一部分的设计是必不可少的。
社区(community):图结构的一个概念,知识图谱中某些节点之间的连接关系特别紧密(即具有较多的边或较强的语义相关性)时,我们可以将这些节点及其关系划分为一个“社区

LightRAG工作流程

在这里插入图片描述

LightRAG整体架构图
LightRAG的基本工作流程,主要包括

  • **Graph-based Indexing(基于图的文本索引):**包括三个主要函数D(·)—用于对识别的实体去重、P(·)—配置实体的信息,配置每个节点(实体)和边(关系)的键值对索引结构 (K, V);R(·)—将实体关系提取
  • Index Graph(构建索引图):构建知识图谱将实体和关系以图的形式连接起来
  • Dual-level Retrieval Paradigm(双层检索):包含低级和高级关键词,以及实体、关系和上下文的结构化表示
  • **Retrieval-Augmented Answer Generation( 检索增强答案生成):**先生成检索信息,包括名称、实体和关系的描述以及原文的摘录。然后根据上下文让LLM生成答案
    构建索引图的prompt工程
    索引图

增量更新机制

  • 新数据无需重建全图,只需将新提取的实体与原图合并

Dual-Level Retrieval Paradigm—双层检索

在细节层(Specific)与抽象层(Abstract)两个层面生成查询关键词:

  • 细节查询(Specific Queries):针对特定实体节点或关系边进行精准信息检索。例如,“《傲慢与偏见》的作者是谁?”;
  • 抽象查询(Abstract Queries):关注主题性、概念性信息,而非具体实体。例如,“人工智能如何影响现代教育?”
    两种对应的检索策略:
  • 低层检索(Low-Level Retrieval):聚焦于节点和边的细粒度信息,如属性、关系等,适合具体细节型查询;
  • 高层检索(High-Level Retrieval):面向跨主题、综合类问题,通过多实体和关系聚合提供全局性回答。
    prompt工程如下
    双层检索

整体过程
在这里插入图片描述
图中为询问内容和提取的关键词,以及增强生成的内容和大模型的回答结果

实验评估

数据集选用Agriculture、CS、Legal 和 Mix 四个数据集

对比试验

指示 LLM 生成五个 RAG 用户,并为每个用户生成五个任务。对于每个用户任务组合,LLM 都会生成五个问题,需要了解整个语料库,总共每个数据集产生 125 个问题。如图为生成问题的提示词设计
在这里插入图片描述
再利用LightRAG与Naive RAG ,RQ-RAG,HyDE,GraphRAG四种RAG架构对比,评价维度包括全面性(回答多大程度解决了问题的所有方面和细节)、多样性(与问题相关的不同观点,答案的多样性和丰富性如何)、接受度(答案是否有效使读者理解主题并做出明确判断)、整体评价(评估前三个标准的累积评价),如图为评价模型回答好坏的提示词设计
在这里插入图片描述

消融实验

  • 将 LightRAG 的完整版本与删除了高阶检索的-High变体与删除了低阶阶检索的-Low变体对比
  • 将 LightRAG 的完整版本与移除了对原始文本使用的-Origin变体对比

跑通LightRAG

由于LightRAG团队更新太快,源码发生一定改变,因此网络上大多教程有些许不适用

部分参考b站视频

如何快速部署和运行lightRag(轻量版的GraphRag), 并且进行知识图谱的可视化。_哔哩哔哩_bilibili

由于LightRAG更新太快,源码也进行了一定的修改

大模型使用智谱AI的glm4-flash

向量模型使用本地的bge-m3

一 环境配置

首先需要将LightRAG的项目拉到本地,具体可以参考github的项目,

git clone https://github.com/HKUDS/LightRAG.git  //下载lightRAG源码
cd LightRAG  
pip install -e .  //下载依赖包

在官网安装Ollama

安装完成后在Ollama官网的Models页面里搜索你想要的模型,然后复制红框里的命令在cmd执行

在这里插入图片描述
在这里插入图片描述

二 运行代码

我运行的是LightRAG/examples/lightrag_openai_compatible_demo.py这个demo

先在examples的目录下创建book.txt文件用于存放你所要储存在知识图谱中的信息,我使用的是孔乙己这篇文章,以及.env文件用于存放自己的apikey。

在这里插入图片描述

然后修改这个代码

with open("./book.txt.txt", "r", encoding="utf-8") as f:##这段代码用于读取book文件的信息,但我不清楚为什么是两个.txt,我删掉了一个
    await rag.ainsert(f.read())

在智谱bigmodel申请一个apikey用于调用云端大模型,我使用的是glm-4-flash-250414

在这里插入图片描述

LLM_BINDING_API_KEY就是在.env文件中的apikey

大模型部分代码

async def llm_model_func(
    prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs
) -> str:
    return await openai_complete_if_cache(
        os.getenv("LLM_MODEL", "glm-4-flash-250414"),#填入自己调用大模型的名字
        prompt,
        system_prompt=system_prompt,
        history_messages=history_messages,
        api_key=os.getenv("LLM_BINDING_API_KEY") or os.getenv("OPENAI_API_KEY"),#在.env文件配置
        base_url=os.getenv("LLM_BINDING_HOST", "https://open.bigmodel.cn/api/paas/v4/"),#填入网址
        **kwargs,
    )

向量数据库部分代码

async def initialize_rag():
    rag = LightRAG(
        working_dir=WORKING_DIR,
        llm_model_func=llm_model_func,
        embedding_func=EmbeddingFunc(
            embedding_dim=int(os.getenv("EMBEDDING_DIM", "1024")),\#bge-m3的嵌入维度
            max_token_size=int(os.getenv("MAX_EMBED_TOKENS", "8192")),#最大文本长度
            func=lambda texts: ollama_embed(
                texts,
                embed_model=os.getenv("EMBEDDING_MODEL", "bge-m3:latest"),#修改成使用的向量数据库名称
                host=os.getenv("EMBEDDING_BINDING_HOST", "http://localhost:11434"),
            ),
        ),
    )


    # Perform naive search
    print("\n=====================")
    print("Query mode: naive")\#lightrag提供四种回答模式,naive,local,global,hybrid
    print("=====================")
    resp = await rag.aquery(
        "这篇文档的主题是什么?",#在此修改想要提的问题
        param=QueryParam(mode="naive", stream=True),
    )
    if inspect.isasyncgen(resp):
        await print_stream(resp)
    else:
        print(resp

)


生成部分内容如图

在这里插入图片描述

lightrag会生成.log文件记录控制台生成信息,以及dickens文件夹存放存入文档的图信息,可以可视化为知识图谱
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧商的西瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值