使用RAG技术构建企业级文档问答系统:新架构LightRAG
LightRAG是一种结合知识图谱技术的新型RAG架构,它是由北京邮电大学和香港大学联合发表的论文,简单说,LightRAG还是对检索方面做了比较大的创新,具体而言有两点:图结构化文本索引:使用LLM识别文本中的实体(如人名、地点、事件)及其关系,从而构建知识图谱,这样能够更有效地捕捉实体之间地复杂依赖关系。双层检索机制:LightRAG采用双层检索系统,结合低层次检索(针对特定实体及其关系的精确
1 概述
LightRAG是一种结合知识图谱技术的新型RAG架构,它是由北京邮电大学和香港大学联合发表的论文,简单说,LightRAG还是对检索方面做了比较大的创新,具体而言有两点:
-
图结构化文本索引:使用LLM识别文本中的实体(如人名、地点、事件)及其关系,从而构建知识图谱,这样能够更有效地捕捉实体之间地复杂依赖关系。
-
双层检索机制:LightRAG采用双层检索系统,结合低层次检索(针对特定实体及其关系的精确信息)和高层次检索(涵盖更广泛的主题和上下文)。这种分层检索策略能够从不同粒度级别收集数据,提高检索的全面性和效率。
除了索引方面的创新,LightRAG还可以增量更新知识,新的文档可以无缝集成到现有的图结构中,而无需重建整个索引。
需要注意的是,LightRAG这类借助知识图谱的RAG技术,它要解决的问题,其实跟常规的RAG是有区别的。
假如现在LLM在训练阶段是没有见过《西游记》的,那如果我们使用《西游记》作为知识库来构建一个RAG,当问到类似“唐僧的徒弟都是些什么来历”,传统RAG是要使用这句话去原文做语意/关键词检索的,很显然《西游记》中不太可能会有类似“唐僧的徒弟来历分别是…”这样直白的表述,而是“孙悟空,唐僧的大徒弟,曾经是…”、“猪八戒,法号猪悟能,唐僧的二徒弟,曾经是天蓬元帅,因为…”、“沙和尚,唐僧的三徒弟,曾任卷帘大将…”,而使用知识图谱,分别抽取出唐僧、孙悟空、猪八戒、沙和尚,以及他们之间的关系,则面对“唐僧的徒弟都是些什么来历”这样的问题时,会首先解析到要查找与唐僧有师徒关系的实体,进而查找这些实体的属性——来历,这样很容易检索出三个徒弟的信息,从而正确回答问题。
2 效果
虽然LightRAG在一些测试集上取得了比较好的效果,但在我们的测试用例中,变现非常差,有可能是因为这个测试集不适合使用LightRAG,也有可能是参数没有调好,欢迎大家在评论区讨论。
LightRAG有4种模式,他们的工作方式是:
-
naive:这是经典的RAG检索模式,基于查询向量直接检索与查询最相关的文档片段(chunks)
-
local:基于低层次关键词(low-level keywords)进行检索。这些关键词通常对应具体实体。通过检索与这些实体相关的数据,获取其邻域内的关系和原始文档片段
-
global:基于高层次关键词(high-level keywords)进行检索,这些关键词通常对应广泛的概念或主题。通过检索与这些概念相关的全局关系,获取相关实体和文档片段
-
hybrid:结合了local和global模式的优点。同时利用低层次和高层次关键词,分别检索局部和全局信息,然后将结果合并
3 核心代码
为了公平对比,本文所使用的Embedding,和其他的实验保持一致,都是使用HuggingFace库加载的bge-large-zh-v1.5,为此还特意修改了代码。
大模型也使用了Ollama中的qwen2-7b,考虑到LightRAG的上下文通常比较长,此处做了修改,使得它可以接受更长的上下文。本文代码已开源,地址在:https://github.com/Steven-Luo/MasteringRAG/blob/main/new_arch/01_lightrag.ipynb
3.1 创建LightRAG对象
from lightrag import LightRAG
from lightrag.llm import ollama\_model\_complete
from lightrag.utils import EmbeddingFunc
from transformers import AutoTokenizer, AutoModel
\# 可以替换为本地路径
model\_path = 'BAAI/bge-large-zh-v1.5'
embeddings = get\_embeddings(model\_path)
rag = LightRAG(
working\_dir=expr\_dir,
llm\_model\_func=ollama\_model\_complete,
llm\_model\_name='qwen2:7b-instruct-32k',
chunk\_token\_size=500,
chunk\_overlap\_token\_size=50,
embedding\_func=EmbeddingFunc(
embedding\_dim=1024,
max\_token\_size=500,
func=lambda texts: hf\_ollama\_embedding(
texts,
hf\_embed\_model=embeddings
)
\# func=lambda texts: ollama\_embedding(
\# texts,
\# embed\_model="znbang/bge:large-zh-v1.5-q8\_0"
\# )
\# func=lambda text: hf\_embedding(
\# text,
\# tokenizer=AutoTokenizer.from\_pretrained(model\_path),
\# embed\_model=AutoModel.from\_pretrained(model\_path, device\_map=device)
\# )
)
)
3.2 建立索引
\# processed\_texts是将知识库拼接成了一个长字符串
rag.insert(processed\_texts)
3.3 使用
from lightrag import QueryParam
\# naive模式
print(rag.query(
'报告的发布日期是什么时候?',
QueryParam(
mode='naive',
top\_k=2
)
))
\# global模式
print(rag.query(
'报告的发布日期是什么时候?',
QueryParam(
mode='global',
top\_k=2
)
))
\# hybrid模式
print(rag.query(
'报告的发布日期是什么时候?',
QueryParam(
mode='hybrid',
top\_k=2
)
))
\# local模式
print(rag.query(
'报告的发布日期是什么时候?',
QueryParam(
mode='local',
top\_k=2
)
))
QueryParam有一个only_need_context参数,当它设置为True时,可以查看检索结果,样例代码中有检索样例,从检索样例也可以大致看出来LightRAG效果不好的原因。
4 可视化
最终,LightRAG的结果,可以方便地使用Neo4j进行可视化,导入Neo4j的样例代码在:https://github.com/Steven-Luo/MasteringRAG/blob/main/new_arch/graph_visual_with_neo4j.py
可视化效果如下:
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)