LightRAG应用一:[LightRAG & LightRAG WebUI]

LightRAG应用一:[LightRAG & LightRAG WebUI]

文章目录


前言

LightRAG webui本地部署、应用


一、LightRAG

          LightRAG,一个为实现简单快速的检索增强生成(Retrieval-Augmented Generation)而设计的框架。
          通过从文档中构建知识图谱来增强传统的检索增强生成(RAG),能够更深入、更具上下文感知地理解源材料,超越了简单的基于关键词的检索,实现了一种利用广泛上下文和具体细节的双层检索范式。

1.1 主要功能

          LightRAG 配备了一系列功能,旨在提供一个灵活、强大且可观测的 RAG 系统。

在这里插入图片描述

1.2 技术栈

  • 大型语言模型 (LLM)
    参数:建议使用至少有 320 亿参数的模型。
    上下文长度:至少需要 32KB 的上下文长度;建议使用 64KB 以获得最佳性能。
    能力:在文档索引阶段,避免使用主要专注于推理的模型。在查询阶段,建议使用比索引阶段更强大的模型以获得更好的结果。
  • [内容块]加强模型(Embedding model)
    一个高性能、多语言的 embedding 模型至关重要。推荐的模型包括 BAAI/bge-m3 和 text-embedding-3-large。
    一致性至关重要:文档索引和查询必须使用相同的 embedding 模型。如果更换模型,您必须清除现有的向量数据,以便 LightRAG 使用正确的维度重新生成。
  • 重排序器模型(Reranker model)
    集成一个 reranker 模型可以显著提高检索性能,尤其是在使用“mix”查询模式时。
    推荐的模型包括 BAAI/bge-reranker-v2-m3 或来自 Jina 等提供商的商业产品。
    Reranker 优化检索结果机制:
            ‌语义相关性评分‌:将用户查询与候选文档输入同一模型(如Cross-Encoder),输出0-1的相似度分数,基于上下文深度分析语义匹配度。‌
            结果重排序‌:按分数对文档降序排列,优先保留最相关片段,过滤冗余信息。‌

引用
          LightRAG
          README-zh
          *** LightRAG框架介绍 ***


二、部署

工具

  • python 3.10.5
  • PyCharm
  • LightRAG-1.4.9.10
  • Window11

1.PyCharm 配置、安装 bun

配置python 环境3.10.5 ,PyCharm 打开 LightRAG-1.4.9.10 源代码
PyCharm 终端p owershell 安装 bun powershell 命令

powershell -c "irm bun.sh/install.ps1|iex"
在这里插入图片描述

2.安装LightRAG服务器 、Core 和运行lightrag-server

 pip install "lightrag-hku[api]" pip install lightrag-hku # 构建前端代码 cd lightrag_webui bun install --frozen-lockfile bun run build cd ..# 配置 env 文件 cp env.example .env # 使用你的LLM和Embedding模型访问参数更新.env文件# 启动API-WebUI服务 lightrag-server 

.env文件修改LLM模型和Embedding模型

### 184行:LLM Configuration - aliyuncs【qwen3-max】 LLM_BINDING=openai LLM_MODEL=qwen3-max LLM_BINDING_HOST=https://dashscope.aliyuncs.com/compatible-mode/v1 LLM_BINDING_API_KEY=sk-XXXXXXXXXXXXXXX ......### OpenAI compatible embedding - aliyuncs【text-embedding-v1] EMBEDDING_BINDING=openai EMBEDDING_MODEL=text-embedding-v1 EMBEDDING_DIM=1536 ### 不同的embedding 模型嵌入向量的维度值不一样 EMBEDDING_SEND_DIM=false EMBEDDING_TOKEN_LIMIT=8192 EMBEDDING_BINDING_HOST=https://dashscope.aliyuncs.com/compatible-mode/v1 EMBEDDING_BINDING_API_KEY=sk-XXXXXXXXXXXXXXX 

3.WEBUI界面

webui首页         http://127.0.0.1:9621/webui/#/
Swagger UI       http://localhost:9621/docs
ReDoc               http://localhost:9621/redoc

所有服务器(LoLLMs、Ollama、OpenAI 和 Azure OpenAI)都为 RAG 功能提供相同的 REST API 端点。当 API 服务器运行时,访问:

3.1 文档管理

在这里插入图片描述


文档矢量化分 4 段:原始文档变成可检索的向量结构,大致会经过:

  1. 文档预处理 & 分块
  2. 文本块的向量化和存储
  3. 基于 LLM 从文本块中抽取实体与关系
  4. 为实体描述 / 关系描述生成向量,并存入向量库

生成的文件说明:
        文本块向量:对 chunk 内容做 embedding,存入 chunks 向量表(如 vdb_chunks.json)
        实体描述向量:对实体的文本描述做 embedding,存入 entities 向量表(vdb_entities.json)
        关系描述向量:对关系的文本描述做 embedding,存入 relationships 向量表(vdb_relationships.json)
        知识图谱:保存结构化实体与关系,如graph_chunk_entity_relation.graphml 等

在这里插入图片描述

附:上传的文件:常用命令.txt

1.创建分支提交到远程: # 切换到目标分支 git checkout prod_20241230chenjunok # 添加所有修改的文件到暂存区 git add . # 提交更改 git commit -m "release问题修复" # 推送到远程仓库 git push origin release_fix_chenjun 2.重置下拉代码: git pull origin V2.1_chenjun git fetch --all git reset --hard origin/V2.1 D:\companyProject\employeeResign 

3.2 知识图库

在这里插入图片描述

3.3 检索Retrieval

输入 “重置下拉代码", 检索 上传的文件:常用命令.txt 并 响应。

3.4 API管理

在这里插入图片描述

三、总结

        LightRAG 在构建 RAG 系统方面提供了相对完整的解决方案。相比传统的纯向量检索,它的核心特点是引入了知识图谱,能把非结构化文本组织成实体-关系网络,这种混合检索策略(语义向量+图谱关系)确实能让 LLM 获得更丰富的上下文信息。
        LightRAG 是一种基于 GraphRAG 的创新方法,结合了知识图谱的属性与基于嵌入的检索系统,使其既快速又高效,实现了 SOTA (最先进的技术方案)结果。它在多个基准测试中都优于 naive RAG 和 GraphRAG。

四、技术文献

传统 RAG 系统的局限性 Limitations of Traditional RAG Systems

lightrag framewok

1000 万份文档的检索策略:标准混合搜索 与 LightRAG 的比较?

传统 RAG

  • 存在显著局限性,包括依赖扁平的数据表示上下文意识不足,可能导致答案支离破碎,未能捕捉复杂的相互依赖关系
  • 当数据语料库增长时,会出现可扩展性低效,导致检索质量差
    解决办法:文本索引和检索过程中融入图结构,如 Microsoft GraphRAG

   Naive RAG Workflow

在这里插入图片描述

Microsoft GraphRAG:

        知识图谱是由一组节点组成的数据结构,这些节点保留了不同实体之间存在于不同数据点之间的关系。结构化知识图谱使 GraphRAG(Edge 等人)能够通过连接点或对比信息片段,在多跳推理中表现出色。

GraphRAG 流水线 涉及索引和查询,即:

1. Indexing – GraphRAG 索引
        第一阶段 : 知识图谱(KG)创建:GraphRAG 依赖于精心设计的提示词prompt和多部分的采集检定,使用 LLM 从源文档中提取实体和关系,构建增量结构化的 KG。
        第二阶段 : 语义聚类:基于节点连接密度和可扩展性,应用莱顿算法通过将密切相关的节点分组为层级簇来发现模块化群体。群体划分用于将图索引划分为元素组(节点、边、协变量),LLM 可以在索引和查询时并行汇总这些元素,通过关注高度相关的群落而非整个图,高效地减少搜索空间。利用大型语言模型,这些社区通过自下而上的方法进行总结,作为描述符,完全覆盖了图索引。

2. Querying – GraphRAG 查询
        查询阶段,当用户提出问题时,查询中的实体和关系会被识别出来用于 QFS(Query-Focused Summarization查询相关的摘要)。通过比较问题与图索引之间的这些元素,可以识别出最相关的社区。
        然后这些社区总结会被随机洗牌,LLM 生成不同社区层级 (本地或全球层面)的中间回复,并匹配 0 到 100 的帮助度评分。该分数表明生成答案与用户查询的相关性。最终的全局答案采用多阶段地图缩减法生成,将中间部分反应汇总,依据帮助度评分作为 LLM 的上下文,按顺序递减排序。

3. GraphRAG 的缺点

  • GraphRAG 运行起来通常非常慢 ,因为它需要多个 LLM API 调用,可能会遇到速率限制。
  • 非常昂贵 。基于测试的网络社区显示,使用 GPT4时,索引简单书籍《狄更斯的圣诞颂歌》可能花费 6-7 美元,且有 3.2 万字 。
  • 要将新数据纳入现有图索引,我们也需要重建整个 KG 的旧数据,这是一种低效的方法。
  • 没有对重复元素进行显式的去重步骤,导致图索引噪声较大。

尽管 GraphRAG 看起来很有前景,但由于运营成本和计算复杂性,它并不是一个高效的解决方案。

LightRAG

一个简单、快速且高效的图 x RAG。LightRAG 通过将文档分割成更小、更易管理的块块 Di 来增强检索过程。 这种分块策略使得快速识别相关内容,无需逐一浏览整个文档。 

LightRAG 与 NaiveRAG 和 GraphRAG 有何不同?

全面的信息检索,提供多元答案。
高效且低成本的检索
快速适应数据,并以最小的重新索引方式更新数据。

LightRAG 解决 GraphRAG 的两个主要痛点?

通过比社区穿越更好的方法,减少索引和响应时间。 通过增量更新算法,只更新特定元素实例,轻松适应新数据。 

LightRAG 特点

1.基于图的文本索引

       索引阶段,LightRAG 处理原始文本文档以构建一个结构化且可查询的知识图谱。
       LightRAG 通过将文档分割成更小、更易管理的部分,增强了检索系统。这种策略允许快速识别并访问相关信息,而无需分析整份文件。接下来,我们利用大型语言模型识别和提取各种实体(例如名称、日期、地点和事件)以及它们之间的关系。通过该过程收集的信息将用于创建一个全面的知识图谱,突出整个文档集合之间的联系和洞见。
       基于图的文本索引范式中使用的函数描述如下:
1.1 提取实体和关系 R()
       大型语言模型 (LLM) 分析这些文本块,以识别关键实体(如人物、地点或概念)及其之间的关系(边)。例如,它可以从文本中提取“心脏病专家”和“心脏病”等实体,以及“心脏病专家诊断心脏病”等关系:“心脏病专家评估症状以识别潜在心脏问题。”为了提高效率,原始文本被分割成多个区块。

1.2 用于键值对生成 P()的 LLM 分析
       采用 LLM 赋能的分析函数为每个实体节点和关系边生成文本键值对。每个索引键是一个单词或短语,便于高效检索,而对应的值则是一个文本段落,总结了外部数据中的相关片段,以辅助文本生成。实体使用其名称作为唯一的索引键,而关系则可能拥有多个索引键,这些索引键源自 LLM 增强,包含来自连接实体的全局主题。

1.3去重以优化图作 D(.)
       去重函数,识别并合并原始文本不同段的相同实体和关系。这一过程通过最小化图的大小,有效减少了图作的开销,从而实现更高效的数据处理。

2.双重-层级检索范式-Dual-level Retrieval Paradigm

       为了从特定文档块及其复杂的相互依赖关系中获取最相关的上下文,LightRAG 提出在详细和抽象层面生成查询键。
       借助基于图的文本索引,LightRAG 流水线采用双层检索策略。该方法从 KG 内的多跳子图中识别低级和高级键,以回答多样化的查询。
       低层检索 Local Query Keywords: 主要关注检索特定实体及其相关属性或关系。该层查询注重细节,旨在提取图中特定节点或边的精确信息。针对单个节点和边缘的具体细致信息 ,以处理本地查询,如“什么是 Mechazilla?”在这个层面,它提供了详细的节点级洞察。
      高层检索Global Query Keywords :此层次涉及更广泛的主题和整体主题。该层查询汇总多个相关实体和关系的信息,提供对更高层概念和摘要的洞察,而非具体细节。 汇总来自不同文档的多个实体信息,回答需要更广泛主题或抽象思考的全球性问题,如“埃隆·马斯克的愿景如何促进其项目的可持续发展?”

在这里插入图片描述


双层检索查询过程:

  1. 查询分析: 分析用户查询,提取高层概念和底层关键词Keywords。
  2. 全局检索: 使用高层概念查询知识图谱,识别提供广泛上下文的关键关系和实体
  3. 局部检索: 使用底层关键词Keywords对文本块进行向量搜索,检索具体详细的信息。
  4. 响应生成: 将来自全局检索和局部检索的组合上下文进行综合,并传递给LLM,以生成一个全面而准确的答案。
3.LightRAG 如何利用知识图谱?

      对于给定的查询,LightRAG 的检索算法会同时提取本地 k(l) 和全局查询关键词 k(g)。 然后利用向量相似度,将相关实体匹配到带有低层密钥的本地查询和带有高级概念的全局查询关键词。
      通过在局部子图中收集一跳邻近节点,LightRAG 集成了额外的上下文层,提高了图索引中边结果的相关性。这种双层检索结构结合了关键词匹配与由构建的 KG 诱导的相关结构信息。

在这里插入图片描述


                                                                              检索实体关系与上下文
      检索的内容是 LLM 剖析阶段的输出,包含名称、实体和关系的描述以及原文的简短摘要。

4.Indexing 索引

索引流程图:

在这里插入图片描述

最后,构建的图索引保存为 graph_chunk_entity_relation.graphml ,我们稍后将利用它来可视化 Neo4j 中的 KG。

在这里插入图片描述

vdb_relationship.json 文件存储通过 ID 连接源实体和目标实体之间的关系,以表示连接。

在这里插入图片描述

vdb_entities.json 包含从文本块中提取的具有唯一 ID、实体名称等的实体向量嵌入。

在这里插入图片描述

kv_store_llm_response.json 存储由大型语言模型生成的关于实体及其关系的摘要。它采用缓存机制防止对相同 ID 进行冗余索引。 如用户输入query = “重置下拉代码命令”

在这里插入图片描述

kv_store_text_chunks.json 存储文档文本块及其相关的元数据,如 chunk_size(令牌)、实际内容、块索引、父文档 ID 等。

在这里插入图片描述
5.Incremental Indexing 增量索引

       索引新文件,自动更新 LLM 响应 kv_store_llm_response.json,包含任何新的实体和关系,且不会与现有数据冲突或重复。
       用户输入query = “redis启动过程”

在这里插入图片描述


LLM 响应, kv_store_llm_response.json文件添加增量节点信息:global:keywords:b3f3bc653c7ca6f095224a9e787b1965

{"global:keywords:323f0a4456f4753a60d7a65e23267c4e":{"return":"{\"high_level_keywords\": [\"Code reset\", \"Dropdown functionality\"], \"low_level_keywords\": [\"\\u91cd\\u7f6e\\u4e0b\\u62c9\\u4ee3\\u7801\\u547d\\u4ee4\"]}","cache_type":"keywords","chunk_id":null,"original_prompt":"重置下拉代码命令","queryparam":{"mode":"global","response_type":"Multiple Paragraphs","top_k":40,"chunk_top_k":20,"max_entity_tokens":6000,"max_relation_tokens":8000,"max_total_tokens":30000,"user_prompt":"","enable_rerank":true},"create_time":1767666062,"update_time":1767666062,"_id":"global:keywords:323f0a4456f4753a60d7a65e23267c4e"},"global:keywords:b3f3bc653c7ca6f095224a9e787b1965":{"return":"{\"high_level_keywords\": [\"Redis startup process\", \"Database initialization\", \"System boot sequence\"], \"low_level_keywords\": [\"Redis\", \"Configuration file\", \"Persistence setup\", \"Port binding\", \"Log initialization\"]}","cache_type":"keywords","chunk_id":null,"original_prompt":"redis启动过程","queryparam":{"mode":"global","response_type":"Multiple Paragraphs","top_k":40,"chunk_top_k":20,"max_entity_tokens":6000,"max_relation_tokens":8000,"max_total_tokens":30000,"user_prompt":"","enable_rerank":true},"create_time":1767752257,"update_time":1767752257,"_id":"global:keywords:b3f3bc653c7ca6f095224a9e787b1965"}}
6.Querying 查询

     根据查询模式(如naive、局部local、全局global和混合hybrid),相关关键词会从查询中提取,并与 KV 存储和向量数据库进行比较,以根据余弦相似度cosine检索候选实体和关系。
查询阶段在以程图:

在这里插入图片描述
  • Naive RAG – 传统RAG
# mode="naive"await rag.aquery("What are the top themes in this story?", param=QueryParam(mode="naive"))
  • Local Quer – LightRAG 本地查询
# mode="local"await rag.aquery("What are the top themes in this story?", param=QueryParam(mode="local"))
  • Global Query – LightRAG 全局查询
# mode="global"await rag.aquery("What are the top themes in this story?", param=QueryParam(mode="global"))
  • Hybrid Query – LightRAG 混合查询
# mode="hybrid"await rag.aquery("What are the top themes in this story?", param=QueryParam(mode="hybrid"))

代码参考:LightRAG-1.4.9.10\examples\lightrag_openai_demo.py

Read more

【开题答辩全过程】以 基于web的学校田径运动会管理系统开发与实现为例,包含答辩的问题和答案

【开题答辩全过程】以 基于web的学校田径运动会管理系统开发与实现为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家的关注与支持! "各位老师好,我是xx同学,我的毕业设计题目是《基于web的学校田径运动会管理系统开发与实现》。本系统旨在解决传统运动会管理中人工操作繁琐、容易出错的问题,通过信息化手段提高运动会组织效率。系统主要分为前端学生模块和后端管理员模块两大板块:前端包含注册登录、首页展示、比赛项目浏览、排行榜查看、比赛咨询和个人中心等功能;后端包含登录、个人中心、学生管理、比赛项目管理、项目报名管理、排行榜管理、比赛咨询管理和项目类型管理等功能。技术栈方面,后端采用SpringBoot框架,前端使用Vue框架,数据库选用MySQL,采用B/S架构设计,具有跨平台、易维护的特点。下面请各位老师批评指正。

Llama3-8B对话体验差?open-webui界面调优实战案例

Llama3-8B对话体验差?open-webui界面调优实战案例 1. 为什么Llama3-8B在open-webui里“不好用” 你是不是也遇到过这种情况:明明拉下了Meta-Llama-3-8B-Instruct的GPTQ-INT4镜像,显卡是RTX 3060,vllm也跑起来了,open-webui网页也打开了,可一输入问题,响应慢、回复短、上下文断连、甚至反复重复同一句话?不是模型不行,而是默认配置没对上——就像给跑车装了自行车刹车片。 Llama3-8B本身素质过硬:80亿参数、原生8k上下文、英语指令遵循能力对标GPT-3.5、MMLU 68+、HumanEval 45+,单卡3060就能跑。但它对对话系统层的调度逻辑非常敏感。open-webui作为前端界面,默认采用的是通用型API调用策略,而没针对Llama3系列的tokenizer行为、stop token设计、streaming节奏做适配。结果就是: * 模型已生成完,界面还在等“结束信号”; * 多轮对话中,system prompt被意外截断或覆盖; * 中文输入时,因token边界识别不准,

[大模型实战 02] 图形化的大模型交互: Open WebUI部署指南

[大模型实战 02] 图形化的大模型交互: Open WebUI部署指南

核心摘要 (TL;DR)目标:为本地的 Ollama 模型穿上漂亮的图形化界面 (GUI)。工具:Docker + Open WebUI (社区最活跃的开源 WebUI)。核心功能:媲美 ChatGPT 的对话界面、本地知识库 (RAG)、自定义角色 (Agent)。 相信各位友人在上一篇文章中,已经学会了如何用ollama在终端中运行Qwen模型。命令行工具有时候会感觉有点过于Geek,黑洞洞的命令窗口和冷冰冰的滚动的文字的技术感是有的,但是对于如果咱们想把大模型展示给其他朋友,或者自己想日常使用,那这时候咱们就需要换一个更友好,更光鲜的交互方式。 这也是这篇博文想带大家解决的问题:用10分钟时间,搭建一个功能媲美ChatGPT的私有化网页页面,并且连接咱们的模型 Open WebUI就是我们完成这个目标的利器,其也是目前社区最活跃,功能最强大的开源大模型交互界面。 01. 模型服务准备 在开始之前,因为要接入咱们的Ollama模型,所以我们要确认我们的Ollama服务运行起来了。 可以通过在终端输入curl http://localhost:5656命令去验证其是否正

web酒店客房管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

web酒店客房管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着旅游业的快速发展和酒店行业的不断扩张,传统的酒店客房管理方式已难以满足现代化管理的需求。人工操作效率低下、信息易丢失、管理流程繁琐等问题日益凸显,亟需一套高效、智能的酒店客房管理系统来提升运营效率和服务质量。数字化管理不仅能减少人力成本,还能通过数据分析优化客房资源配置,提升客户满意度。因此,开发一款基于SpringBoot后端、Vue前端和MySQL数据库的酒店客房管理系统具有重要的现实意义。关键词:酒店管理、数字化、SpringBoot、Vue、MySQL。 本系统采用前后端分离架构,后端基于SpringBoot框架实现高效的数据处理和业务逻辑,前端使用Vue.js构建动态交互界面,数据库采用MySQL存储数据。系统功能包括客房信息管理、客户预订管理、订单结算、员工权限管理等模块,支持多角色登录和权限控制。通过响应式设计和RESTful API接口,系统实现了数据的实时更新和高效交互。系统源码可直接运行,便于二次开发和功能扩展,为酒店行业提供了一套完整的数字化解决方案。关键词:前后端分离、权限管理、RESTful API、实时更新、二次开发。 数据表 客房信息数据