RAG 概述
RAG(Retrieval-Augmented Generation,检索增强生成)是把外部知识库接入 LLM 生成流程的技术,2020 年由 Lewis 等人提出。核心思想一句话:模型不靠记忆回答,先查资料再回答,相当于开卷考试。
为什么需要 RAG
LLM 的三个天生短板:
- 幻觉。 模型是概率生成器,不知道的事情会一本正经地编。RAG 用检索到的真实文档约束生成,答案有据可依
- 知识过期。 参数知识有截止日期,问今天的股价、最新的政策,模型只能按旧数据答。RAG 知识库可以分钟级更新
- 私有数据进不去。 企业文档、合同、内部手册不能写进模型权重(训练成本高、无法删除、有泄露风险)。RAG 把知识放在模型之外,按需注入
附带收益:可溯源。每个答案都能指出来自哪篇文档的哪个片段,出错能定位到具体知识条,这是企业场景的硬需求。
三阶段架构
RAG 三阶段架构
- 索引(Indexing):离线完成。原始文档解析成纯文本,切成适合检索的块(chunk),用嵌入模型转成向量,存入向量数据库
- 检索(Retrieval):在线完成。用户查询用同一个嵌入模型向量化,在向量库里做相似度搜索,取最相关的 Top-K 个块
- 生成(Generation):在线完成。把原始问题和检索到的片段拼进 Prompt,LLM 生成回答,回答基于检索内容而非模型记忆
索引是离线的,检索和生成是在线的,每次请求的延迟主要花在后两段。
与相邻方案的定位
| 方案 | 比喻 | 特点 |
|---|---|---|
| RAG | 开卷考试,按需查书 | 知识可更新、可溯源,检索质量决定上限 |
| 长上下文 | 把整本书搬进考场 | 实现简单,但塞满窗口注意力稀释、成本高 |
| 微调 | 背书进脑子 | 行为风格深度定制,但知识更新慢、不可溯源 |
三者不是替代关系。长上下文适合单次任务需要完整文档的场景;RAG 适合知识库大、频繁更新的场景;微调解决的是“怎么说”,RAG 解决的是“说什么”。
面试追问
- RAG 解决什么问题? 幻觉、知识过期、私有数据接入、可溯源。模型不靠记忆回答,先检索再生成
- 为什么不全塞进长上下文? 塞满窗口触发上下文衰减和 Lost in the Middle,注意力稀释,成本随 token 线性涨。RAG 按需注入,窗口始终只装相关内容
- 三阶段各做什么? 索引(解析、分块、向量化、入库,离线)、检索(查询向量化、相似度 Top-K,在线)、生成(拼接 Prompt、LLM 回答,在线)
- 检索质量为什么是上限? 生成层只是整理检索到的内容,没检索到的东西 LLM 变不出来。调优的主战场永远是检索层,不是换更强的模型
- RAG 和微调能一起用吗? 能,且是生产常态。微调让模型学会输出格式和领域语言,RAG 提供最新事实