RAG 学习笔记
RAG 核心流程、查询与检索优化、索引与生成策略、系统评估和常见问题的整理,标注了各章节的学习优先级。
📌 阅读优先级
星级直接写在正文主要章节标题中,用于表示第一次学习应投入的精力;低星级不代表内容无价值。
| 星级 | 分类 | 建议学习深度 |
|---|---|---|
| ★★★★★ | 重点掌握 | 理解原理,能运行、修改、组合并排查常见问题 |
| ★★★ | 补充掌握 | 能读懂并知道何时使用,项目需要时可快速落地 |
| ★ | 了解即可 | 建立概念边界,需要时查询,不必投入大量时间记忆 |
建议先完成所有五星章节,再补三星章节;一星章节可在遇到对应场景时查阅。
★★★★★ 重点掌握
-
RAG完整流程理解(第1节)
- 应用场景:知识库问答、文档助手、智能客服、企业内部资料检索
- 为什么重要:当答案依赖私有、动态或需要引用的数据时,RAG 是连接模型与外部知识的重要方案
- 核心流程:数据获取→文档分块→向量化→存储→检索→生成
- 必会概念:每个环节的作用、数据流转方式、常见问题定位
-
文档分块策略(第1.2.2节)
- 应用场景:处理长文档(PDF、网页、Word)时必须分块,否则超过模型上下文长度
- 为什么重要:分块策略直接影响检索质量,chunk太大找不准,太小丢上下文
- 核心参数:
- chunk_size:通常512-1024 tokens(取决于文档类型)
- chunk_overlap:通常50-200 tokens(防止重要信息被切断)
- 实战技巧:代码文档用语义分块(按函数边界),普通文章用固定大小+重叠
-
向量检索原理(第1.3节)
- 应用场景:从数千上万篇文档中找到与用户问题最相关的几条
- 为什么重要:检索质量决定生成质量,检索错了后面都白搭
- 核心技能:
- 相似度计算(余弦相似度最常用)
- top_k参数选择(通常3-10,太多会稀释相关性)
- 混合检索(向量检索+BM25关键词,提升鲁棒性)
- 重排序(用Cross-Encoder模型精排top_k结果)
-
Prompt工程:检索结果注入(第1.4.1节)
- 应用场景:把检索到的文档片段组装成模型能理解的上下文
- 为什么重要:好的Prompt能让模型基于检索内容回答,差的Prompt会导致模型忽略检索结果
- 核心技能:
- 构建检索增强Prompt(参考资料+用户问题)
- 引用标注(让模型标注信息来源)
- 控制生成基于上下文(“仅根据以上资料回答”)
- 处理检索为空的情况(拒答而非编造)
-
评估指标(第1.3.4、1.4.2节)
- 应用场景:优化RAG系统、对比不同方案、监控生产质量
- 为什么重要:没有量化指标就是盲目调参,不知道改进是否有效
- 核心指标:
- Recall召回率(相关文档找到了多少)
- Precision准确率(检索结果中相关的占比)
- MRR(第一个相关结果的位置)
- Faithfulness(生成内容是否忠于检索结果)
- Relevance(生成内容是否回答了问题)
-
实战调优(第八节)
- 应用场景:RAG效果不好时的系统性排查和优化
- 为什么重要:初版RAG系统通常效果不理想,必须会调优
- 常见问题:
- 检索不准:优化分块策略、换embedding模型、加混合检索
- 生成幻觉:加强Prompt约束、检索结果质量过滤
- 响应太慢:embedding缓存、检索结果缓存、top_k调小
- 成本太高:换便宜模型、减少检索调用、优化Prompt长度
★★★ 补充掌握
-
向量数据库选型(第1.2.4节)
- 实用价值:不同场景选不同数据库,选错了会遇到性能/功能瓶颈
- 选型考量:
- Milvus:分布式、高性能、适合大规模(百万级以上)
- Qdrant:易用、支持过滤、适合中小规模+复杂条件
- Chroma:轻量级、适合原型开发和本地测试
- FAISS:仅索引库,需自己管理存储
-
高级检索技术(第二节)
- 实用场景:基础RAG效果不够好时的提升方案
- 核心技术:
- 查询改写(Query Rewriting):用户问题不清晰时重新表述
- HyDE:先让模型生成假设答案,再用假设答案做检索
- MultiQuery:把复杂问题拆成多个子问题分别检索
- 父文档检索:检索时用小块,返回时给完整段落
-
上下文窗口优化(第5.2节)
- 实用场景:检索到10条结果但模型上下文只能放5条
- 关键技能:
- Token预算控制(预留生成空间)
- 相似度阈值过滤(低于阈值的不要)
- 智能截断(保留最相关的,超长的截断)
-
缓存与延迟优化(第8.4节)
- 实用价值:大幅降低成本和延迟
- 三层缓存:
- Embedding缓存(相同文档不重复向量化)
- 检索结果缓存(相同问题不重复检索)
- 生成结果缓存(完全相同的问题直接返回)
-
监控与评测(第七节)
- 实用价值:生产环境持续优化、成本控制
- 关键指标:检索命中率、平均延迟、Token消耗、用户满意度
★ 了解即可
- 查询分解(第二节) - 复杂问题才需要,简单问答不用
- RAPTOR 与 ColBERT(第四节) - 基础检索不足且有明确评测收益时再引入
- 查询分解与 RAG-Fusion(第二节) - 复杂多意图问题需要时使用
- 多模态RAG - 图像/表格检索,生态还不成熟
一、RAG核心流程 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 完成数据处理、索引、检索、上下文组装和生成主链路;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
1.1 数据获取
从各种数据源获取原始文档数据。
常见数据源:
- 文本文档(PDF、Word、TXT、Markdown)
- 网页内容(HTML)
- 数据库记录
- API接口数据
1.2 索引构建(Indexing)
1.2.1 文档预处理
# 数据清洗- 去除无效字符、特殊符号- 统一编码格式(UTF-8)- 提取纯文本内容- 去重处理1.2.2 文档分块(Chunking)
将长文档切分成适合处理的小块。
分块策略:
- 固定大小分块:按字符数或token数切分
- 语义分块:按段落、句子边界切分
- 重叠分块:块之间保留重叠部分(overlap)
关键参数:
chunk_size:每块大小(通常512-1024 tokens)chunk_overlap:重叠大小(通常50-200 tokens)
# 示例chunk_size = 1000 # 每块1000字符chunk_overlap = 200 # 重叠200字符1.2.3 向量化(Embedding)
将文本块转换为向量表示。
常用模型:
- OpenAI:
text-embedding-3-small/large - 开源:
bge-large-zh、m3e-base - 多语言:
multilingual-e5-large
向量维度:
- 通常 768/1024/1536维
- 维度越高,表达能力越强,但计算成本越大
1.2.4 存储(向量数据库)
常用向量数据库:
- Milvus:开源、分布式、高性能
- Qdrant:易用、支持过滤
- Pinecone:云服务、托管方案
- Chroma:轻量级、适合原型开发
- Weaviate:支持混合搜索
- FAISS:Meta开源、仅索引库
存储内容:
- 向量(embedding vector)
- 原始文本块(text chunk)
- 元数据(metadata):来源、时间、标签等
1.3 检索(Retrieval)
1.3.1 查询处理
- 查询文本向量化(使用与文档相同的embedding模型)
- 查询改写/扩展(Query Rewriting)
- 查询分解(Query Decomposition)
1.3.2 向量检索
相似度计算方法:
- 余弦相似度(Cosine Similarity):最常用
- 欧氏距离(Euclidean Distance)
- 点积(Dot Product)
检索参数:
top_k:返回最相似的k个结果(通常3-10)similarity_threshold:相似度阈值过滤
1.3.3 检索策略
单纯向量检索(Dense Retrieval): 仅使用向量相似度检索。
混合检索(Hybrid Search): 结合向量检索 + 关键词检索(BM25)
# 混合检索final_score = α × vector_score + (1-α) × keyword_score重排序(Reranking): 使用更精细的模型对初步检索结果重新排序。
- Cross-Encoder模型:直接判断query和doc的相关性
- 常用模型:
bge-reranker-large、cohere-rerank
# 检索流程1. 向量检索:top_k=202. 重排序:取top_n=5 最相关结果1.3.4 检索效果评估指标
Recall(召回率): 检索到的相关文档数 / 总相关文档数
- 衡量:有多少相关内容被找到了
Precision(准确率/精确率): 检索到的相关文档数 / 检索到的总文档数
- 衡量:检索结果中有多少是真正相关的
MRR(Mean Reciprocal Rank,平均倒数排名):
MRR = 1/n × Σ(1/rank_i)- 衡量:第一个相关结果的排名位置
NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益):
- 衡量:排序质量(考虑相关性程度和位置)
- 越靠前的相关文档权重越高
1.4 生成(Generation)
1.4.1 提示词工程(Prompt Engineering)
构建包含检索结果的提示词。
经典模板:
你是一个问答助手。请根据以下参考资料回答用户问题。
【参考资料】{retrieved_chunks}
【用户问题】{user_query}
【回答要求】- 仅根据参考资料回答- 如果参考资料中没有相关信息,明确说明- 回答要准确、简洁1.4.2 调用LLM生成
将构建好的prompt发送给大模型生成答案。
常用模型:
- GPT-4/GPT-3.5
- Claude
- 国产:文心一言、通义千问、ChatGLM
1.4.3 答案后处理
- 去除冗余信息
- 格式化输出
- 添加引用来源
- 置信度标注
1.4.4 生成效果评估
置信度(Confidence): 模型对答案的确定程度。
相关性/相似度(Relevance): 答案与问题的相关程度。
流畅度(Coherence): 答案的语言表达质量。
依赖度/可归因性(Groundedness): 答案是否基于检索到的参考资料,而非模型自身知识。
- 检查答案内容是否能在检索文档中找到依据
引用(Citation): 答案是否标注了信息来源。
二、查询优化策略 ★★★
🧩 学习优先级:补充掌握 使用位置: 基础检索不足时改善复杂、模糊或多意图查询;学习要求: 能读懂并知道何时使用,项目需要时可快速落地。
2.1 多查询策略(Multi-Query)
原理: 将用户原始查询扩展为多个相关查询,分别检索后合并结果。
优点:
- 简单易实现
- 提升召回率
- 速度较快
实现方式:
# 原始查询原始问题:"RAG是什么?"
# 扩展为多个查询查询1:"RAG的定义是什么?"查询2:"什么是检索增强生成?"查询3:"RAG技术原理"
# 分别检索后合并2.2 RAG-Fusion(多查询结果融合)
原理: Multi-Query的加强版,增加RRF(Reciprocal Rank Fusion,倒数排名融合)对结果重排。
优点:
- 检索效果更好
- 融合多个查询的优势
缺点:
- 复杂度高
- 速度较慢
RRF公式:
RRF_score(d) = Σ 1/(k + rank_i(d))# k: 常数(通常60)# rank_i(d): 文档d在第i个查询结果中的排名2.3 问题分解策略(Decomposition)
原理: 将复杂问题拆解为多个子问题,逐个解决后合并答案。
分解策略:
顺序分解(Sequential/依赖): 子问题之间有依赖关系,需按顺序执行。
# 示例原始问题:"2023年哪家公司的AI产品最受欢迎,它的市场份额是多少?"
子问题1:"2023年哪家公司的AI产品最受欢迎?"→ 答案:OpenAI
子问题2:"OpenAI在2023年的市场份额是多少?"→ 使用子问题1的答案并行分解(Parallel/独立): 子问题相互独立,可同时执行。
# 示例原始问题:"比较GPT-4和Claude的优缺点"
子问题1:"GPT-4的优点和缺点是什么?"子问题2:"Claude的优点和缺点是什么?"→ 并行检索,最后合并对比2.4 Step-Back(回退策略)
原理: 将具体问题回退到更高层次的通用问题,先获取背景知识。
适用场景:
- 时间序列问题
- 多步推理问题
- 需要背景知识的复杂问题
示例:
# 原始问题(具体)"2024年3月OpenAI发布了什么新功能?"
# 回退问题(通用)"OpenAI的产品发展历史和重要版本?"
# 流程1. 先回答回退问题,获取背景知识2. 再回答原始问题,结合背景给出答案2.5 HyDE(假设性文档嵌入)
原理: 生成假设性答案,用假答案的embedding去检索,而非用问题embedding。
核心假设: 假答案与真实答案的相似度 > 问题与答案的相似度
流程:
1. 输入用户问题2. LLM生成假设性答案(可能不准确)3. 用假答案的embedding进行向量检索4. 检索到的真实文档作为上下文5. 重新生成最终答案优点:
- 提升检索准确性
- 适合复杂语义匹配
缺点:
- 需要额外LLM调用
- 成本和延迟增加
三、路由与查询构建策略 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 选择正确知识源并构建带过滤条件的检索请求;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
3.1 路由(Routing)
定义: 智能流量调度,根据查询类型将请求路由到不同的处理流程。
3.1.1 逻辑路由(LLM as Classifier)
原理: 使用LLM作为分类器,判断查询类型并路由。
示例:
# 查询类型分类- 事实型问题 → 知识库RAG- 计算型问题 → 调用计算工具- 闲聊问题 → 直接对话模型- 代码问题 → 代码知识库3.1.2 语义路由(Semantic Routing)
原理: 基于查询的语义相似度进行路由。
实现:
# 预定义主题向量topics = { "产品功能": embedding("产品相关问题"), "技术支持": embedding("技术故障问题"), "价格咨询": embedding("价格优惠问题")}
# 计算查询与各主题的相似度query_embedding = embedding(user_query)similarity_scores = cosine_similarity(query_embedding, topics)
# 路由到最相似主题最佳实践:
- 主题数量:5-20个为佳(太少不够细分,太多overlap严重)
- Fallback机制:相似度都低时的兜底策略
- A/B测试:对比不同路由策略的效果
3.2 查询构建(Query Construction)
定义: 将自然语言查询转换为结构化查询语句。
3.2.1 关系数据库查询(SQL)
示例:
# 自然语言"查询2023年销售额超过100万的客户"
# 转换为SQLSELECT customer_name, SUM(sales)FROM ordersWHERE year = 2023GROUP BY customer_nameHAVING SUM(sales) > 10000003.2.2 图数据库查询(Cypher)
示例:
# 自然语言"查找张三的所有二度好友"
# 转换为CypherMATCH (p:Person {name: '张三'})-[:FRIEND]->()-[:FRIEND]->(friend)RETURN friend.name3.2.3 向量库 + 元数据过滤
示例:
# 自然语言"查找2024年发布的关于AI的文档"
# 转换为向量检索 + 元数据过滤{ "query_embedding": embedding("AI相关内容"), "filter": { "year": 2024, "category": "AI" }, "top_k": 5}3.2.4 错误处理
重试机制: SQL/Cypher生成错误时重新生成。
SQL验证:
# 检查SQL安全性- 禁止DROP/DELETE等危险操作- 限制查询范围(添加LIMIT)- 参数化查询防注入安全检查:
- 权限验证
- 敏感数据脱敏
- 查询超时限制
四、索引生成优化策略 ★★★
🧩 学习优先级:补充掌握 使用位置: 在特定数据规模和文档结构下提升索引表达能力;学习要求: 能读懂并知道何时使用,项目需要时可快速落地。
补:高级索引优化技术
4.1 多表示索引(Multi-Representation Indexing)
原理: 为同一文档生成多个不同的表示形式。
实现方式:
- 原始文本 + 摘要:同时索引全文和摘要
- 多粒度切分:段落级 + 句子级
- 多模型embedding:使用不同embedding模型
优点:
- 提升不同类型查询的召回率
- 增强检索鲁棒性
4.2 RAPTOR(递归抽象处理树状检索)
原理: 构建层次化的文档摘要树,支持不同粒度的检索。
结构:
层级0(叶子节点): 原始文档块层级1: 多个块的摘要层级2: 多个摘要的摘要...根节点: 全文总结检索策略:
- 简单问题:在叶子节点(细粒度)检索
- 概括性问题:在上层节点(粗粒度)检索
优点:
- 支持多层次理解
- 适合长文档和复杂查询
4.3 ColBERT(细粒度上下文检索)
原理: Token级别的交互匹配,而非整个chunk的向量匹配。
特点:
- 每个token都有自己的向量
- 计算query每个token与document每个token的相似度
- 精确度更高,但计算成本大
适用场景:
- 需要精确匹配的场景
- 关键词敏感的检索
4.4 其他优化技术
文档摘要索引: 为长文档生成摘要,同时索引原文和摘要。
元数据增强: 为每个chunk添加丰富的元数据(标题、章节、标签等)。
时间衰减: 为文档添加时间权重,新文档权重更高。
五、检索优化策略 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 改善召回、相关性、排序和上下文选择;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
补:提升检索效果的方法
5.1 查询扩展(Query Expansion)
同义词扩展:
"汽车" → ["汽车", "轿车", "车辆", "机动车"]相关词扩展: 使用词向量找相近概念。
历史查询扩展: 结合用户历史查询优化当前查询。
5.2 上下文窗口优化
父文档检索(Parent Document Retrieval):
- 索引:小块(精确匹配)
- 返回:所属的大块(完整上下文)
滑动窗口扩展: 检索到某chunk后,同时返回其前后chunk。
5.3 负样本过滤
低相似度过滤: 设置相似度阈值,过滤不相关结果。
多样性过滤: 避免返回内容高度重复的chunk。
六、生成优化策略 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 压缩上下文、提供引用并降低无依据回答;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
补:提升生成质量的方法
6.1 上下文压缩
问题: 检索到的chunk过多,超出LLM上下文窗口。
解决方案:
- 重排后截断:只保留top-k最相关的
- 摘要压缩:对多个chunk生成摘要
- LLMLingua:使用模型压缩文本
6.2 引用追踪
添加来源标记:
【来源1】原始文本1...【来源2】原始文本2...
请在回答时标注信息来源,格式:[1][2]输出示例:
RAG是检索增强生成技术[1],它结合了检索和生成两个步骤[2]。6.3 答案验证
自我反思(Self-Reflection): 让LLM检查自己的答案是否符合要求。
事实核查: 对比答案与检索文档,验证一致性。
置信度评分: 让模型给出答案的置信度分数。
七、RAG系统评估 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 量化检索与生成质量并支持持续回归;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
补:完整评估体系
7.1 离线评估
检索阶段:
- Recall@K
- Precision@K
- MRR
- NDCG
生成阶段:
- BLEU:与参考答案的n-gram重叠
- ROUGE:召回率导向的重叠度
- BERTScore:语义相似度
7.2 在线评估
用户反馈:
- 点赞/点踩
- 答案有用性评分
业务指标:
- 答案采纳率
- 用户满意度
- 任务完成率
7.3 人工评估
维度:
- 相关性:答案是否回答了问题
- 准确性:事实是否正确
- 完整性:是否遗漏重要信息
- 流畅性:语言表达质量
- 可信度:是否基于检索内容
八、常见问题与解决方案 ★★★★★
🔥 学习优先级:重点掌握 使用位置: 定位召回不足、噪声、幻觉、延迟和成本问题;学习要求: 理解原理,能独立修改、组合使用并排查常见问题。
补:实战中的坑与对策
8.1 检索不到相关内容
可能原因:
- chunk切分不合理(过大或过小)
- embedding模型不匹配(中英文混用)
- 查询表达与文档差异大
解决方案:
- 调整chunk_size和overlap
- 使用领域特定embedding模型
- 查询改写/扩展
8.2 检索到无关内容
可能原因:
- 向量数据库中存在低质量数据
- 相似度阈值过低
- 元数据过滤不足
解决方案:
- 数据清洗和去重
- 提高相似度阈值
- 添加元数据过滤条件
- 使用reranker重排
8.3 答案生成幻觉
可能原因:
- prompt设计不当
- 检索内容不足
- 模型倾向于使用固有知识
解决方案:
- 强调“仅根据参考资料回答”
- 提升检索质量
- 使用依赖度检查工具
- 添加引用要求
8.4 响应速度慢
瓶颈分析:
- 向量检索耗时
- 重排序耗时
- LLM生成耗时
优化方案:
- 使用ANN加速向量检索(HNSW)
- 减少rerank候选数量
- 使用流式输出
- 缓存高频查询结果
九、实战工具与框架 ★★★
🧩 学习优先级:补充掌握 使用位置: 按规模、过滤、部署和维护需求选择组件;学习要求: 能读懂并知道何时使用,项目需要时可快速落地。
补:常用开发工具
9.1 RAG框架
LangChain:
- 最流行的RAG框架
- 丰富的组件和集成
LlamaIndex:
- 专注数据索引和检索
- 强大的查询引擎
Haystack:
- NLP pipeline框架
- 支持混合检索
9.2 向量数据库对比
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Milvus | 高性能、分布式 | 大规模生产环境 |
| Qdrant | 易用、过滤强 | 中小型项目 |
| Chroma | 轻量级、内存 | 原型开发 |
| Pinecone | 云托管、免运维 | 快速上线 |
| FAISS | Meta开源、仅索引 | 研究和实验 |
9.3 Embedding模型选择
中文场景:
bge-large-zh(推荐)m3e-basetext2vec-large-chinese
英文场景:
text-embedding-3-large(OpenAI)gte-largee5-large-v2
多语言:
multilingual-e5-largeparaphrase-multilingual-mpnet-base-v2
十、进阶学习资源 ★
👀 学习优先级:了解即可 使用位置: 需要专项深入时查询论文和项目资料;学习要求: 建立概念边界,不必首次记忆细节,需要时再查询。
补:深入学习方向
10.1 论文推荐
- RAG原始论文(Lewis et al., 2020)
- ColBERT论文
- RAPTOR论文
- HyDE论文
10.2 实战项目
- 企业知识库问答系统
- 文档智能分析助手
- 客服机器人
- 法律文书检索系统
10.3 优化方向
- 多模态RAG(图片+文本)
- 实时数据更新
- 个性化检索
- 对话式多轮RAG
本文由作者整理,AI 辅助润色。