凌晨两点,公司资料室还亮着灯。老查是老板最勤快的助理,可他有个毛病:无论老板问什么,哪怕只是随口一句“一加一等于几”,他都要冲进资料室翻上半天,抱出一摞半人高的文件再气喘吁吁地回来。另一间工位上,新来的助理小思却总是慢悠悠的。他接话之前,总会在心里先过一遍:这问题我拿得准吗?拿得准就直接答;拿不准,才去查资料;查完了还得掂量——这份资料靠谱吗?我的回答站得住脚吗? 老板渐渐发现,小思又快又稳,老查又慢又险——老查抱回来的资料时常是错的、旧的、跑题的,可他依然能一脸自信地把错误信息念得头头是道。这个场景,正是传统RAG与Self-RAG的生动写照。Self-RAG的核心创新,是让模型像小思那样,自己判断“这一步到底要不要检索外部知识”,而不是像传统RAG那样每个问题都去查。本篇文章将用“一位有判断力的助理”这条故事线,带你彻底看懂Self-RAG的架构设计、检索Token、训练方法与推理流程,以及它如何在减少检索开销的同时,显著降低幻觉。

岗位关联

理解Self-RAG的自适应检索决策,是设计“既省钱又省心”的RAG系统的基础,也是你在真实项目和面试中体现架构判断力的关键加分项。

目录
  1. 可视化演示
  2. 传统RAG缺陷
  3. Self-RAG总览
  4. 检索Token设计
  5. 数据与训练
  6. 推理流程
  7. 效果与优势
  8. 应用场景
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

\u53ef\u89c6\u5316\u5c55\u793aSelf-RAG\u7684\u53cd\u601dtoken\u673a\u5236\u4e0e\u81ea\u9002\u5e94\u68c0\u7d22\u51b3\u7b56\u8fc7\u7a0b\uff0c\u5bf9\u6bd4\u4f20\u7edfRAG\u59cb\u7ec8\u68c0\u7d22\u7684\u5dee\u5f02\uff0c\u4ea4\u4e92\u5207\u6362\u89c2\u5bdf\u68c0\u7d22\u5224\u65ad\u4e0e\u751f\u6210\u8d28\u91cf\u4f18\u5316\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

Self-RAG\u81ea\u9002\u5e94\u68c0\u7d22\u51b3\u7b56 \u53cd\u601dtoken\u5224\u65ad\u662f\u5426\u9700\u8981\u68c0\u7d22 \u68c0\u7d22\u540e\u8bc4\u5206\u76f8\u5173\u6027\u518d\u751f\u6210 P(Ret|Q) \u2192 \u68c0\u7d22/\u8df3\u8fc7 \u70b9\u51fb\u5207\u6362\u67e5\u770b\u53cd\u601dtoken\u673a\u5236

传统RAG缺陷

周一例会上,老板连抛三个问题:“一加一等于几?”“咱们食堂几点开饭?”“昨晚竞品发布了什么?”老查听完,三个问题全都冲进资料室,抱回三摞资料翻找。第一个问题他翻了半天才找到答案——“2“。老板瞪大了眼。这就是传统RAG的日常:不管问题多简单,都老老实实走一遍”检索资料 → 拼进提示 → 生成回答”的固定流程。

在技术实现上,传统RAG(Retrieval-Augmented Generation)是一条固定流水线:收到用户问题后,系统先从向量数据库检索Top-K个相关文档,再把文档拼进Prompt,最后让大模型基于这些文档生成答案。这个流程有一个隐含前提——每个问题都必须依赖外部知识。但这个前提常常不成立。“一加一等于几”这种问题,模型参数里早就有了,检索纯属多余;食堂几点开饭这种问题,检索来的文档未必相关,甚至可能把毫不相干的通知当成“食堂时间”,这是典型的噪音引入;第三个问题确实该检索,但如果资料本身过时,模型还会一本正经地把错误信息说得头头是道——不但没缓解幻觉,反而给幻觉递了刀子。

传统RAG的每一次检索都伴随着成本:多一次网络或引擎调用、多一段拼接的上下文、多一分被垃圾信息带偏的风险。它最大的问题不是“检索”本身,而是“不会判断什么时候该检索”。

想象一下,如果老查每次抱回来的资料都是错的、旧的、跑题的,他那副“我查过资料”的自信表情,反而让老板更容易信错。传统RAG的困境就在于此:它不是不需要检索,而是缺少一个聪明的“检索开关”。

Self-RAG总览

老板决定再聘一位助理,叫小思。小思有个习惯:开口前先在心里过一遍——“这问题我拿得准吗?拿得准就直接答;拿不准就去查;查完还得掂量资料靠不靠谱、回答站不站得住。”这个“心里过一遍”,就是Self-RAG的灵魂。

Self-RAG(Self-Reflective RAG,自反思检索增强生成)在传统RAG的骨架上加了一套“自省”能力:模型不再被动地被流水线安排去检索,而是在生成过程中主动判断当前这一步是否需要外部知识。这套判断不是外部规则,也不是独立的分类器,而是模型自己在输出序列中“夹带”的反思标记(Reflection Tokens)——就像小思脑内弹出的对话框。

具体来说,Self-RAG用三类反思标记贯穿生成:要不要检索(Need判断)、检索结果是否相关(IsRel判断)、回答是否受证据支持(IsSup判断)。这三个问题循环出现,形成“边生成边反思”的闭环。与传统RAG把检索当作前置步骤不同,Self-RAG把检索决策嵌入到生成的每一个关键位置,让“检索”从流水线动作变成模型的自主选择。更重要的是,这套反思是可微的,可以通过训练数据端到端学出来,而不是靠人工写死规则。

小思的这一身本领不是天生的,而是在一次次任务里被老板调教出来的。下一节,我们就看看他脑子里那三个“弹窗”长什么样。

检索Token设计

如果你能偷看小思的脑内活动,会发现他每次开口前,系统里都会弹出几个选择框:“这个问题需要查资料吗?”“查到的资料跟问题沾边吗?”“我的回答有没有证据撑腰?”第一个弹窗的选择,就是检索Token中最核心的Need。

Need是一对特殊的Token:模型在生成第 \(t\) 步之前,先通过一个概率分布输出 [Need] 或 [No Need],分别代表“该检索了”和“不用检索,我脑内知识够用”。当模型决定检索后,又会依次打出 [Relevant] / [Irrelevant] 和 [Supported] / [Not Supported],分别记录“文档与问题是否相关”和“回答是否被文档支持”。在某些实现里还有 [Useful] / [Not Useful],评判回答对用户是否完整满足。这些Token和普通词一样参与序列建模,却承担着“流程控制”的角色。它们并非最终答案的一部分,而是模型自言自语时的“思考过程草稿”。

这些“弹窗”用户看不见,却决定了老查和小思的每一个动作——它让“检索”从固定的流水线动作,变成了模型自己的一个“可学决策”。

δt∈{Need,NoNeed},δt∼pθ(δ∣x,y<t)\displaystyle \delta_t \in \{\text{Need}, \text{NoNeed}\}, \quad \delta_t \sim p_\theta(\delta \mid x, y_{<t})
用大白话说:模型每走一步,都会根据已经看到的问题 \(x\) 和已经写出的内容 \(y_{<t}\),先按概率选一个“要不要查资料”的选项,再决定下一步怎么生成。
  1. 决策变量 \(\delta_t\)表示模型在第 \(t\) 个生成位置做出的“要不要检索”的决定。
    δt\delta_t
  2. 两个可选项\(\{ \text{Need}, \text{NoNeed} \}\) 是决策空间的全部取值,Need 代表“需要检索”,NoNeed 代表“不用检索”。
    {Need,NoNeed}\{\text{Need}, \text{NoNeed}\}
  3. 条件概率分布\(p_\theta(\delta \mid x, y_{<t})\) 表示给定问题 \(x\) 和已生成内容 \(y_{<t}\),模型给出各个决策的概率。
    pθ(δ∣x,y<t)p_\theta(\delta \mid x, y_{<t})
  4. 采样符号 \(\sim\)真实推理中按这个概率分布抽样,而不是机械地取最大值,保留了探索性。
    ∼\sim

数据与训练

老查的笨不是一天养成的,小思的聪明也不是。要把“什么时候该查”的本事教给小思,得先有一块“是非题尺子”——这就是批评器(Critic)。

训练数据构造上,Self-RAG先用一个基座语言模型微调出一个Critic模型,让它对“已有的文本状态”打标签:Need / NoNeed、IsRel、IsSup等。例如,把同一个问题分别配上“检索后回答”和“纯靠脑内回答”两种答案,让Critic判断哪种回答更可信,从而生成反思标签。接着,用这些标签训练生成模型,让它在生成答案的同时也产出反思Token。这样,“检索决策”就不再依赖人工手写的规则,而是从数据中学出来的。

训练目标不是单一的分类或生成,而是多任务并行:既要预测下一个词,又要预测检索决策,还要预测Critic的反思结果。最后用强化学习(REINFORCE)把三者的信号合成奖励,让模型学会“何时检索才能获得更高奖励”。整体损失函数由三块组成:

老板把“什么时候查、查得准不准”变成了明确的奖励和惩罚。小思正是在这套奖惩下,越干越有分寸。

L(θ)=Lgen(θ)+λd⋅Lneed(δt,δ^t)+λc∑k=1KLcritic(rt(k),r^t(k))\displaystyle \mathcal{L}(\theta) = \mathcal{L}_{\text{gen}}(\theta) + \lambda_d \cdot \mathcal{L}_{\text{need}}(\delta_t, \hat{\delta}_t) + \lambda_c \sum_{k=1}^{K} \mathcal{L}_{\text{critic}}(r_t^{(k)}, \hat{r}_t^{(k)})
这个损失函数就像老板的薪酬表:生成保质保量是底薪,检索决策判断对了有绩效,反思评分准了有奖金。三块一起算,小思才愿意既顾回答又顾分寸。
  1. 生成损失 \(\mathcal{L}_{\text{gen}}(\theta)\)标准的语言模型损失,负责让模型把下一个词预测准确。
    Lgen(θ)\mathcal{L}_{\text{gen}}(\theta)
  2. 检索决策损失\(\lambda_d \cdot \mathcal{L}_{\text{need}}(\delta_t, \hat{\delta}_t)\) 是Need决策的交叉熵,\(\delta_t\) 是模型预测的决策,\(\hat{\delta}_t\) 是Critic给的标签,负责教会模型“什么时候该检索”。
    λd⋅Lneed(δt,δ^t)\lambda_d \cdot \mathcal{L}_{\text{need}}(\delta_t, \hat{\delta}_t)
  3. 反思Token损失\(\lambda_c \sum_{k=1}^{K} \mathcal{L}_{\text{critic}}(r_t^{(k)}, \hat{r}_t^{(k)})\) 对IsRel、IsSup等 \(K\) 个反思Token逐一求交叉熵并求和,负责教会模型“检索之后怎么评判”。
    λc∑k=1KLcritic(rt(k),r^t(k))\lambda_c \sum_{k=1}^{K} \mathcal{L}_{\text{critic}}(r_t^{(k)}, \hat{r}_t^{(k)})
  4. 超参数平衡\(\lambda_d\) 与 \(\lambda_c\) 是两个权重系数,控制“决策判断”和“反思判断”在总损失中的重要性。
    λd,λc\lambda_d, \lambda_c

推理流程

开会时,小思是这样工作的:老板话音落下,他在心里同时草拟好几个版本的答复,再悄悄给每个版本批注——这句是自己知道的,那句是查来的、查到的证据够不够硬,然后挑一个最有把握的开口。这就是Self-RAG的推理流程。

具体分为四步。第一,并行候选生成:模型基于当前状态,以束搜索或采样的方式生成多个候选片段,每个候选都附带一串反思Token;第二,反思评分选优:对每个候选综合IsRel、IsSup、IsUse等Token给出的得分做加权,选出分数最高的那个;第三,迭代检索:若某一步判定Need,且检索到的证据不足以支撑生成,模型可以再次发起检索,进入下一轮生成;第四,标注输出:最终回答可以明确标注出哪些片段依赖外部资料,让用户能够顺藤摸瓜去核验。

这条流程让生成从“一条道走到黑”变成了“多路并走、按证据选优”。代价是推理时增加了候选生成和评分的开销,但换来的是回答可靠性和透明度的提升。与训练阶段不同的是,推理时Critic不再更新参数,只作为“打分器”实时给出反思信号。

老查的汇报只有一份,没得选;小思的汇报有好几份草稿,每份自己还打了分。老板要的从来不是更多资料,而是更可靠的结论。

效果与优势

半年下来,老板做了个小统计。老查每月跑资料室两千多次,其中一多半纯属多余;小思只跑了六百多次,但每次都跑在刀刃上。更妙的是,老板发现小思很少被错误资料带偏——因为他会在汇报时注明“这条没有证据,是我推测的”。

在公开基准(如PopQA、TriviaQA、PubHealth)上,Self-RAG相比传统RAG及其他自适应方法,在多个维度上表现出优势。准确率方面,在需要外部知识的开放域问答上,Self-RAG显著超过“固定检索”的基线;幻觉控制方面,“受支持输出”的比例明显提升,即模型更少编造内容;效率方面,由于部分问题直接跳过检索,整体检索调用次数下降,响应时延缩短;泛化方面,同一套反思Token可以迁移到多个任务和领域,不需要为每个任务重新设计检索策略。

但这些收益并不是免费的。Self-RAG的推理要生成多个候选再评分,计算量有所增加;Critic若判断失准,也可能把“该检的问”当成“我懂”,导致准确性不升反降。不过在“回答质量优先”的生产场景中,这笔账通常是划算的。

老板的量表很简单:同样的活,谁又快又稳?Self-RAG追求的不是每次检索,而是每次检索都值得。

应用场景

不同场景就像不同脾气的老板:有的老板只问开放题,有的老板只问公司制度,有的老板专门问“最新消息”,还有的老板专门考你“这句话是真的吗”。小思的自适应检索,恰好能应付这四类。

场景一,开放域问答:用户问题难易不均,“大象和老鼠谁寿命长”需要知识库,“一加一等于几”直接靠参数记忆,Self-RAG按需切换。场景二,知识密集型任务(法律、医疗、研发):回答必须引用依据,Self-RAG在需要时检索并验证引用完整性,避免编造法条或剂量。场景三,时效性查询(新闻、政策、股票):模型参数里的知识是静态的,Self-RAG对时效敏感的Query倾向打出[Need],拉取最新语料。场景四,事实核查:把待核实的陈述作为输入,Self-RAG判断是否需要检索权威来源,并输出受支持或不受支持的判定。

这四个场景有个共同点:问题对“外部知识”的依赖程度不确定。传统RAG用固定动作应对不确定,Self-RAG用自省决策应对不确定——后者显然更接近一个靠谱助理的做法。当你的业务问题正好落在“有些简单、有些复杂、有些还常变”的区间时,Self-RAG就有机会同时省下成本、保住质量。

AI 应用场景

智能客服的开放域问答

阶段:推理部署与决策优化

解决的问题:传统客服QA对每个用户问题都强制检索知识库,简单问题(如“怎么退订”的固定流程)也要多走一轮检索,时延高、成本高;更糟的是,检索到的非相关知识有时会带偏模型,把简单问题答复杂。Self-RAG让模型先判断“这个问题我熟不熟”,熟练的直接答,不熟的才检索,检索后还要校验资料相关性,既省时又降幻觉。

具体案例:某电商平台的智能助手接入了Self-RAG。用户问“退款到账要几天”,模型直接用内部知识秒回;用户问“我的订单XXX为什么还没发货”,模型判定需要查询实时订单系统,主动触发检索,并根据返回数据生成带订单号的精确回复。上线后,整体知识库调用量下降约四成,平均响应时延缩短近一半。

企业内部制度问答

阶段:数据与知识库接入

解决的问题:企业政策经常更新,模型参数里的旧知识会答错;如果每个问题都检索,又会把未更新的历史文档翻出来造成混乱。Self-RAG的制度问答场景优势在于:常规问题(“年假怎么算”)用参数记忆直接答;政策变动后的新问题(“今年报销标准是多少”)触发Need,检索最新制度文档,并对答案做IsSup支持度验证,保证引用的是最新条款。

具体案例:某千人公司的内部HR机器人使用Self-RAG后,员工问“今年体检有哪些项目”,模型发现自己的知识库更新于去年,主动检索本季度新发布的体检通知,回答末尾还附上了文档链接。HR团队核对后确认,引用的是最新版本,错误率从15%降到3%。

事实核查与内容审核

阶段:评测与安全治理

解决的问题:人工核查一条消息的真假成本极高,全量检索又会让审核系统变慢。Self-RAG可以先判断陈述是否“显然为真/为假”,只有需要外部证据时才检索权威来源,并用IsRel过滤不相关网页、用IsSup检查回答是否真的被来源支撑,输出“受支持”或“不受支持”的判定。

具体案例:某新闻平台的辟谣助手接入Self-RAG,输入“喝醋能软化血管”,模型判定需要查证,检索到医学机构科普文章后标注“本回答受来源支持,结论为不实信息”;输入“太阳从东边升起”,模型直接判定“无需检索,常识成立”,省去一次检索。

Python 演示

python56 行
import re  class MiniSelfRAG:    """简化版 Self-RAG 模拟器,用规则展示按需检索的自适应逻辑。"""     def __init__(self, memory, retriever):        self.memory = memory          # 模型脑内知识        self.retriever = retriever    # 外部资料库        self.lookup_count = 0         # 实际检索次数        self.log = []                 # 决策日志     def _known(self, query):        # 命中脑内知识则无需检索        return any(key in query for key in self.memory)     def _need_retrieval(self, query):        # 第一层反思:Need / NoNeed        return not self._known(query)     def _retrieve(self, query):        self.lookup_count += 1        return self.retriever.get(query, "暂无匹配资料")     def _critic(self, doc):        # 第二层反思:IsRel / IsSup 的简化判断        return "[Relevant & Supported]" if "暂无" not in doc else "[Irrelevant & Unsupported]"     def generate(self, query):        if not self._need_retrieval(query):            token = "[No Need]"            answer = self.memory[query]            self.log.append(("直接回答", query))        else:            token = "[Need]"            doc = self._retrieve(query)            answer = f"根据资料「{doc}」回答:{query}"            self.log.append(("检索后回答", query, doc))        critic = self._critic(doc) if token == "[Need]" else "[Useful]"        return f"{token} {answer} {critic}"  def run_demo():    memory = {"法国首都是哪里": "巴黎", "一加一等于几": "2"}    retriever = {"2024年诺贝尔文学奖得主是谁": "韩国作家韩江"}    assistant = MiniSelfRAG(memory, retriever)     for query in ["一加一等于几", "法国首都是哪里", "2024年诺贝尔文学奖得主是谁"]:        print(assistant.generate(query))     print(f"本次实际检索次数: {assistant.lookup_count} / 3 个问题")    print("传统RAG则会检索 3 次,Self-RAG 省掉了 2 次无效检索。")  if __name__ == "__main__":    run_demo()
目的:用一个小型规则模拟器,直观展示Self-RAG的“按需检索”逻辑——脑内知识命中的问题直接回答,命不中的才触发检索,并输出反思标记作为二次校验。
  1. self.retriever = retriever把外部资料库挂到助理身上,但只有在真正需要时才会使用它,这是按需检索的前提。
  2. def _need_retrieval(self, query): return not self._known(query)第一层反思Need/NoNeed:命中脑内知识就直接答,没命中才触发检索。
  3. self.lookup_count += 1每次真正检索才计数,这是效率优化最直接的证据。
  4. if not self._need_retrieval(query):生成入口先做决策,体现了“先判断后行动”的Self-RAG思想。
  5. critic = self._critic(doc) if token == "[Need]" else "[Useful]"检索过就要对资料支持度做二次反思,没检索过则标记为有用。

常见误区

误区“Self-RAG让模型自己做决定,那它肯定是学会了少检索、能不查就不查,检索越少越好。”

正解Self-RAG是“按需检索”,不是“尽量不检索”。该检就检、不该检就不检,一切以问题对外部知识的依赖程度为准。比如问“昨天股价”这种时效性问题,它照样会老实检索。就像小思不是不爱去资料室,而是知道什么时候去资料室才值得跑一趟。

为何常见:名字里的“Self“容易让人误以为模型要自给自足,忽略了Self-RAG的关键其实是”判断“而非”回避检索”。

误区“[Need]和[No Need]是模型给出的分类结果,就像情感分析输出'正面/负面'一样,是回答的一部分。”

正解检索Token是夹在生成序列中的反思标记,是模型“自言自语”的思考过程,用来指导后续动作,而不是呈现给用户的答案。它们就像小思脑内的OS弹窗,老板永远看不到弹窗本身,只会看到弹窗之后小思的行动。

为何常见:Token这个词在NLP里常指输出词,初学者容易把“模型输出了[Need]Token”误解为“模型给出了最终分类标签”。

误区“只要用上Self-RAG,准确率就一定会比传统RAG高,效果立竿见影。”

正解Self-RAG的效果建立在两个前提上:一是Critic的判断足够准,二是检索器等基础设施本身够好。如果Critic把该检的问题打成“我懂”,模型就会在知识盲区上自信地胡编;如果检索器永远召不回好文档,后续反思再努力也白费。比喻来说,小思再聪明,如果老板给的资料库本身就是个烂仓库,他跑进去也翻不出金矿。

为何常见:论文和宣传稿都强调效果提升,容易让人忽略这些提升背后的前提条件,忽视了错误判断可能带来的新风险。

误区“Self-RAG里的Critic也是给整体回答打个分,跟RLHF中的奖励模型没什么区别。”

正解两者虽然都在强化学习中充当信号来源,但角色不同。RLHF的奖励模型只输出一个整体标量分数,用来衡量整段回答是否符合人类偏好;Self-RAG的Critic则是在生成过程的每个关键位置,输出多个反思Token的概率分布(如IsRel、IsSup),用来逐段指导“要不要检索、证据够不够”。Critic像“分段点评员”,逐句挑毛病;奖励模型像“总评分官”,最后给个总分。

为何常见:两者都被称为“打分模型”且都服务于强化学习,名字和形态的相似让很多人误以为它们是同一个东西。

面试题

Q1. Self-RAG与传统RAG最大的区别是什么?

单选题 · easy

  • A.检索结果更高质量
  • B.按需决定是否检索← 正确答案
  • C.使用更大的基座模型
  • D.不需要外部知识库

答案:B。传统RAG对每个问题都执行固定检索,而Self-RAG让模型自己判断“要不要检索”,这是其核心创新。A是可能带来的效果而非架构区别;C与架构无关;D完全错误,Self-RAG在需要时依然依赖外部知识库。

Q2. 判断“要不要检索”是通过什么机制实现的?

单选题 · easy

  • A.专门的独立分类器
  • B.生成反思Token← 正确答案
  • C.人工设置的固定规则
  • D.用户手动开关

答案:B。Self-RAG让模型在输出序列中生成[Need]/[No Need]反思Token,与答案文本联合解码。它不是外部分类器,也不是人工规则,更不需要用户干预。反思Token是模型“边生成边决策”的自省机制。

Q3. 在Self-RAG的反思Token中,用于判断“检索到的文档与当前问题是否相关”的是哪个?

单选题 · mid

  • A.IsRel← 正确答案
  • B.IsSup
  • C.IsUse
  • D.Need

答案:A。IsRel(Relevant/Irrelevant)负责评估检索文档与问题的相关性;IsSup(Supported/Not Supported)负责评估回答是否被文档支持;IsUse负责评估回答是否完整有用;Need负责决定是否发起检索。四个Token各司其职。

Q4. Self-RAG训练中,Critic模型的输入输出是什么?

单选题 · mid

  • A.输入状态文本,输出各反思Token概率← 正确答案
  • B.输入问题,输出唯一答案类别
  • C.输入检索文档,输出文档排序
  • D.输入输出对,输出标量奖励

答案:A。Critic以“当前已生成的文本状态”为输入,输出Need/IsRel/IsSup等反思Token的概率分布,为强化学习提供过程性的奖励信号。D的描述更像是RLHF中的奖励模型,而Critic输出的是多维度的反思分布而非单一标量。

Q5. 下列哪些场景更适合Self-RAG的自适应检索?

多选题 · mid

  • A.开放域问答,问题难易不均← 正确答案
  • B.高频重复的固定话术回复
  • C.知识密集型任务需要引用← 正确答案
  • D.完全没有外部资料的封闭环境

答案:AC。A中问题难易不均,按需检索能显著省开销;C中需要检索后验证引用,能降低幻觉。B固定话术根本不需要检索,引入RAG反而多余;D没有外部资料时Self-RAG无法发挥检索能力,只能退化为纯生成模型。

Q6. Self-RAG如何缓解“检索到错误资料却振振有词”的问题?

单选题 · mid

  • A.增加检索的次数上限
  • B.用IsSup判断支持度← 正确答案
  • C.冻结检索器全部参数
  • D.使用最新语料训练

答案:B。IsSup(Supported/Not Supported)检查“生成的回答是否真正被检索文档支撑”,不支持的断言会被降权或剔除,从而减少引用错误资料的幻觉。A只增加数量不保证质量;C不改变答案;D只针对知识过时问题,无法处理“资料本身错误”。

Q7. 关于Self-RAG的训练,下列说法正确的有?

多选题 · hard

  • A.通过强化学习优化决策策略← 正确答案
  • B.Critic模型只在推理时使用
  • C.多任务损失同时训练生成与反思← 正确答案
  • D.无监督数据也能完成训练

答案:AC。A正确,反思Token作为奖励信号驱动策略学习;C正确,生成损失、Need损失与反思Token损失联合优化。B错误,Critic在训练阶段也要用于构造标签和提供奖励。D错误,训练需要带反思标签的配对数据(检索后回答 vs 无检索回答)。

Q8. "[Need]" Token出现在什么时机?

单选题 · easy

  • A.在回答完全结束后
  • B.在生成任意token之前
  • C.在决定是否检索之前← 正确答案
  • D.在数据处理预处理时

答案:C。[Need]是模型在生成过程中“是否调用检索器”的决策信号,它先于检索动作出现。若输出[No Need]则直接生成答案;若输出[Need]则触发检索。它与文本一起生成,而非在预处理阶段打标签。

Q9. Self-RAG推理时如何挑选最终输出?

单选题 · hard

  • A.贪心取第一个候选
  • B.随机选择一个候选
  • C.按反思分数加权选优← 正确答案
  • D.把多个候选全部拼接

答案:C。Self-RAG推理时并行生成多个候选,每个候选附带反思Token序列,然后按IsRel、IsSup、IsUse等Token组成的得分做加权求和,选出分数最高的候选作为最终答案。贪心或随机都没有利用反思信息,拼接则会让回答冗余混乱。

Q10. 相比传统RAG,Self-RAG在效率和准确率上可能的改善来源有哪些?

多选题 · hard

  • A.简单问题跳过检索节省时延← 正确答案
  • B.复杂问题检索后验证减少幻觉← 正确答案
  • C.提升检索器本身性能
  • D.用反思Token过滤不相关证据← 正确答案

答案:ABD。A是效率改善的直接来源,简单问题不再检索;B通过IsSup等Token验证支持度,降低幻觉;D用IsRel过滤不相关证据,提升可靠性。C虽然能提升整体效果,但那是检索器层面的改进,与Self-RAG的自适应机制本身无关。