导图社区 RAG知识检索增强详解
这是一篇关于RAG知识检索增强详解的思维导图,主要内容包括:开卷考试的比喻与RAG引入,RAG概念详解,RAG核心流程,LangChain RAG实现流程。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
RAG知识检索增强详解 B站
开卷考试的比喻与RAG引入
场景:开卷考试
方法一:直接查书
缺点:费时费力,需精通
方法二:预构建QA对
流程:查询Q -> 查找A
方法三:RAG (知识检索增强)
概念:大语言模型 + 知识检索增强
比喻:请到作者/老师在身边 (人形外挂)
RAG概念详解
全称:Retrieval-Augmented Generation
无RAG的问题:歧义
例子:"RG" 缩写 vs. 其他含义 (如酶)
错误路径:直接问LLM (基于先验知识)
RAG的解决方案:提供上下文
目标:让LLM知道在特定知识库 (如考试宝典) 中查询
RAG核心流程
步骤一:知识入库 (向量库)
知识来源:考试宝典
关键处理:知识切片 (Splitting)
切片方法:按页、章节、段落、句子、字符
目的:建立索引,便于查询
类比:视频时间戳
存储形式:Embedding向量化
步骤二:处理用户查询 (Query)
操作:查询向量化
操作:相似度检索
常用度量:余弦相似度、其他距离
操作:上下文排序
操作:提取相关上下文 (Top-K)
步骤三:增强与生成
操作:结合原始Query与检索到的上下文
操作:将增强后的提示词送入大语言模型 (LLM)
结果:生成期望的答案
LangChain RAG实现流程
来源:LangChain官方图示
1. 加载 (Load)
示例:加载考试宝典数据 (如PDF)
2. 切片 (Split)
方法:按页、段落、章节、句子、字符
LangChain组件:TextSplitters
3. 向量化 (Embed)
流程:对每个切片进行Embedding
LangChain组件:Embedding Models
4. 存储 (Store)
目标:向量数据库 (Vector DB, e.g., ChromaDB)
LangChain组件:VectorStores
5. 检索 (Retrieve)
流程:Query向量化 -> 相似度匹配
操作:提取Top-K结果
LangChain组件:Retrievers
RAG代码实战 (基于OpenAI)
步骤一:环境准备
所需库:
langchain
,
openai
chromadb
pypdf
安装方式:
pip install ...
问题解决:缺啥补啥
基础:无RAG的对话系统
前提:RAG依赖于LLM
配置:OpenAI API Key
LangChain封装:
ChatOpenAI
主要参数:
openai_api_key
(必需),
model_name
(默认'gpt-3.5-turbo'),
temperature
max_tokens
输入格式 (OpenAI):角色扮演 (system, user, assistant)
示例:敲门冷笑话
参考:OpenAI官方文档链接
输入格式 (LangChain):封装的消息对象 (
SystemMessage
HumanMessage
AIMessage
演示:冷笑话交互
后续对话:使用
append
方法
笑话解释:"Orange you glad..." 谐音梗
现有LLM的缺陷
1. 幻觉问题 (无法判断对错)
2. 信息滞后 (可通过Web搜索缓解)
3. 专业领域知识匮乏
示例:询问百川二模型
LLM错误回答:误认为百度二分类模型
解决方案尝试:提示工程 (Prompt Engineering)
方法:通过Prompt注入知识
示例:提供百川二信息 (介绍、数据、任务)
流程:将信息拼接为先验知识
提示模板:"基于以下内容回答问题..."
结果:基于注入知识的准确回答
局限性:不能为每个问题手动注入
-> RAG的必要性
RAG实现步骤 (以百川二论文为例)
1. 加载PDF (Load)
工具:
PyPDFLoader
LangChain组件:
DocumentLoaders
输出:
Document
对象 (含内容和元数据)
2. 文本切片 (Split)
工具示例:
RecursiveCharacterTextSplitter
参数示例:
chunk_size=500
chunk_overlap=50
TextSplitters
结果示例:切割成215个切片
3. 向量化与存储 (Embed & Store)
Embedding模型:OpenAI模型 (如
text-embedding-ada-002
向量数据库:ChromaDB
LangChain函数:
Chroma.from_documents
输入:文本内容 (Documents), Embedding模型, 数据库名称 (Collection name)
4. 检索 (Retrieve)
方法:
similarity_search
参数:
query
k
(Top-K, e.g., k=2)
流程:查询向量化 -> 相似度计算 -> 排序
输出:Top-K相关文档片段
5. 增强与生成 (Augment & Generate)
上下文构建:拼接Top-K结果 (示例Top-3)
提示模板:复用之前模板,填入检索到的内容
示例问题:"百川二的词表大小是多少?" (What is the vocabulary size of Baichuan-2?)
LLM调用:将增强提示词送入
结果:基于检索内容给出正确答案 (12.2万词表 / 122k vocab size)
语言注意:输出语言可能受模型或历史影响 (示例中为中文)
无OpenAI API Key的替代方案
问题:没有OpenAI API Key
受影响环节:Embedding模型, Chat模型
解决方案一:替换Embedding模型
来源:Hugging Face
示例:
sentence-transformers
LangChain集成:
HuggingFaceEmbeddings
配置:传入模型名称
本地部署:支持本地路径
操作:使用新Embedding模型重新构建向量库
示例:用
调用
from_documents
命名:区分新库 (如
hf_embedding
检索测试:验证新库检索功能 (示例Top-2)
效果注意:检索效果依赖所选模型质量
选择依据:任务类型 (检索/QA)、语言
解决方案二:替换Chat模型
来源:Hugging Face 开源模型
操作:本地下载部署
集成:与前面构建好的Prompt结合使用
结果:实现类似OpenAI功能 (准确度可能不同)
总结与致谢
结束语
感谢观看
下次再见