什么是 RAG?检索增强生成的原理与边界
发布于 2026-07-04 · 更新于 2026-07-04
RAG,即检索增强生成(Retrieval-Augmented Generation, RAG),是这样一种技术:AI 系统先从一个外部存储中检索出相关的文档或事实,再把这些检索到的段落放到模型面前,据此生成回答。模型不再只依赖训练时吸收的内容,而是先读一小包临时调取的材料,再据此撰写回复。这个术语出自 Patrick Lewis 及其同事 2020 年的论文《面向知识密集型 NLP 任务的检索增强生成》(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks)。
其核心思路比这个缩写看上去要好把握:先查一下,再根据查到的内容作答。RAG 就是把这个习惯做成一套系统,围绕一个语言模型接线搭建起来。
模型为何需要检索
语言模型带有两类局限,检索正是为绕开它们而设计的。
其一,训练知识是冻结的。模型在被构建过程中吸收的一切,都在你出现之前就已固定,且带有一个截止日期。它不会知道上周发生了什么,也从未见过你的私有文档、你的笔记或你账户的具体信息。它凭自身无从知晓这些,因为它们本就不在它所学习的文本之内。
其二,工作记忆是有限的。每一轮,模型只读入一个固定上限之内的内容,这个上限称为上下文窗口。你无法把整个公司知识库、一年的邮件或一整套手册倒进这个窗口——大部分放不下,硬塞满也自有代价。于是实际的问题变成:在所有可能相关的材料里,此刻究竟该由哪几段来占据模型面前那点有限空间?
检索恰好回答了这个问题。与其寄望模型早已记住了正确的事实,或试图把一切都塞进窗口,RAG 系统会取出最可能相关的那几段,只把它们递交给模型。这与「助手为何会忘记长对话里靠前的内容」是同一条底层约束:窗口很小,因此放进去的内容必须选得好。
三个步骤:存储、检索、生成
一个 RAG 系统分三个动作运行。一旦把它们分开来看,整套技术就不再神秘。
存储。 首先,源材料被拆成一口大小的小块,这一步通常称为分块(chunking)。一份长手册会变成数百个短段落,而非一整堵文字墙,因为当单元小而自成一体时,检索的效果更好。每一块随后被转换成一个嵌入(embedding):一串数字,把这段话的含义表示为空间中的一个位置。有用的直觉是——含义被映射成坐标,因此意思相近的段落会落在彼此附近,哪怕它们并不共用任何相同的词。「怎么把钱要回来」和「退款政策」最终成了近邻。所有这些坐标被存入一个为快速查找而建的存储中。
检索。 当一个问题进来时,它以同样的方式被嵌入,转成同一空间里的一个点。系统随后寻找存储中离这个点最近的那些段落,即最近邻搜索(nearest-neighbor search)。「近」在此代表「相关」:离问题最近的段落,最可能回答它。系统取出排在最前的几个匹配。
生成。 这些检索到的段落被粘贴进提示词,直接放在模型面前,通常还附一句大意为「根据以下材料作答」的指令。模型于是一边看着这段新鲜、具体的文字,一边撰写回复。它不是在凭记忆背诵,而是在读一小包为这个具体问题临时组装的材料,并据此作答。
记忆功能在底层就是这样运作的
这套三步结构并不局限于文档检索。粗略地说,它正是整个行业里持久记忆功能通常的运作方式。
一项「记住关于你的事实」的记忆功能,就机制而言,是一套指向你自己的检索系统。当对话中冒出某件值得留存的信息,它被保存为一条小笔记。这条笔记被嵌入——同样是含义映射成坐标的那一步——归档进一个个人存储。此后,在一段新对话里,当前话题被嵌入,用来检索出离它最近的那几条已存笔记,再在模型回复之前把它们插入上下文。保存事实、将其嵌入、在恰当的时机把它们检索回上下文:这就是一项记忆功能,而它同时也就是 RAG。
这正是这两个概念如此容易被混为一谈的原因,也是理解其一便能厘清其二的原因。模型在会话之间并不以任何人类意义上的方式「记得」你。那种像是记忆的感觉,其实是模型开口前悄然运行的一个检索步骤,把几条相关的笔记重新拉回视野。
RAG 能解决什么,不能解决什么
检索很强大,但并非魔法,而这两者之间的界线值得明白地划出来。
RAG 解决若干真实的问题。它处理时效性——事实一旦变化,存储可以立刻更新,而无需重新训练模型。它引入模型从未受训过的私有数据,比如你自己的文档或账户细节。它支持来源标注,因为系统知道自己检索了哪些段落,可以引用或链接它们。它还能高效使用上下文窗口,用为这个问题挑选的几段占据那点有限空间,而非堆入一大摞松散相关的文字。
RAG 不能解决的部分同样重要。检索可能漏检:如果那段正确材料的措辞,在含义空间里恰好落得离问题很远,它就可能永远不被取出,而模型在毫不知情的情况下略过它作答。而且检索的好坏,取决于其背后的存储。如果某条已存事实本身就错误或过时,RAG 照样会把它检索出来,模型也会自信地复述它,让一个陈旧的错误获得一个新鲜答案般的十足权威。垃圾进,垃圾出:检索忠实地呈现被保存下来的一切,连同其中的错误。这恰恰说明,一个你能查看、能编辑的存储为何重要。当你能看见系统保存了哪些关于你的内容、并订正或移除其中错误的条目时,你是在检索的源头修正它,而不是在与它的症状争辩。
RAG、微调与长上下文之比较
RAG 是把知识送进模型回答的三种常见途径之一,它们各自适合不同的活。
**微调(fine-tuning)**通过在新材料上继续训练,来调整模型自身的权重。它适合教授一种持久的技能、风格或格式——那类你希望永久内建的东西。它不适合频繁变动的事实,也不适合专属于单个用户的信息,因为每次更新都意味着重新训练,而且知识会弥散进模型内部,而非以一份可编辑、可查看的记录形式留存。
**长上下文(long context)**跳过检索,直接把相关材料——有时是一大批——粘贴进窗口。当材料小到放得下、且你手头就有时,它简单而有效。但大窗口有其上限:模型对埋在长输入中间的信息关注得不那么可靠,这一效应记录于 2023 年的论文《中间迷失:语言模型如何使用长上下文》(Lost in the Middle: How Language Models Use Long Contexts)。当真正要紧的只有几段时,把一切都倒进去也是一种浪费。
RAG 处在两者之间。知识存活于模型之外的一个存储里,可以自由更新与审计,而每个问题只把相关的那几段放进窗口。它比另外两种方式都更适合变动的事实、私有数据与大体量的材料,代价是多出一个检索步骤——它必须找对段落,才对得起自己的位置。
常见问题
RAG 和记忆是一回事吗? 二者密切相关,但并不等同。RAG 是「在生成之前,把外部材料检索进提示词」这一通用技术。记忆功能是该技术的一种应用,专门针对你:它保存并检索关于你的事实。所有这类记忆功能都是检索系统,但 RAG 也驱动着与个人记忆全无关系的东西,比如文档检索和基于一份手册的问答。
RAG 能杜绝幻觉吗? 它能减少幻觉,但无法根除。通过把真实、相关的段落摆到模型面前,RAG 给了它可依凭的具体材料,而非临场编造,从而抑制了凭空生成的答案。但如果检索漏掉了正确的段落,或者已存的事实本身就是错的,模型仍可能给出一个自信的错误——如今还平添一层「有据可依」的假象。
作为用户,我需要了解 RAG 吗? 若只是使用一项记忆功能,并不需要。但知道「记忆」在底层通常就是检索,能解释它的行为:它为何有时想不起本该记得的事实(检索漏了)、一个可编辑、可查看的存储为何重要(你修的是源头,不是症状),以及为何保持所存内容准确,会直接改善助手告诉你的东西。