构建 RAG:从文档分块到能够搜索的智能体

原标题Building RAG: from document chunks to agents that search

Diyi Yang 讲解索引、混合检索和重排序的工作原理,以及智能体为何需要检查搜索结果。

DYDiyi Yang讲者 · Stanford University
频道
Stanford Online
发布
2026年11月11日
视频
1:16:31
阅读
17 分钟
幻灯片
3
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

检索增强生成在模型需要时提供证据,包括模型权重中没有的私有或更新信息。斯坦福教授 Diyi Yang 介绍影响检索质量的关键选择:如何拆分文档、关键词搜索和语义搜索如何互补,以及重排序如何在速度与细致匹配之间取舍。她还展示了智能体式 RAG 如何决定是否搜索、改写查询并评估结果。检索错误、过期索引、相互矛盾的证据和提示注入仍可能导致整个流程失败。

  1. 1用检索证据支撑流畅回答,才能让答案可查证Yang 对比了凭猜测推荐答疑时间和依据排队记录作推荐。出现新事实时,可以更新索引,而不必重新训练模型权重。
  2. 2文本分块可能丢失检索所需的公司名称和日期上下文检索在索引每个文本块之前,先从完整文档中生成简短说明并加在块前。补充上下文会增加索引成本。
  3. 3近似向量搜索以部分召回率换取速度Yang 介绍分层 HNSW 图如何从稀疏的上层逐步进入更密集的下层,而不必扫描每个文档向量。
  4. 4关键词搜索和稠密检索遗漏的内容不同BM25 擅长匹配精确词项,稠密检索则可以找到近义表达。混合系统可以用倒数排名融合合并两种排序。
  5. 5ColBERT 将词元级交互推迟到评分阶段文档和查询的词元分别编码,因此文档表示可以预先计算。评分时,每个查询词元与最匹配的文档词元进行比较。
  6. 6智能体可以决定是否搜索、搜索什么以及何时停止Yang 对比了 Self-RAG 学到的自我反思、CRAG 的独立证据评估器,以及 Search-R1 学到的搜索循环。三者处理检索决策的方式各不相同。

要点建议

  1. 分别评估检索质量和回答质量,同时考察延迟、成本和失败案例。
  2. 当名称、日期等细节落在文本块之外时,为文本块保留其文档上下文。
  3. 同时需要精确标识符和近义表达时,结合关键词检索与语义检索。
  4. 当更好的匹配质量值得付出额外计算成本时,使用重排序或词元级交互。
  5. 将检索视为智能体的决策:是否搜索、搜索什么,以及何时证据足够。
  6. 检查整个流程中的过期索引、遗漏证据、来源冲突和提示注入。
全文

按章节阅读整理后的全文

只看原始文稿
01

评估智能体不能只看一次成功演示

Yang 要求学生选择自己关心的问题、准备数据并衡量失败。评估需要基线、多个案例和明确标准。

Diyi Yang 要求学生围绕自己关心的问题构建智能体。选择项目之前,先明确任务、研究问题、可用数据或 API、智能体框架和评估方法。选题可以涵盖检索、工具、记忆、安全和多智能体系统。

一次成功的演示是不够的。Yang 要求学生定义成功标准、数据来源和评分方式,然后在多个任务或用户上进行评估。方法可以包括按量表使用模型评分、人工评分和可行性检查;对比基线和失败分析同样重要。

建议的项目问题包括智能体成本和延迟、对新工具或界面的适应、抵抗提示注入的能力、工具误用、人机协作和奖励作弊。应用可以是把教学大纲转成日历的助手、研究发现工具,或针对特定代码库的编程智能体。

具体例子包括从教学大纲中提取截止日期、优化课程安排和发现研究论文。面向特定领域的编程智能体,以及对生成图表或产物的评估,也是可选项目。

确认数据、算力、智能体框架和评估方式确实可用。Yang 建议尽早开始、先获取数据,并提出定义清楚的问题。结果应该让读者学到东西,而不只是展示一个能运行的系统。

Yang 说,要尽早开始,在整个学期持续推进。项目应清楚说明问题和结果带来的认识,包括系统失败的情况。

02

检索为什么能让回答有证据支撑

检索可以向模型提供最新或私有资料,而不只依赖模型权重。最初的 RAG 架构结合了检索器和生成器。

检索增强生成(RAG)在模型需要时提供相关信息。Yang 围绕索引什么、如何搜索、流程在哪里出错,以及检索如何融入智能体展开这节课。

例如,问模型什么时候答疑最不拥挤,它可能自信地猜测周三。如果提供排队记录,模型则可以引用实际人数,推荐更清闲的周四场次。两个回答都可能流畅,但只有后者依据可查证的证据。

RAG 将知识视为需要时动态获取的信息,而不是要求模型记住一切。事实变化时,操作者可以更新文档索引,而不必改变模型权重。返回的来源也能让人核实答案。

早期开放域问答系统将检索器与阅读器分开。检索器从数百万篇维基百科文章中筛出少量候选;阅读器检查这些段落并提取答案。两个阶段都重要:阅读器无法使用从未送到面前的证据。

形式化地说,检索器从大型文档集合中选出与问题最相关的前 K 个段落。早期系统常用固定的 TF-IDF 检索器配合神经阅读理解模型;现代语言模型无需针对任务专门训练,也可以担任阅读器。

在最初的 RAG 设计中,查询编码器将问题映射为向量,再与文档索引中的向量比较。排名最高的文档作为生成器的条件,模型结合不同候选文档下的概率生成答案。

Yang 介绍说,最初的论文联合训练生成器和查询编码器,同时固定庞大的文档索引。这是原论文的架构,并不意味着每个现代应用都必须联合训练各组件。

这个过程可以拆成两部分:根据查询检索文档,再根据查询和文档生成答案。RAG-Sequence 用一个文档作为整个答案的条件;RAG-Token 则允许检索文档对不同生成词元的贡献发生变化。

RAG-Sequence 和 RAG-Token 在生成答案时使用检索段落的方式不同。前者计算似然时将整段序列与一个段落关联;后者可以在每个词元处以不同方式组合证据。

训练目标鼓励模型为正确答案分配更高概率。最初的稠密段落检索器使用两个独立的 BERT 编码器分别处理查询和文档,再用向量内积评分。

文档向量可以离线计算并存入索引。查询时,只需编码问题,再通过最大内积搜索找出候选文档。BART 等生成器接收问题和段落文本,逐个词元写出答案。

段落编码器和问题编码器彼此独立。文档集合的规模远大于当前问题流,因此离线编码段落是保持检索实用性的重要环节。

检索到的段落以文本形式提供给生成器。Yang 说,即使应用没有复现最初的训练流程,也可以通过提示词将同样的思路用于现代语言模型。

Yang 展示了早期问答结果,以及人工对事实性和具体程度的评估。她提醒,这些是历史结果,如今的模型得分更高;重点是检索内容可以让回答更有依据。

Yang 对比了早期神经阅读器和生成器的人类评估结果。检索证据有助于解释为什么回答可能更具体、更符合事实,但阅读器仍须正确使用证据。

RAG 系统已经变得更加模块化。检索前可以路由、改写或扩展查询;检索后可以合并、重排序或总结结果。更复杂的工作流可以反复检索和阅读,而不是只执行一次固定流程。

例如,改写查询可以让含糊的问题更容易搜索;重排序则在初次搜索后重新排列候选结果。这些模块可以组合成不同处理模式,没有唯一强制的流程。

一位学生询问,除了答案准确率,如何考虑速度、内存和成本。Yang 说,离线预处理文档表示可以减少查询时的工作量,而同时对查询和文档进行注意力计算的模型无法预先计算完整的查询—文档组合。

一位学生问前沿模型是否仍需要显式 RAG。Yang 说,对于企业私有数据库或模型训练数据之外的信息,RAG 仍然有用。一些产品已经支持通用网络搜索,但特定应用的数据可能仍需要自己的检索系统。

Yang 还回答了有关 BERT 的问题:它能说明最初的编码器架构,但领域已经发展,可以使用许多其他表示。检索原理并不依赖某一种历史编码器。

03

文档分块时如何建立索引并保留上下文

块大小和重叠程度会影响检索结果。上下文检索、延迟分块、树和图分别提供了保留更广泛上下文的方法。

建立索引首先要选择检索单元及其表示。上下文词嵌入可以区分金融机构 bank 和这个词的其他含义;句子和段落编码器表示更大的单元。多模态和图编码器也可以表示图像、音频、节点或关系。

表示对象不限于文本。Yang 举 CLIP 为例,说明如何将图像和文本表示放入同一空间;她也提到表示节点或节点关系的图编码器。

将单元转成嵌入向量后,系统需要余弦相似度或内积等相似度度量。分块同样重要:如果选定的文本单元没有包含某些上下文,嵌入无法将其找回来。

固定大小的文本块可能包含 100 到 500 个词元。块太小可能缺少上下文,块太大又可能把多个主题混进一个向量。相邻块重叠约 10% 至 20%,可以保留跨越边界的信息。

其他选择包括按句子、段落或标题拆分,添加元数据和摘要,或者用语言模型识别有意义的边界。这些方式会改变每个检索单元中可用的信息。

Yang 用课程评分举例说明这些影响,并提醒幻灯片上的截止日期并非当前信息。固定窗口、重叠窗口和按标题分块会让检索器获得同一来源的不同片段。

考虑一个关于 ACME 公司 2023 年第二季度营收增长的查询。正确段落可能给出了百分比,却只说“该公司”,因为名称和时间出现在前文。单独看这个文本块,关键词和向量搜索都更难匹配。

缺少上下文的收入文本块
幻灯片 1 / 3缺少上下文的收入文本块例子表明,一个段落可能遗漏匹配查询所需的公司名称和报告期;上下文检索会补充这些信息。

上下文检索要求语言模型阅读完整文档,为每个文本块生成简短的定位说明,并在建立索引之前将说明加在块前。补充后的文本既可以转成嵌入向量,也可以用 BM25 建立索引,让语义匹配和精确词项匹配都能利用缺失的上下文。

生成上下文意味着每个文本块都要额外调用一次模型。Yang 展示了报告中的例子:上下文嵌入让前 20 个结果的检索失败率从 5.7% 降至 3.7%,混合设置则从 5% 降至 2.9%。这些是所示评估中的结果,不能保证适用于所有语料。

上下文检索的提示词会同时给模型完整文档和选中的文本块,要求它简短说明该块在文档中的位置。生成的说明会加在原段落前,然后再建立索引。

延迟分块用另一种方式解决上下文丢失问题:嵌入模型先处理较长的完整文档,而不是分别处理各文本块。随后再将词元表示汇聚成块,让每个块向量携带更广泛的上下文信息。

Yang 展示的结果中,延迟分块在文本块很小时帮助尤其明显:孤立的小片段原本上下文很少,而较大文本块已经包含更多信息。收益取决于任务和文档设置。

RAPTOR 为答案分散在文档各处的问题构建层级结构。它先对文本块编码并分组、生成摘要,再对摘要编码,反复操作形成一棵树。检索时可以根据问题选择详细叶节点或较高层的摘要。

在树结构中,具体问题可以匹配叶节点,宽泛问题则可以匹配较高层的摘要。Yang 用灰姑娘故事的主题和结局举例,说明单个局部段落可能不包含完整答案。

GraphRAG 采用跨文档视角。建立索引时,模型提取实体和关系,将它们连成图并分成社区。社区摘要可用于回答宽泛问题,然后再合并相关社区的部分答案。

图方法从文本块中提取实体及其关系,再寻找所得网络中的社区。查询时,社区级摘要可以帮助综合分散在多个来源中的主题。

一位学生问,更丰富的结构是否会损害对非常具体问题的回答。Yang 解释说,上下文文本块、树和图分别解决范围逐渐扩大的信息需求,但复杂索引有成本。如果简单快速的方法能覆盖大多数问题,它仍有吸引力。

Yang 举例说,公众对某个话题的看法可能需要查阅十份文档,而不是寻找一个精确段落。更复杂的结构旨在回答这种更宽泛的问题,但会增加索引和处理成本。

如何选择图中的社区是一项设计选择:系统可以估计相关性,并汇总多个组的答案。Yang 说,所用模型需要具备一定能力,但不一定要达到前沿模型的规模;应比较质量、延迟和成本。

评估检索流程使用的语言模型时,Yang 建议同时比较检索质量、模型成本和速度。对于建立索引或生成摘要等步骤,能力足够的小模型可能是合理选择。

另一位学生问,错误是否会在流程中不断累积。Yang 认同错误检索可能破坏最终答案。反思和批判环节可以增加检查,但级联错误仍是实际问题。

精确向量搜索需要将查询与索引中的每个向量比较,在数百万文档规模下可能很昂贵。近似最近邻方法牺牲部分召回率来大幅提高速度。可用方法包括聚类和向量量化。

04

向量搜索,以及词面匹配和语义匹配之间的取舍

近似最近邻搜索以部分召回率换取速度。BM25 和稠密段落检索匹配不同类型的证据,可以组合使用。

一种近似搜索方法先对向量聚类,再搜索选定的邻近簇。量化则用更短的编码表示向量,以减少存储或计算量。

HNSW 将向量组织成分层的可导航图。所有向量都在底层,越往上数量越少。搜索从稀疏的上层开始,朝更近的候选移动,再下降到更密集的层进行局部搜索。

构建索引时,系统逐个插入向量,随机选择其最高层,并在各层连接邻居。这个图允许贪心遍历,而无需扫描整个语料库;Yang 将其作为速度和召回率之间的实用取舍,而不是精确搜索。

BM25 是历史悠久的关键词检索基线。它结合词频和逆文档频率,并根据文档长度调整。能够区分某篇文档与其他文档的词,比几乎处处出现的词权重更高。

BM25 分数的组成部分
幻灯片 2 / 3BM25 分数的组成部分公式标出了关键词检索中的词频、逆文档频率和文档长度归一化。

一个词的贡献会逐渐饱和,而不是随重复次数无限增长;长度归一化则考虑到长文档自然包含更多词。这些设计让 BM25 适合匹配精确名称、代码和数字。

逆文档频率反映有多少文档包含某个查询词。在展示的形式中,出现在超过一半文档里的词可能产生负贡献;目的是区分查询中有信息量的词和非常常见的词。

稠密段落检索(DPR)使用独立的神经编码器,将问题和段落放入共享向量空间。它用内积评分,即使措辞不完全相同,也可以匹配语义相关的表达。段落表示可以离线准备。

词频饱和参数控制重复出现的词在分数趋于平缓前能增加多少权重。参数较小时,词是否出现更重要;参数较大时,重复出现能获得更多权重。

查询时,DPR 编码问题,并将其向量与索引中的段落向量比较。这将大量文档侧工作移到离线阶段,但每次新查询的编码和搜索仍有成本。

DPR 使用对比损失训练:相对于负样本,提高相关问题—段落对的分数。负样本可以来自同一批次的其他例子,也可以来自 BM25 匹配到查询词但不包含答案的结果。

BM25 困难负样本尤其有训练价值,因为它与查询共享词语却没有答案。将它与真正相关的段落对比,可以促使模型超越表面词语重叠。

困难负样本让编码器学会不只依赖词语重叠。Yang 回顾了检索指标:Hit@K 衡量前 K 个结果中是否出现相关项目;Recall@K 衡量找回的相关项目占全部相关项目的比例。

Yang 还介绍了检索失败指标,它与在前列结果中找到相关证据相对应。团队应根据自己关心的是找到任意答案、找回全部相关材料,还是把最佳证据排在前面来选择指标。

NDCG 根据相关结果的排名给予不同权重,再以理想排序归一化。平均倒数排名对每个查询的第一个相关结果取排名倒数并求平均。不同指标回答的是排序列表的不同问题。

Yang 展示的 DPR 研究结果中,稠密检索在五个数据集中的四个上优于 BM25;课程还指出,使用相对少量的标注样本也有提升。Yang 将其视为所引实验的结果,而不是适用于所有语料的普遍规律。

展示的 DPR 实验比较了分别用单个数据集训练和用多个数据集联合训练。Yang 指出,在这些具体比较中,增加训练样本提高了报告的准确率,即使规模不大的标注集也有帮助。

两种方法的失误不同:BM25 可能漏掉近义表达,而稠密搜索可能漏掉精确的产品 ID、代码或数字。混合检索同时运行两者并合并排序,让一种方法找回另一种遗漏的候选项。

倒数排名融合合并的是排名位置,而不是直接相加可能不在同一量纲上的原始分数。它可以合并多个检索器的排序,而无需为每个语料调整分数。一位学生问如何找到存储的段落表示;Yang 解释说,索引会指向离线计算好的嵌入向量。

05

查询与段落的重排序和交互

双编码器允许离线计算文档表示;交叉编码器将每组查询和段落一起处理。ColBERT 保留词元级表示,在评分时进行交互。

Yang 区分了双编码器和交叉编码器。双编码器分别处理查询和段落,因此可以预先计算大量文档表示。交叉编码器将查询和候选段落一起处理,使两者能够进行细致的注意力交互,但查询时每一对都要计算。

使用交叉编码器时,查询和段落可以在计算相关性分数之前相互关注。这种交互有成本:新查询会形成新的组合,因此无法预先为所有可能的查询准备完全联合的表示。

课堂从哪些内容可预计算、保留了多少交互以及延迟如何变化来比较架构。联合处理可以改善细致匹配,但在大型集合上成本高;它通常作为重排序器,用于较小的候选集。

ColBERT 采用称为延迟交互的折中方式。查询和文档词元分别编码,为每个词元保留一个向量。评分时,每个查询词元找到最相似的文档词元,再将各查询词元的最大相似度相加。

ColBERT 的 MaxSim 操作为每个查询词元寻找最匹配的文档词元,然后将相似度相加。它比单向量表示保留更多词元级细节,同时仍能分别计算文档编码。

由于文档词元表示独立于之后的查询,因此可以离线计算。Yang 展示了 ColBERT 表现良好的公开比较,同时强调存储、延迟和应用特点都会影响选择。

06

让智能体决定何时以及如何检索

Self-RAG、CRAG 和 Search-R1 采用不同机制决定何时搜索、评估证据和改进查询。Yang 最后介绍检索、阅读以及循环层面的失败模式。

传统检索流程执行固定程序。智能体式 RAG 将检索变成一种行动:系统可以决定直接回答还是搜索、搜索什么,以及检索到的证据是否足够停止。

智能体需要作出的三项检索决策
幻灯片 3 / 3智能体需要作出的三项检索决策智能体可以决定是否检索、发出什么查询,以及结果是否足够让它停止搜索。

这些是不同的决策:简单的事实问题可能不需要搜索,另一个问题则可能需要改写查询并进行多轮检索。智能体还必须判断是否有足够依据回答。

Self-RAG 用特殊反思词元训练生成器按需检索并批判自己的输出。它可以根据检索段落生成候选片段,评估相关性和证据支持程度,再对结果排序。这种方法需要训练流程和带有批判标签的数据。

在 Self-RAG 的例子中,检索标记提示系统在需要时获取证据。系统根据检索段落生成候选答案片段,并用相关性和证据支持程度判断保留哪一个。

纠正式 RAG,即 CRAG,则在检索器和生成器之间放置独立评估器。它为检索文档评分:保留并提炼好证据,证据差时重新搜索,不确定时组合使用这些行动。这一做法无需重新训练生成器。

CRAG 的评估器将置信度映射为纠正行动:提炼有用材料、丢弃差材料并重新搜索,或者在证据不确定时结合两种方法;生成器本身无需改变。

Search-R1 使用强化学习学习搜索和推理循环,而不是依赖人工编写的计划。模型可以思考、发出查询、阅读返回信息,再次搜索;Yang 展示的例子中,系统进行了三次逐步改进的搜索。

展示的 Search-R1 轨迹交替进行推理和检索,并随着新信息到来调整查询。目标是学会整个过程,而不是提前指定每一步。

训练过程展开时,模型发出的查询会调用搜索引擎,返回的段落进入模型上下文。课程中描述的奖励依据最终答案是否正确。Yang 以报告中与其他搜索方法的比较作为该方法的证据。

RAG 的多个层面都可能失败。检索可能遗漏正确证据、使用过期索引,或访问不应访问的材料。阅读器可能忽略长上下文中的证据,或面对相互矛盾的来源;反复检索和生成还可能放大早期错误。

阅读阶段,长上下文可能让模型忽略中间的段落,两个检索来源也可能意见不一致。循环层面,早期错误的搜索或解释可能影响后续查询,使错误不断累积。

搜索结果还可能包含提示注入:攻击者可以在检索材料中放入指令,影响智能体。Yang 最后强调,检索是有用的设计原则,但必须针对这些失败模式评估整个流程。

同频道的其他文章

1:03:19EN → 简体中文
Stanford Online· 2026年11月11日管理 AI 的信息来源:按需检索,也要适时省略上下文Cynthia Bailey · Stanford UniversityStanford 讲师 Cynthia Bailey 解释如何检索文档、适时省略上下文,以及防范藏在来源中的指令。RAG 与知识库上下文工程Prompt injection+1
4 张幻灯片1:17:53EN → 简体中文
Stanford Online· 2026年11月10日语言模型设计如何影响智能体的上下文工程Michael Ryan · Stanford University斯坦福的 Michael Ryan 将解码、注意力和推理机制与智能体构建者的实际选择联系起来。AI agents上下文工程Inference
2 张幻灯片1:16:16EN → 简体中文
Stanford Online· 2026年11月10日Cynthia Bailey:清楚提问、核验证据,保留独立判断Cynthia Bailey · Stanford University斯坦福讲师介绍实用提示方法、上下文管理,以及防止技能悄悄退化的方法。Prompting & in-context learningHuman-AI CollaborationEducation
2 张幻灯片1:04:32EN → 简体中文
Stanford Online· 2026年11月6日粒子滤波 SLAM 如何分离机器人的路径与地图Marco Pavone · Stanford UniversityMarco Pavone 推导使粒子建图算法可行的条件独立性。Robotics机器学习基础
7 张幻灯片1:47:01EN → 简体中文
Stanford Online· 2026年11月5日大模型如何装进硬件并更快地生成回答Afshine Amidi, Shervine Amidi · Stanford University斯坦福讲师从显存搬运、分布式训练到推测解码,解释大模型系统如何兼顾容量与速度。InferenceDistributed training & inferenceFoundation Models
4 张幻灯片1:11:12EN → 简体中文
Stanford Online· 2026年11月4日用动态规划处理不确定条件下的决策Marco Pavone · Stanford UniversityMarco Pavone 从最优性原理推导马尔可夫决策过程,并解释精确求解为何昂贵。RoboticsDecision MakingReinforcement Learning