一句话定义
RAG 是在生成回答之前,先从外部知识库检索相关片段,把这些片段作为上下文交给模型,让回答基于可追溯的资料,而不是只依赖模型参数里的记忆。
典型流程
- 切分文档:把长文档切成大小合适的 chunk,并保留标题、来源等元数据。
- 建立索引:用嵌入模型把 chunk 转成向量,写入向量数据库或混合检索索引。
- 检索:把用户问题也转成向量,召回 top-k 相关片段,必要时再做关键词检索和重排序。
- 组装上下文:把片段、来源和问题一起放进 prompt。
- 生成回答:模型基于上下文作答,并尽量给出引用。
关键判断
RAG 的上限往往由检索质量决定,而不是由生成模型单独决定。
常见变体
Naive RAG
固定切分 + 向量检索 + 直接拼接,链路短,适合做 baseline。
Advanced RAG
加入查询改写、混合检索、重排、上下文压缩等步骤,按失败点逐段优化。
Multi-modal RAG
检索文本、图像、表格等多模态片段,再交给多模态模型生成。
Retrieval-based LM
检索器作为模型的一部分,训练时联合/分阶段学习检索与生成;与“后挂 RAG”不同。
RAG 和微调怎么选
- 知识更新频繁、需要引用来源:优先 RAG。改索引即可更新知识,不必重新训练。
- 要改变模型的行为、风格或固定任务格式:优先 SFT。
- 两者可以组合:用 SFT 教会模型如何使用检索结果,用 RAG 提供实时事实。
常见失败模式
- 检索没召回:问题改写、chunk 粒度、嵌入模型不匹配都可能导致关键资料缺席。
- 上下文过载:塞入太多片段会稀释重点,甚至让模型忽略真正相关的证据。
- 切分破坏语义:把一段完整论证切成碎片,检索到的内容看起来相关但无法回答原问题。
- 索引过期:文档更新后没有重建索引,回答仍基于旧资料。
- 没有引用约束:模型可能把检索片段和自己的记忆混在一起,难以追溯。
评估看什么
看检索命中率、上下文相关性、答案忠实度和引用准确率;不要只给最终回答打分。
相关概念
- Transformer:嵌入模型和生成模型通常都基于 Transformer 架构。
- SFT:让模型学会遵循检索到的上下文,而不是凭记忆补全。