news 2026/9/28 4:37:13

RAG进阶-RAG的十个优化技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RAG进阶-RAG的十个优化技巧

为什么RAG不是算法问题而是工程问题?

RAG 进阶:10 个优化技巧

RAG 的基础流程并不复杂,真正困难的是让它在真实业务中同时做到:检索准确、上下文完整、生成可信、延迟可控、成本可接受。

一、为什么说 RAG 是工程问题?

一个 RAG 系统的最终效果,不由某一个算法单独决定,而是由整条链路共同决定:

用户问题 ↓ 查询理解与改写 ↓ 多路召回(关键词 / 向量 / 元数据) ↓ 结果融合、去重与 Rerank ↓ 上下文组织(Stuff / Refine / Tree Summarize) ↓ LLM 生成答案

任意环节出现问题,都可能导致最终回答失真。例如:文档切分破坏语义、查询表达与知识库不一致、召回结果不完整、相关文档排序靠后,或者上下文过长导致重要信息被淹没。

二、10 个优化技巧总览

阶段优化技巧解决的核心问题
检索1. 摘要检索原文太长、主题匹配不准确
检索2. 子问题检索复杂问题包含多个意图
检索3. 句子窗口检索小块精准但上下文不足
检索4. 多路召回单一检索方式容易漏召回
检索5. Rerank 重排序候选多但真正相关的内容排位靠后
生成6. Refine 迭代精炼多个知识块无法一次性高质量整合
生成7. 多文档 Refine跨文档信息需要逐步补充与修正
生成8. Tree Summarize超长上下文与串行处理速度慢
查询9. 改写提问用户表达模糊、口语化或缺少上下文
数据10. 合理利用元数据搜索范围过大、业务条件无法过滤

三、检索优化:先找得全,再排得准

1. 摘要检索:用摘要定位,用原文回答

摘要检索属于典型的Small-to-Big思路:

  • 建库时,为原始文档或父文本块生成简洁摘要;
  • 检索时,对摘要进行向量匹配;
  • 命中摘要后,取回其对应的原始文档或完整父文本;
  • 最终让 LLM 基于原文回答,而不是只基于摘要作答。
原始文档 → 文本切分 → 生成摘要 → 摘要向量化并建立索引 ↓ 用户问题 → 检索摘要 → 找到映射关系 → 返回原始文本 → LLM

这种方式兼顾了小文本的检索精度和大文本的上下文完整性。需要注意:摘要质量会直接影响召回,摘要遗漏的细节可能永远无法进入候选集。

2. 子问题检索:先拆解,分头找,再汇总

当用户问题同时包含对比、因果、时间线或多个实体时,直接检索往往只能覆盖其中一部分。可以先由 LLM 将复杂问题拆成若干自包含的子问题,再分别检索并汇总。

复杂问题 ├── 子问题 1 → 检索结果 A ├── 子问题 2 → 检索结果 B └── 子问题 3 → 检索结果 C ↓ 合并后生成答案

高质量子问题应满足:

  • 自包含:脱离原问题也能独立理解;
  • 具体:可直接用于事实检索;
  • 相关:所有子问题都服务于原始意图;
  • 有逻辑顺序:便于后续汇总与推理。

该方法覆盖面强,但会增加 LLM 调用次数、检索次数和整体延迟。

3. 句子窗口检索:检索中心句,返回上下文窗口

句子窗口检索同样是 Small-to-Big:索引的最小单元是句子,命中后返回该句前后若干句组成的窗口。

句子 N-2 | 句子 N-1 |【命中的中心句 N】| 句子 N+1 | 句子 N+2 ↑ 精确检索 └──────── 返回完整窗口 ────────┘

优点是检索粒度细、噪声少,并能补足代词指向和上下文关系;难点是需要维护“中心句—原文窗口”的映射,而且窗口大小必须根据数据集调试。

4. 多路召回:不要把所有鸡蛋放在一个篮子里

不同检索方式各有所长:

  • 关键词检索(BM25):擅长专有名词、编号、日期和精确词匹配;
  • 向量检索:擅长语义相近但表达不同的内容;
  • 元数据过滤 / 结构化查询:擅长部门、时间、权限、类型等明确条件;
  • 其他领域检索器:可按业务接入知识图谱、SQL 或全文搜索。

多路结果的分数尺度不同,不能简单相加。视频中给出了基于排名的融合思路:

RRF(d)=∑i=1m1k+ranki(d) RRF(d)=\sum_{i=1}^{m}\frac{1}{k+rank_i(d)}RRF(d)=i=1∑m​k+ranki​(d)1​

其中,ranki(d)rank_i(d)ranki​(d)表示文档ddd在第iii路检索中的名次,kkk是平滑常数。一个文档若在多路结果中都排名靠前,其融合分数会更高。

融合时只依赖名次,不直接比较 BM25 分数、余弦相似度和其他检索器的原始分数,因此能够避开不同评分尺度难以统一的问题。工程实现时还需要先按文档 ID 去重,再累加每一路的 RRF 得分并按总分降序排列。

5. Rerank:粗召回之后再精排

多路召回负责“尽可能找全”,Rerank 负责“把真正相关的文档排到前面”。

对比项多路召回Rerank
目标提高召回率 Recall提高精确率 Precision
阶段生成候选集候选集后处理
特点快、范围广、允许少量噪声慢但判断更细致
常见实现BM25、向量检索、元数据过滤Cross-Encoder、专用 Reranker
结果较大的候选集合Top K 高相关文档

典型链路为:

多路粗召回 → 合并去重 → Rerank 精排 → 截取 Top K → 交给 LLM

Reranker 会同时读取“问题 + 候选文档”,进行深层交互式相关性判断,通常比单独计算向量相似度更准确,但计算成本也更高。


四、生成优化:不是把所有文档直接塞给模型

检索到大量参考文档后,如果直接拼接(Stuff)到提示词中,常见问题是:

  1. 超出模型上下文窗口;
  2. 文档之间缺少连贯性;
  3. 关键信息被大量噪声淹没;
  4. Token 成本和响应延迟快速上升。

6. Refine:让答案逐轮迭代

Refine 不一次性处理所有知识块,而是先根据第一个知识块生成初始答案,再结合后续知识块不断修正和补充。

问题 + 知识块 1 → 答案 1 答案 1 + 知识块 2 → 答案 2 答案 2 + 知识块 3 → 答案 3 ↓ 最终答案

它适合答案质量优先、知识块存在顺序关系的场景;缺点是串行执行较慢,而且前序错误可能被带入后续步骤。

7. 多文档 Refine:跨文档持续补全

当参考资料来自多份文档时,可以把文档逐个或分批送入模型:新文档包含补充信息时扩展答案,包含冲突信息时修正答案,没有新增价值时保留原答案。

工程实现中要特别处理:

  • 文档优先级与处理顺序;
  • 重复内容的去重;
  • 冲突事实的来源与时间;
  • 中间答案过长时的压缩策略。

8. Tree Summarize:并行处理,分层汇总

Tree Summarize 采用“分而治之”的方式:先并行总结多个文本块,再逐层合并中间结果,最终得到答案。

Chunk 1 ─┐ Chunk 2 ─┴→ 摘要 A ─┐ ├→ 最终答案 Chunk 3 ─┬→ 摘要 B ─┘ Chunk 4 ─┘
模式优点局限
Stuff一次调用、速度快、连贯性好容易超过上下文窗口
Refine可处理长文档,答案可持续修正串行、慢、成本高,可能累积错误
Tree Summarize可并行,适合超长文档层级更复杂,底层细节可能在汇总中丢失

五、查询与数据优化

9. 改写提问:把“用户语言”转成“检索语言”

用户输入常常口语化、指代不清或缺少关键词。查询改写需要在不改变原始意图的前提下,对问题进行补全、规范化或扩展。

常见方式包括:

  • 补全多轮对话中的指代,例如把“那里有什么景点”改写为“北京有哪些景点”;
  • 生成多个语义等价查询,提高召回覆盖;
  • 提取实体、时间、产品名和业务术语;
  • 将复杂问题拆成可检索的短查询;
  • 对查询做拼写纠错和同义词扩展。

查询改写的风险是“改得太多”,导致用户原始意图发生漂移,因此应保留原查询,并对改写结果设置数量与长度限制。

10. 合理利用元数据:先过滤,再搜索

元数据是“描述数据的数据”,例如:

department: finance document_type: policy publish_date: 2026-09-01 version: v3 language: zh-CN permission_level: internal

当用户问“财务部 2026 年最新报销制度”时,可以先使用部门、时间、文档类型等字段过滤,再在较小范围内进行向量检索。这样既提高准确率,也能降低延迟与计算成本。

元数据还可以用于:

  • 权限隔离,避免召回用户无权访问的内容;
  • 版本控制,优先使用最新有效文档;
  • 来源追踪,让答案可以引用原始资料;
  • 业务路由,将问题发送到对应知识库或检索器。

六、推荐的工程化优化顺序

不要一次堆叠全部策略,建议按问题定位逐步优化:

  1. 建立评估集:收集真实问题、标准答案与相关文档;
  2. 确认是否召回正确文档:若没有,优先调整切分、Embedding、查询改写和多路召回;
  3. 确认正确文档是否排在前面:若靠后,引入融合排序与 Rerank;
  4. 确认上下文是否完整:若片段太碎,使用摘要检索、句子窗口或父子文档;
  5. 确认模型是否正确利用上下文:若召回正确但回答错误,优化 Prompt 与生成策略;
  6. 最后优化性能:缓存、并行、批处理、降级与超时控制。

一次只修改一个变量,并记录 Recall、Precision、答案忠实度、延迟和 Token 成本,否则很难判断究竟是哪项改动产生了效果。

七、小结

RAG 优化不是“更换一个更强的模型”就能解决的问题,而是一项贯穿数据、检索、排序、上下文组织和生成的系统工程。

  • Small-to-Big兼顾检索精度与上下文完整性;
  • 多路召回负责扩大覆盖面,Rerank负责提高最终精度;
  • Refine 与 Tree Summarize解决多文档和超长上下文的组织问题;
  • 查询改写与元数据过滤让搜索更贴近真实业务约束。

真正有效的方案不是把所有技巧全部打开,而是先通过评估定位瓶颈,再选择成本与收益最合适的策略组合。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 4:36:49

【行业干货】珠三角工厂、酒楼废旧电缆拆除回收处置经验参考

在珠三角区域,珠海、中山、江门、佛山、东莞、广州等地分布大量工厂、酒楼餐饮场所。厂房搬迁、酒楼翻新停业、配电系统升级改造时,常会产生大量废旧电缆,包含动力电缆、控制电缆、配电柜内线缆等。电缆拆除属于带电相关施工项目,…

作者头像 李华
网站建设 2026/9/28 4:36:39

学习开源项目时我们应该画哪些图?

学习开源项目时我们应该画哪些图? 大家好,我是不会喷火的小火龙。 刚开始深入看开源项目的时候,我经历过两个极端。 一个是纯靠肉眼硬看。连着翻了三天,几万行代码从头看到尾,自以为搞懂了,合上电脑脑子里依…

作者头像 李华
网站建设 2026/9/28 4:36:18

蓝牙AOA生态抱团出海:避开内卷,同道者共拓海外定位新蓝海

蓝牙AOA生态抱团出海:避开内卷,同道者共拓海外定位新蓝海 核芯物联 核芯物联科技 2026年9月27日 08:00 上海 ,时长01:36 软件开发解决方案开发智能终端开发的伙伴们加入核芯蓝牙AOA蓝牙AOA生态抱团出海:避开内卷,同道…

作者头像 李华
网站建设 2026/9/28 4:35:38

切角包膜机采购决策清单:从盒型分析到参数验证的10个核查项

背景 采购切角包膜机容易陷入“比价格、比参数”的误区。真正决定使用效果的,是需求侧和供给侧的匹配程度。先梳理自己的盒型、产量、换型频率,再去验证厂家的精度、良品率、售后数据。技术分析 把采购决策拆成“需求侧”和“供给侧”两列。 需求侧核查项…

作者头像 李华
网站建设 2026/9/28 4:34:49

Bao微内核在RISC-V商用SoC BPI-SM10上的移植实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华