一句话定义
RAG(Retrieval-Augmented Generation,检索增强生成)在模型生成之前,先从外部知识源检索相关内容,把它们放进上下文,再让模型基于这些内容回答。
一句话概括:把「背下来」换成「查一下」。
为什么重要
它一次性回应了语言模型的三个硬伤:
| 问题 | RAG 的解法 |
|---|---|
| 知识有截止日期 | 检索到的资料永远是最新的 |
| 无法访问私有数据 | 把你的文档接进检索源 |
| 会幻觉 | 回答有出处,可核查 |
同时它比微调便宜得多:更新知识只需更新索引,不需要重新训练。
完整链路
- 切分:把文档切成语义完整的片段。
- 索引:用 embedding 把片段向量化并存储。
- 检索:把用户问题向量化,召回最相近的若干片段。
- 重排序:用更精细的模型对候选片段重新打分。这一步的收益常被低估。
- 组装:把片段按相关性排序后放进上下文。
- 生成:要求模型只基于给定资料回答,并标注来源。
- 兜底:资料不足时明确说「不知道」,而不是硬答。
决定效果的关键
多数 RAG 系统效果差,问题不在生成环节,而在检索环节。
- 切分质量 > 模型选择:块切得好,弱模型也能答对。
- 混合检索:向量检索 + 关键词检索(BM25),再融合结果。中文专有名词尤其需要。
- 重排序:召回 50 条,重排取前 5 条,效果通常显著优于直接取前 5 条。
- 查询改写:用户的问题往往不是好的检索词。先让模型改写成检索友好的形式。
- 引用可核查:要求输出标注来源片段,这是发现幻觉的主要手段。
什么时候不该用 RAG
- 知识量小(几十页以内):直接全部放进上下文更简单可靠。
- 需要的是技能而非知识:该用工具或 Skills。
- 需要改变模型的风格或格式习惯:该用微调。
常见误解
- 「上了 RAG 就不幻觉了」:检索到错误内容,模型会自信地复述错误。检索质量决定幻觉下限。
- 「RAG 已经过时,长上下文取代了它」:长上下文成本高且注意力会稀释。两者是配合关系,不是替代关系。
- 「把文档全丢进去就行」:无关内容会主动降低准确率。
延伸阅读
- Embeddings:检索的技术基础
- Context Engineering:检索之后的组装问题