Self-RAG:检索与反思 token
Self-RAG 是一种让模型在生成过程中决定是否检索、并评价证据使用情况的 RAG 方法。它专门训练生成器,使其除了输出正文,还能输出 reflection tokens(反思 token),表示检索需要、资料相关性、回答支持度和有用性。推理程序读取这些信号,执行检索,并从不同证据下生成的候选内容中选择后续片段。
普通 RAG 往往先检索一批资料,再让模型一次性生成回答。即使检索内容与问题相关,回答中也可能加入原文没有的结论。例如制度只规定了境内差旅的提交期限,模型却把同一期限扩展到境外。Self-RAG 将“资料是否相关”和“生成文字是否受资料支持”分开判断,并让这些判断参与回答的选择。
一轮生成中发生什么
Self-RAG 按片段推进回答。一轮生成接收用户问题和已经生成的内容,先决定是否需要检索;如果需要,就取回多个 passages(检索片段),分别基于它们生成候选续写,再比较候选。
问题 + 已生成内容
↓
预测 Retrieve 信号
├── 不检索 → 直接续写
└── 检索 → 取得 passage A、B、C
├── 基于 A → 候选续写 A + 反思信号
├── 基于 B → 候选续写 B + 反思信号
└── 基于 C → 候选续写 C + 反思信号
↓
对候选评分,选择后续片段
↓
继续生成或结束同一个模型负责正文和反思信号的预测。检索工具仍由外部程序执行,模型生成一个“需要检索”的 token 后,程序才调用检索器并把结果送回模型。
每篇检索资料对应一条候选续写,候选之间可以互相竞争。某一篇不相关资料造成的续写,可以在选择阶段被降低权重;有证据支持、又能回答问题的候选,则有机会被保留。
四类反思 token 各管哪一步
| 信号 | 论文中的主要取值 | 判断对象与用途 |
|---|---|---|
| Retrieve | Yes、No、Continue | 是否发起检索,或继续利用已有证据生成 |
| ISREL | Relevant、Irrelevant | 检索片段与当前任务是否相关 |
| ISSUP | Fully supported、Partially supported、No support | 生成片段是否受到检索证据支持 |
| ISUSE | 1–5 | 输出满足任务要求的程度 |
这些名称对应不同位置、不同含义的特殊 token。ISREL 评价资料,ISSUP 评价生成文字与资料的支持关系,ISUSE 评价输出对任务是否有用。其中只有 ISUSE 使用 1–5 的等级,其余是类别判断。
以问题“2026 年境内和境外差旅都要在 30 天内提交吗”为例,检索结果只有:
2026 年境内差旅,应在结束后 30 个自然日内提交。
这段资料与问题相关,因此可以得到 Relevant 判断。若候选回答写成“境内、境外都须在 30 个自然日内提交”,境外部分没有证据,应被判为只获得部分支持。候选“境内须在 30 个自然日内提交,当前资料未说明境外期限”则保留了证据范围。
支持度高,也不一定代表回答有用。模型逐字复制整段制度,可能没有正面处理用户问的“境内与境外是否相同”。ISUSE 用于补充这种任务完成情况,不能只按是否忠实复制原文选答案。
反思信号怎样影响候选选择
决定是否检索时,推理程序可以使用模型预测的 Retrieve token,也可以把 Retrieve=Yes 的归一化概率与阈值比较。阈值调低会让模型更容易进入检索路径。
进入检索路径后,模型分别在每个 passage 条件下生成候选及反思信号。解码程序综合候选文本的生成概率与相关性、支持度、有用性评分,选择继续生成的片段。这些评分来自反思类别的预测概率。
这些项的作用不同:文本生成概率衡量续写是否符合模型的语言分布;相关性与支持度约束候选使用证据的情况;有用性则评价回答任务的程度。权重改变后,模型会在这些因素之间形成不同偏好。
长回答可以使用片段级 beam search:每一步保留若干条得分较高的候选路径,继续向后生成,再比较完整程度更高的路径。它比只保留当前一个片段更有搜索空间,但也需要生成更多候选。检索次数减少,未必代表总推理成本降低。
反思判断仍可能出错。模型可能把主题相似误判为支持,也可能对没有依据的候选给出高分。因此,调高支持度权重只能改变候选选择偏好,不能保证事实正确。需要精确到原文位置的引用时,还应加入证据对齐与引用。
模型为什么能生成这些信号
这套控制协议来自专门训练。Self-RAG 用包含反思标注的训练序列,让生成器学会在适当位置输出特殊 token。
训练过程可以分成两个阶段。先训练 critic 模型:论文先用 GPT-4 标注一批反思信号,据此训练 critic 判断检索需要、相关性、支持度和有用性,再用 critic 为更多数据补充标注。
随后训练生成器。训练序列中包含任务、检索证据、输出片段及对应的反思 token,生成器同时学习正文和这些信号。推理时,训练好的生成器自己输出反思 token,不需要每一步再调用一个独立 critic。
三个角色的分工由此明确:检索器查资料,critic 参与制作训练监督,生成器在推理时输出正文与反思信号。反思标签质量会影响生成器的判断;错误地把无依据回答标为 Fully supported,会把错误的支持关系带进模型。
使用论文模型与借用设计思路
使用 Self-RAG 模型需要匹配特殊 token、检索输入格式和解码脚本。仅把模型当成普通聊天模型调用,可能无法发挥分支检索与候选评分的作用;在普通提示词后加“请反思”也没有建立上述训练与解码机制。
如果暂时不训练模型,可以借用其中的评价分工:先判断资料是否相关,再检查回答是否受支持,最后检查是否完成任务。外置评估器可以据此要求补查或删除无依据断言。这是一种工程变体,评价发生的位置与候选选择方式都可能不同。
观察 Self-RAG 是否按预期工作时,需要保存检索结果、候选片段和反思信号。只读最终答案,无法区分模型是否正确识别了部分支持,也看不出支持度评分是否实际改变了候选选择。对缺答案的问题,还要同时检查是否出现过度拒答,避免把“几乎什么都不回答”误当成更好的证据使用能力。