导航
本文系统性地梳理了 RAG(Retrieval-Augmented Generation,检索增强生成)系统从基础到高级的 20 种优化方法,涵盖分块策略、检索增强、查询优化、生成质量控制等多个维度。
分块策略
1. 语义分块
核心思路:按句子级嵌入相似度切分,而非固定字符数。当相邻句子语义相似度低于阈值时在此处切块,从而保留语义完整性。
断点计算方法:
- 百分位法(Percentile):相似度低于某百分位的位置作为断点
- 标准差法(Standard Deviation):相似度低于「均值 − 标准差」的位置
- 四分位距法(IQR):用四分位距检测异常低的相似度作为断点
2. 切块大小评估
核心思路:对多种切块大小(如 128、256、512 字符)分别做检索与生成,用忠实度(回复是否紧扣上下文)和相关性(是否答到点上)等指标对比,数据驱动选出最优切块参数。
- 优势:避免拍脑袋定 chunk size,有评估依据;适合新语料或新场景的调参
- 局限:需要标注或可自动评估的测试集,且评估有一定计算成本
- 适用场景:上线前调参、不同领域/文档类型单独优化
13. 命题分块
核心思路:不按字符或句子切块,而是把文本拆成原子化、自包含的”命题”(一句一事实,可独立理解)。用命题做检索单元,实现更细粒度的 query–content 匹配。
- 优势:检索粒度细,适合事实型、实体型问题;命题可复用、可组合
- 局限:建库需对每块做命题抽取,成本高;命题过多时索引与检索开销增大
- 适用场景:知识密集型、强调”单事实”准确性的 QA
检索增强
3. 上下文增强检索
核心思路:检索到最相关的块后,同时带上其前、后相邻块一起作为上下文,避免”孤岛片段”缺少前文/后文而导致理解不全。
- 优势:实现简单,无需改索引;能明显改善需要前后文才能理解的内容(如列表、步骤、对比)
- 局限:会引入与问题无关的相邻块,可能增加噪声和 token 消耗
- 适用场景:分块较细、上下文连贯性重要的场景
4. 上下文片段标题提取(CCH)
核心思路:用 LLM 为每个文本块生成简短描述性标题,建索引时同时存「块文本嵌入」和「标题嵌入」。检索时用查询分别与文本、标题算相似度,再取平均(或加权)作为该块得分,从而多一个”主题维度”提升检索精度。
- 优势:标题浓缩主题,对概括性、概念型查询更友好;可与现有向量检索无缝结合
- 局限:预处理阶段要为每块调用 LLM 生成标题,成本和延迟增加
- 适用场景:块较长、需要”主题级”匹配的知识库
7. 重排序(Reranking)
核心思路:两阶段检索——先用向量(或 BM25)快速召回一批候选文档,再用更精细的模型对「查询-文档」对打分并重排,只保留最相关的若干条送入生成。常用实现:LLM 打 0–10 分,或专用 reranker 模型(如 Cross-Encoder)。
- 优势:在不扩大首阶段召回量的前提下显著提升 top-k 精度,减少无关上下文注入
- 局限:第二阶段要对每条候选调用模型,延迟和成本随候选数增加
- 适用场景:对准确率要求高、候选数可控(如 top-20 内 rerank)
8. 相关段落提取(RSE)
核心思路:不为单块打分后简单取 top-k,而是为连续块序列算”价值和”:每块价值 = 相似度 − 惩罚项,再用最大子数组(Kadane)思想找价值和最大的连续段落。这样返回的是一整段连贯文本,而不是零散块。
- 优势:上下文连贯、边界更自然,适合需要”一整段话”才能答好的问题
- 局限:依赖块顺序与相似度曲线质量;实现和调参(惩罚、最小长度等)略复杂
- 适用场景:长文档、叙述性强,且希望按”段落”而非”单块”呈现
11. 自适应检索
核心思路:先对用户查询做类型分类(事实型 / 分析型 / 观点型 / 情境型),再根据类型选用不同检索策略(如事实型偏精确匹配、分析型多召回再压缩等),实现”因问施策”。
- 优势:同一套系统可兼顾多类问题,检索更有的放矢
- 局限:分类与各策略设计依赖领域知识;分类错误会传导到检索
- 适用场景:混合类型问答、客服/咨询等
15. 融合检索
核心思路:向量检索(语义相似)与 BM25(词匹配)同时做,对两路分数分别 Min-Max 归一化后按 alpha 加权融合:
final_score = alpha * norm_vector + (1 - alpha) * norm_bm25
再按融合分取 top-k,语义与关键词互补,召回更稳。
16. 图RAG(Graph RAG)
核心思路:从每个文本块中抽取概念/实体,以块为节点、以共享概念 + 语义相似度为边权建知识图谱。检索时先命中部分节点,再通过图上的边扩展关联节点,从而把跨多块的相关信息一并拉取。
- 优势:能利用”概念共现""实体关系”做关联扩展,适合概念密集、关系复杂的领域
- 局限:建图与概念抽取成本高;图规模大时遍历与索引设计更复杂
- 适用场景:知识图谱、领域百科、多实体关系推理
17. 分层检索RAG
核心思路:建两层索引——摘要层(如每页/每章一个摘要)和详细层(页内细粒度块)。检索时先查摘要层锁定相关页/章,再只在对应页内查详细块,从而在保证相关性的前提下缩小搜索范围、提升效率。
- 优势:适合超长文档、十亿级规模;先筛范围再精查,延迟与算力更可控
- 局限:摘要质量与粒度影响第一层召回;若相关分布在多页,需合理设置 k_summaries
- 适用场景:长篇报告、书籍、法规、多章节文档
查询优化
6. 查询转换
核心思路:在检索前对用户原始查询做变换,使检索更准或更全。常用三种策略:
-
查询重写:把模糊、口语化查询改写成更具体、更贴近文档表述的形式
-
回退提示(Step-back):生成一个更宽泛的”背景问题”,先检索背景再结合原问题
-
子查询分解:把多子问题的复杂查询拆成 2~4 个简单子查询,分别检索再合并
-
优势:不改索引即可提升检索表现,尤其适合表述不规范或复杂的用户问句
-
局限:多一次(或多次)LLM 调用,延迟与成本增加;重写/分解质量依赖 prompt
-
适用场景:开放域问答、复杂多步问题、需要”先背景后细节”的检索
18. 假设文档嵌入(HyDE)
核心思路:用户查询往往很短,与长文档在嵌入空间里距离较远。HyDE 的做法:先用 LLM 根据问题生成一段”假设的”答案文档(风格、长度接近真实文档),再用这段假设文档的嵌入(而非原始 query 的嵌入)去检索真实文档,从而拉近 query 与 document 的表示距离。
- 优势:能把短/抽象问句补成伪文档,大幅提升检索相关性;不用重建索引,只在检索侧增强 query
- 局限:多一次 LLM 生成与嵌入调用;假设文档若偏离真实文档风格,可能引入噪声
- 适用场景:短查询、知识问答、关键词匹配差的 RAG 场景
索引增强
5. 文档增强RAG(问题生成)
核心思路:为每个文本块用 LLM 生成若干”该块能回答的问题”,把「问题 + 对应块」一并写入向量库。用户查询时,既匹配块内容,也匹配这些预生成问题,从而拉近”问句”与”陈述句”的语义距离。
- 优势:显著缓解 query(问句)与 document(陈述)之间的表述差异,提高召回
- 局限:建库时每块要生成多条问题,成本和存储都增加;问题质量依赖模型与 prompt
- 适用场景:FAQ、知识问答、用户常以问句形式提问的场景
14. 多模态RAG
核心思路:从 PDF 等文档中同时提取文本与图像,用视觉模型为每张图生成文本描述(caption),将「正文 + 图像描述」统一嵌入并写入同一向量库,实现”以文搜文+以文搜图”的联合检索。
后处理
9. 上下文压缩
核心思路:检索得到多块文本后,不直接全部塞给 LLM,而是先对每块做”压缩”:只保留与当前查询强相关的内容,去掉无关句子或整段,从而减少噪声、节省 token、提高生成质量。
三种压缩策略:
-
选择性(Selective):从原文中筛选与查询相关的句子,保持原句、原序
-
摘要(Summary):针对查询写一段只含相关信息的摘要
-
抽取(Extraction):按查询抽取关键事实或结构化信息
-
优势:显著减少无关上下文,降低幻觉与 token 消耗;可与任意检索方式组合
-
局限:每块都要过一次 LLM,延迟与成本增加;过度压缩可能丢细节
-
适用场景:检索结果偏长、噪声多,或上下文窗口紧张时
生成质量控制
12. Self-RAG
核心思路:在「检索 → 生成」全流程中插入多个反思与决策点,在运行时自适应地决定是否检索、是否重试、是否标注”无依据”。
六个关键组件:
- 检索决策:判断当前查询是否需要检索
- 文档检索:需要时做向量检索
- 相关性评估:评估每个检索文档与查询是否相关
- 回复生成:基于相关上下文生成回复
- 支持评估:评估回复是否被上下文充分支持
- 效用评估:对回复的整体实用性打 1–5 分
- 优势:可减少无谓检索与幻觉,输出更可控、可解释
- 局限:多次 LLM 调用,延迟与成本高;依赖各环节 prompt 设计
- 适用场景:对准确性与可追溯性要求高的场景
系统级优化
10. 反馈回路RAG
核心思路:把用户对回复的评分/反馈纳入闭环:记录「查询–回复–评分」,用 LLM 判断历史反馈与当前查询/文档是否相关,据此动态调整文档相关性得分,并把高质量问答对写入知识库,使系统越用越准。
核心组件:反馈收集 → 相关性调整(按历史反馈修正检索分数)→ 知识积累(优质 Q&A 入向量库)
- 优势:可持续利用真实用户信号,适合客服、知识库等有稳定反馈的场景
- 局限:依赖高质量、足量反馈;反馈噪声或冷启动会影响调整效果
- 适用场景:有评分/点赞/纠错等用户反馈的在线系统
19. 动态纠正RAG(CRAG)
核心思路:检索完成后先评估这批文档与 query 的相关性(如 0–1 分),再按分数区间做分支:
-
高相关 → 只用本地文档
-
低相关 → 放弃本地、改用网络搜索
-
中等 → 本地 + 网络一起用
-
优势:降低”检索到无关文档仍强行生成”的幻觉与错误;适合知识边界不固定、需时效信息的场景
-
局限:需要可靠的相关性评估和网络搜索接口;阈值需调参
-
适用场景:开放域问答、时效性强的场景、本地库覆盖不全时
20. 强化学习增强RAG
核心思路:把 RAG 流程看成强化学习:
- 状态:当前 query、已选上下文、历史回复与奖励
- 动作:重写 query、扩展/过滤上下文、生成回复
- 奖励:如生成回复与标准答案的语义相似度
用 epsilon-greedy 等策略根据状态选动作,用奖励迭代优化,使检索与生成策略逐步变好。
- 优势:可端到端利用标注或用户反馈优化整条管道;理论上能学到复杂策略
- 局限:需要奖励信号(标注答案或用户反馈)、训练循环与稳定性调参
- 适用场景:有充足标注或反馈、希望长期自动优化效果的场景
方法总结对比
| 编号 | 方法 | 优化维度 | 核心思想 |
|---|---|---|---|
| 1 | 语义分块 | 分块 | 基于语义相似度的智能分割 |
| 2 | 切块大小评估 | 分块 | 数据驱动选择最优切块参数 |
| 3 | 上下文增强检索 | 检索 | 返回匹配块及其相邻块 |
| 4 | 上下文标题提取(CCH) | 检索 | 标题+文本双维度匹配 |
| 5 | 文档增强RAG | 索引 | 预生成问题弥补语义鸿沟 |
| 6 | 查询转换 | 查询 | 重写/回退/分解查询 |
| 7 | 重排序 | 检索 | 两阶段:粗检索+精排序 |
| 8 | 相关段落提取(RSE) | 检索 | 最大子数组找连续最优段落 |
| 9 | 上下文压缩 | 后处理 | 压缩检索结果去除噪声 |
| 10 | 反馈回路 | 系统 | 用户反馈动态调整系统 |
| 11 | 自适应检索 | 检索 | 按查询类型选策略 |
| 12 | Self-RAG | 生成 | 多维度反思评估机制 |
| 13 | 命题分块 | 分块 | 原子化事实陈述作为检索单元 |
| 14 | 多模态RAG | 索引 | 图文联合检索 |
| 15 | 融合检索 | 检索 | 向量+BM25加权融合 |
| 16 | 图RAG | 检索 | 知识图谱关联发现 |
| 17 | 分层检索 | 检索 | 摘要→详细的两级检索 |
| 18 | HyDE | 查询 | 假设文档嵌入替代查询嵌入 |
| 19 | CRAG | 系统 | 动态评估并纠正检索质量 |
| 20 | RL增强RAG | 系统 | 强化学习优化全流程 |
优化方法选择指南
- 分块优化:检索不够精准时,优先考虑语义分块(1)、命题分块(13)或切块大小评估(2)
- 检索增强:融合检索(15)性价比高、易落地;图RAG(16)适合概念与关系密集的领域
- 查询优化:HyDE(18)对短查询、抽象问句效果好;查询转换(6)适合复杂、多子问题查询
- 后处理:重排序(7)+ 上下文压缩(9)能明显提升最终回复质量与可控性
- 系统级:CRAG(19)适合对可靠性、时效性要求高的场景;反馈回路(10)适合有持续用户反馈的产品
- 端到端:Self-RAG(12)与 RL 增强(20)能力最全面,实现与调参成本也更高,可按需选用