RAG 简要回顾
2025年10月7日 08:00
2025 年大家都忙着开发 agent, 这里简要回顾一下 RAG.
RAG 基本操作
- Offline: 文件解析, 文本切片, embedding (以前通常用 bge)
- 对 query embedding 后做召回 (通常就算个 cos, chunk 量大时用向量数据库牺牲一定精度加速召回)
- Rerank (通常是 bge-reranker)
这套早在 2023 年就玩烂了.
- 基本的 “进阶” 操作可见 NisaarAgharia/Advanced_RAG, 以及 NirDiamant/RAG_Techniques
- 这是一篇很好的综述: 【同济大学 王昊奋】Agentic RAG 时代
- 另外可以参考一些 字节跳动 RAG 实践手册 将 RAG 分为数据层, 索引层, 检索层, 生成层.
Advanced RAG
Offline
文本切片优化
- 按照语义切分: 想法是, 先得到句子 embedding, 若相邻句子 embedding 距离较大 (比如可以统计分位数取阈值), 则认为语义差别大, 在这里切分.
- 按结构切分: 比如根据 markdown 的标题层级, 图表, 代码等, 保证有意义的结构不被切开. 这里可以把 chunk 所属的标题放在其 metadata 里或者直接拼在 chunk 开头; 或者用 LLM 总结 chunk 生成一个 heading 拼上去.
- 还有很多雕花级别的操作, 可以参考这些 2023 年的 RAG 比赛, B 站上也有答辩视频.
- 阿里天池: 2023 全球智能汽车 AI 挑战赛——赛道一:AI 大模型检索问答
- 2023 博金大模型挑战赛. 这个挑战赛后来开了个学习赛, 我也打到了第一 (直到最近才有一个人超了我一点分).
Embedding 优化
给每个 chunk 生成更多 “维度” 的 embedding. 比如对当前 chunk 做个总结得到 embedding, 或者把当前 chunk 对应的 window 更大的 chunk 或者段落以及章节层级拿来做 embedding (甚至是层次化的 embedding 以及召回). 命中 embedding 之后可以连带地在当前 chunk 前后扩展一定 window 或者段落带出更完整连贯的上下文.
Online
Query 处理
- Query 改写, 可参考 A Survey of Query Optimization in Large Language Models

- Query 分类 (意图识别/路由等)
- 生成更多维度 embedding: 比如 HyDE (Hypothetical Document Embedding), 根据 query 生成伪文档再去召回, 把 qa 匹配变成 aa 匹配. 类似地, 离线时可以对每个 chunk 生成可能的 query, 把 qa 匹配变成 qq 匹配.
拼接上下文
- 扩大窗口 (之前讲过了, 带出当前 chunk 对应的 window 更大的 chunk)
- 顺序 (如果 chunk 来自同一篇文档, 按文中出现的顺序排序, 离得近可以补充一些 gap 等让段落更连贯)
- 根据层级 (之前讲过了, 带出当前 chunk 对应的章节)
- 压缩...
剩余内容已隐藏
查看完整文章以阅读更多