welclaiAI·TREND·DIGEST
研究

从第一性原理理解检索增强生成(RAG)

RAG 常被讲成一堆工具的堆叠。把那些剥掉,它就是一个简单的想法:让模型在回答之前先读到正确的材料。下面讲清楚它究竟如何运作。

research2026-06-12 14:40 KST·主编·7 分钟

检索增强生成通常被作为一条产品流水线来介绍:一个嵌入模型、一个向量数据库、一个检索器、一个生成器。这个框架是本末倒置的。RAG 是一个想法,而那些工具只是实现它的一种方式。这个想法是:**在模型回答之前,把它据以回答所需的具体材料给它。**其余的一切都是工程。

这个术语来自 Lewis 及其同事 2020 年的一篇论文,该论文把一个检索器和一个生成器结合起来,让模型可以拉入外部段落,而不是仅仅依赖其权重所记住的东西。当时的动机就是如今的动机,而从第一性原理理解它,会比任何一种特定的工具都活得更久。

RAG 解决的问题

一个语言模型只知道它的训练数据里有什么,冻结在某个时间点上,被揉进了它的权重里。这造成了两个限制:

  • **它无法知道你的私有或近期信息。**你公司的文档、上周的发布说明、某个特定 PDF 的内容——这些都不在模型里。
  • **从权重里的回忆是有损的。**即便对那些"在"模型里的东西,确切的细节也可能出错。模型是在从一段压缩的记忆里重建,而不是去查阅任何东西。

RAG 通过把问题从"模型记得什么?"改成"我们此刻能在模型面前摆上什么?",来同时解决这两点。那个转变——从记忆到证据——就是全部的要点。

三步走的机制

在其核心,RAG 是三个动作:

  1. **索引。**把你的源材料拆成段落并存储起来,好让它们能被搜索。大多数系统通过把每个段落转换成一个嵌入来做到这一点——一个把相近含义放在彼此附近的向量——并存储那些向量。
  2. **检索。**当一个问题进来时,找出与它最相关的段落。有了嵌入,这意味着把问题变成一个向量,并取回最近的那些段落。
  3. **生成。**把检索到的段落连同问题一起放进模型的上下文,并要求它使用那些材料来回答。

那就是整段弧线。模型仍然写出答案,但现在它是在从被提供的证据中阅读,而不是从记忆中回忆。RAG 中一切精巧的东西,都是对这三步之一的精炼。

为什么用嵌入,以及为什么它们不是魔法

嵌入让你能按含义、而非确切的字词来搜索,所以一个关于"休假"的问题,即便没有共同的关键词,也能检索到一段关于"年假政策"的段落。这确实有用,也正是语义搜索支撑起大多数 RAG 系统的原因。但有两点诚实的告诫:

  • **语义搜索不是精确搜索。**对于精确的标识符——一个产品代码、一个特定的条款编号、一个错误字符串——关键词搜索往往胜过嵌入。许多强大的系统把两者结合起来,这种模式通常被称为混合搜索。
  • **检索质量为下游的一切设定上限。**如果第 2 步返回了错误的段落,模型就会从错误的材料中回答,而且听起来一样自信。这是关于 RAG 最重要的一个事实,也是演示所隐藏的那一个。

分块:决定质量、却毫不光鲜的那个决定

你如何把文档切成段落,悄无声息地决定了检索效果有多好。太长的块会稀释相关性——那个有用的句子被埋在无关的句子之中,而嵌入变成了过多想法的平均值。太短的块则丢失了让它们有意义的上下文。靠得住的建议是:沿着自然边界分块——章节、段落、逻辑单元——而不是在任意的字符数处切割。好的分块是枯燥的活儿,而它的回报,比换上一个更花哨的模型要大。

好的 RAG 实际需要什么

那个朴素的版本——把一切嵌入、取回最相关的几个、塞进去——在演示里管用,在生产里令人失望。让它变得真正可用的那些部件:

  • 明智的分块,如上所述。
  • **够用、但不过多的上下文。**检索更多段落并不总是更好。无关的段落会分散模型的注意力,并把有用的挤出注意力之外。存在一个甜蜜点,而它通常比人们预期的要小。
  • **接地指令。**告诉模型只从所提供的材料中回答,并在材料不包含答案时清楚地说出来。正是这一点,把检索变成可信赖的答案,而不是自信的猜测。
  • **展示来源。**返回用到了哪些段落,能让一个人去核实答案——这对任何高风险的事情都不可或缺,并且在其他任何地方都是一个无声的信任构建者。

如何判断你的 RAG 好不好

由于大多数失败都是检索失败,请把检索与生成分开评估。在真实范例上问两个问题:

  1. **正确的段落究竟被检索到了吗?**如果答案不在检索到的集合里,再巧妙的提示也救不了生成这一步。
  2. **给定正确的段落,模型是否忠实地使用了它?**如果检索很好、但答案飘走了,那么问题出在接地,而不是搜索。

这样把评估拆开,能告诉你该修哪一半。把它们搅在一起,只会告诉你"它错了",而那无从下手。

RAG 解决不了什么

RAG 把答案接地在被提供的文本上。它并不让一个模型推理得更好,也不保证真实——如果你的源文档是错的或过时的,答案就会以一模一样的口吻自信地错下去。它还增加了运动的部件:一个索引步骤、一个检索步骤,以及它们各自需要监控的失败模式。当答案必须反映特定的、变化的或私有的信息时,RAG 是正确的工具。当模型本就知道得够多、而你只是需要一段更好的提示时,它就是杀鸡用牛刀。

RAG 正在走向何方

RAG 的前沿,大多关于让检索更聪明:决定何时检索、分多趟检索、让模型发出它自己的搜索查询,以及在结果抵达生成器之前对它们重新排序。这些以同等的分量增加了能力与复杂度。在这一切之下,第一性原理的视角依然成立——它们全都是在模型回答之前,把更好的材料摆到它面前的方式。

总结

暂时忘掉那一堆产品。RAG 是一门纪律:**让模型在回答之前读到正确的材料。**嵌入和向量库是一种流行的实现,而不是其本质。把检索做对,用心分块,并指示模型保持接地,RAG 就把一个从记忆里猜的模型,变成一个从证据中答的模型——而且带着你可以核查的来源。

#rag#retrieval#embeddings#grounding