RAG 从诞生到今天:一个检索增强生成的演进故事
RAG 从诞生到今天:一个检索增强生成的演进故事
目录
- 引言
- RAG 是怎么诞生的?
- 第一波:2019 年的 kNN-LM
- 第二波:DPR(Dense Passage Retriever)的提出
- Lewis 等人的贡献
- RAG 是怎么演化的?
- 第一代:Naive RAG(2020-2021)——“先检索,再生成”
- 第二代:Advanced RAG(2022-2023)——“检索前先想清楚,检索后再筛选”
- 第三代:Modular RAG(2023-2024)——“各环节解耦,自由编排”
- 第四代:Agentic RAG(2024-至今)——“让系统自己决定怎么做”
- RAG 真正解决了什么问题?
- 1. 知识时效性
- 2. 幻觉抑制
- 3. 领域知识接入
- 4. 可解释性与溯源
- RAG 还没解决的问题?
- 检索质量是最大的瓶颈
- 幻觉没有被消灭,只是换了形式
- 评估一团乱
- 工程复杂度被低估
- 隐私和安全
- 未来会往哪里走?
- Agentic RAG 会继续深化
- 多模态 RAG
- Graph RAG 的实用化
- 检索效率的提升
- 评估体系的收敛
- 我现在的理解
- 如果你也在入门
引言
2023 年 ChatGPT 爆火之后,"用 RAG 给大模型接上外部知识库"几乎成了每个 AI 应用的标准动作。一时间好像人人都知道 RAG
是什么——把文档切成块,灌进向量数据库,用户提问时检索出相关片段塞进prompt,让模型读着回答。
但认真去想,RAG 这个概念到底是怎么来的?它经历了哪些阶段?它真的解决了幻觉问题吗?还有哪些它搞不定的事?
我最近花了些时间系统梳理了一遍 RAG 的发展脉络。这篇文章就是我目前的阶段性理解。
RAG 是怎么诞生的?
RAG 的诞生不是一次性事件。它有一个明确的"学术出生日期"——202年 Meta AI 的 Lewis 等人在 NeurIPS
上发表了《Retrieval-Augmented Generation for Knowledge-Intensive NLP
Tasks》,第一次把"检索增强生成"作为一个完整框架提出来。
但在这之前,已经有两波关键铺垫。
第一波:2019 年的 kNN-LM。 Khandelwal 等人提出了一个直觉很强的想法——语言模型预测下一个token
的时候,不光看自己的参数,还可以去训练集里找相似的上下文来"参考"。这个工作第一次证明,检索能直接提升语言模型的质量。它
的局限是检索的是训练数据本身,不是外部知识。
第二波:DPR(Dense Passage Retriever)的提出。 传统的检索靠 BM25
这类稀疏方法做关键词匹配,语义上"猫坐在垫子上"和"一只猫咪趴在毯子表面"在 BM25 眼里可能毫无关系。DPR
用双编码器把问题和文档映射到同一个语义空间,让检索真正能理解"意思"而不只是"字面"。
Lewis 等人的贡献在于把这两条线——DP的密集检索 + BART 的 seq2seq
生成——缝合成了一个端到端可训练的系统。他们当时提了两种模式:RAG-Sequence(用同一批检索到的文档生成整段回答)和
RAG-Token(每生成一个 token
都可以动态换一批文档)。这个区分今天看可能有些学术化,但"检索-生成"协同工作的基本范式就此确立。
简单说:RAG 的诞生 = 密集检索的成熟 + seq2seq 生成模型的可用 +
知识密集型任务对"外部记忆"的刚需。三者碰在一起,水到渠成。
RAG 是怎么演化的?
从 2020 年到现在,我理解 RAG 大致走了四步:
第一代:Naive RAG(2020-2021)——“先检索,再生成”
就是最朴素的三步:建索引 →检索 →生成。检索方式以 BM25
稀疏检索为主,知识库是静态的,召回率不高。但它证明了一个重要的事情:给模型"开卷考试"比"闭卷考试"效果好得多。
第二代:Advanced RAG(2022-2023)——“检索前先想清楚,检索后再筛选”
这代的核心变化是增加了预检索优化和后检索优化。预检索阶段做查询改写、查询扩展——把用户那个写得不太好的问题翻译成检索系统
能理解的形式。后检索阶段做 rerank,用 Cross-Encoder 对召回的文档重新排序,把真正相关的挑出来。同时,混合检索(BM25 +
向量搜索)成为标配。
第三代:Modular RAG(2023-2024)——“各环节解耦,自由编排”
这一代的关键转变是思路上的:不再把 RAG 看作一条固定流水线,而是把索引、检索、重排、融合、生成等每个环节抽象成独立的功
能模块。不同的场景可以自由组合和替换模块。这为工程落地提供了真正的灵活性。
第四代:Agentic RAG(2024-至今)——“让系统自己决定怎么做”
这是当前最热的方向。核心理念是:检索不该是一次性行为,而应该由 Agent
动态决策——什么时候该检索、检索什么、检索结果好不好、要不要换个方向再检索一次。微软的GraphRAG 在 2024
年开源,把知识图谱引入 RAG;Self-RAG、Corrective RAG 等工作让模型具备自反思能力。RAG
从一个"管道"变成了一个"决策系统"。
RAG 真正解决了什么问题?
我觉得 RAG 最核心的价值就一个:用最小的成本,让大模型能调用"它不知道的东西"。
展开来说:
- 知识时效性。 大模型的训练有截止日期。RAG 让它能访问最新文档,不再"活在过去"。
- 幻觉抑制。 不是消除幻觉,但让模型有据可依之后,幻觉的概率和严重程度都显著降低了。
- 领域知识接入。 企业内部的私有文档、专业领域的知识库,不需要微调模型就能用。这对数据安全敏感的行业是刚需。
- 可解释性与溯源。 纯生成模型回答"为什么这么说"时只能胡诌。RAG 可以指回原始文档段落,让答案有据可查。
RAG 还没解决的问题?
诚实地说,RAG 远不是银弹。我目前看到的主要瓶颈有这几个:
检索质量是最大的瓶颈。 整个 RAG 流程超过 60% 的延迟花在检索上,而检索的精度直接影响最终回答质量。语义不对齐导致无关文
档被召回、关键信息被遗漏的情况比比皆是。还有一个叫"Lost in the Middle"的现象——LLM
倾向于关注文档开头和结尾,中间的关键信息反而被忽略。
幻觉没有被消灭,只是换了形式。 即使检索到了正确文档,模型仍可能"不理睬"检索结果,固执地用自己的参数化知识回答。内部先
验和外部证据之间的"拉扯"是更深层的问题。
评估一团乱。 每篇论文用不同的数据集、不同的指标。该衡量检索准确性还是生成流畅性?事实一致性还是回答延迟?没有统一标准
,导致跨研究对比非常困难。
工程复杂度被低估。 Chunk
大小怎么选?多跳推理怎么做查询分解?检索库大了延迟怎么控?这些问题没有通用答案,每个场景都要调参试错。
隐私和安全。 企业部署 RAG 意味着外部知识库和 LLM
之间需要频繁交互,数据隔离、对抗性攻击(恶意构造文档诱导模型输出危险内容)都是真实风险。
未来会往哪里走?
几个方向我觉得值得关注:
Agentic RAG 会继续深化。 单 Agent 到多 Agent 协作是明显趋势——路由Agent 判断问题类型,检索 Agent 执行搜索,验证 Agent
检查结果可信度。这种分工协作的模式能让 RAG 处理远比现在复杂的查询。
多模态 RAG。 不只是文本。VideoRAG、ColPali(用视觉模型直接理解文档图像)、图文混合检索都在快速发展。未来 RAG
的知识来源将包括视频、扫描件、图表、音频。
Graph RAG 的实用化。 知识图谱补上了向量检索的一个短板——关系推理。微软的GraphRAG
开源是个重要节点,但要真正在工业界普及,成本和易用性还有很长的路。
检索效率的提升。 语义缓存(如 GPTCache)、上下文压缩(xRAG 把上下文压到一个 token)、LongLLMLingua 等加速方法会让 RAG
越来越快、越来越便宜。
评估体系的收敛。 RAGAS、ARES 等框架正在往标准化方向走,中文场景也有了 CRUD-RAG
基准。评价维度会逐步收敛到几个核心指标上。
我现在的理解
RAG 的本质是一个关于"记忆"的设计决策:大模型的参数是长期记忆,检索到的文档是工作记忆。RAG
做的事,就是让模型在推理时能把"刚读到的东西"和"已经知道的东西"配合起来用。
它不是一个完美的方案,但可能是现阶段性价比最高的方案。微调贵、慢、不可解释;纯靠 prompt
又受限于上下文窗口和模型自身知识。RAG 在成本、效果、灵活性之间找到了一个比较好的平衡点。
最关键的是:RAG 好不好用,检索质量决定了 80%。 很多人在调生成策略上花太多时间,其实先把检索——chunkin策略、embedding
模型、rerank 机制——调好,效果提升会明显得多。
如果你也在入门
建议先搞懂三个东西:向量检索的基本原理(为什么能搜到语义相似的文本)、Chunking
对结果的影响(切太大噪声多,切太小语义不完整)、以及 Rerank 为什么几乎是必选项(召回和精排的分工)。
这三个概念打通了,RAG 的骨架你就抓住了。
