AutoRefine
Agent 检索 · arXiv 2505.11277v5 · NeurIPS 2025

AutoRefine:检索之后先提炼,再继续想

传统检索增强推理把整篇文档直接塞回上下文,模型要在噪声里自己找证据。AutoRefine 在每次 <search> 之后强制插入一个 <refine> 块:先过滤、蒸馏、整理文档,再决定下一步搜什么或直接作答。训练用答案奖励加检索奖励,走 GRPO。

Yaorui Shi 等 · USTC / DP Technology / NUS 原文 ↗ 代码 ↗
TL;DR · 30 秒抓住核心

搜索动作解决“去哪里找”,refine 动作解决“找到之后留下什么”。AutoRefine 把后者显式写进轨迹模板,并用一个二值检索奖励要求 refine 文本覆盖标准答案的全部词。

奖励是分段的:答案 F1 大于 0 就拿 F1;答案错但 refine 覆盖了标准答案,给 0.1;两者都没有,给 0。这样即使最终没答对,中间提炼对了也有学习信号。

Qwen2.5-3B-Base 上,七个 QA 基准平均 EM 0.405;比表内最强基线 Search-R1-Instruct 的 0.336 高 0.069(相对 20.54%),比同底座 Search-R1-Base 的 0.312 高 0.093(相对 29.81%)。

边界:只测 3B/7B;检索语料是 2018 年 Wikipedia 快照;指标以 EM/F1/CEM 为主;refine 增加生成步骤,但论文没有给端到端延迟与费用账。

0.405
AutoRefine-Base 七基准平均 EM
0.069
比表内最强基线高出的绝对值
0.536
AutoRefine-7B 平均 F1
01

问题不是“搜不到”,而是“搜到了却不会用”

这一节建立问题:search-during-think 范式把检索和推理交替起来,但缺少一个显式的证据整理步骤。

RAG 的常见流程是:模型发现问题需要外部知识 → 发一次搜索 → 拿到若干文档 → 直接在这些文档上生成答案。论文把这种范式叫 search-during-think。它比“不检索”强,但有两个结构性弱点。

第一,文档是噪声和信号的混合物。检索器按相关性返回 top-k 文档,其中可能包含错误实体、过时信息、与问题无关的段落。模型没有显式的“先筛再答”步骤,噪声会直接进入后续推理,错误答案因此被放大。论文 Figure 1(a) 的例子是“David Beckham 最后效力的球队的主场在哪”:同一篇文档先写他出道于 Manchester United,末尾才写他最后效力 Paris Saint-Germain;直接读文档的 previous method 搜 Manchester United、答 Old Trafford,AutoRefine 先 refine 出“David Beckham's last professional team was Paris Saint-Germain”,再答 Parc des Princes。

第二,奖励只落在最终答案上。如果只用答案正确性做 RL 奖励,一条轨迹只有最后 0/1 或 F1 一个标量;中间“有没有找到关键证据”没有被单独评价。对多跳问题,这会让模型难以学习“先找到中间实体,再用它去搜下一步”的行为。

AutoRefine 的切入点不是换检索器,也不是换更大模型,而是在轨迹里加一个 <refine> 动作,并给这个动作单独设计奖励。检索仍然由同一个 E5 检索器完成,变化发生在模型如何使用检索结果。

02

三类基线都没解决文档噪声

看懂 Table 1 的分组,才知道 0.405 是和谁比。

w/o Retrieval

只靠参数知识

Direct Generation、SFT、R1-Instruct/Base。无检索组里最好的是 R1-Base 的 0.229,说明这七个基准确实需要外部知识。推断(由无检索组整体低于检索组反推)

w/ Single-Hop

搜一次,直接读

Naive RAG 用原问题检索一次,平均 0.270。它比不检索强,但没有多轮搜索,也没有显式 refine。

w/ Multi-Hop

边想边搜

Search-o1、IRCoT、ReSearch、Search-R1。最强的是 Search-R1-Instruct 0.336;AutoRefine 要在这一组里比较。

这些方法的共同点是:模型学会在推理中调用搜索,但检索回来的文档仍然被直接拼进上下文。AutoRefine 的区别只在模板和奖励:模板多一个 <refine>,奖励多一个 RRet。论文没有换检索器,也没有换底座,这让消融能比较干净地归因到这两个改动。

03

关键不是搜索,而是搜索后的显式提炼

这一节拆两件事:refine 在轨迹里长什么样,奖励怎么算。

轨迹:think → search → documents → refine → … → answer

一条轨迹由若干步组成,每步可以是一个 <think>、一个 <search>、一个 <documents>、一个 <refine> 或最终的 <answer>。<search> 产生查询,检索器返回文档;文档被放进上下文后,模型必须先写一个 <refine> 块,把与问题相关的证据提炼出来,再决定继续搜索还是作答。

这个模板强制模型在“读文档”和“用文档”之间插入一个可观察的中间产物。refine 文本既是下一步推理的上下文,也是检索奖励的评估对象。

答案奖励:F1

RAns 把预测答案与标准答案都看成词集合,用 F1 计算重叠:

RAns = F1(oans, a) = 2·|oans ∩ a| / (|oans| + |a|)
答案完全正确时 F1 = 1;部分词重叠时介于 0 和 1 之间。公式 (1)。

检索奖励:refine 是否覆盖标准答案

RRet 是一个二值指示函数:把整条轨迹里所有 <refine> 块的内容拼成 orefine,如果标准答案的每个词都出现在其中,就给 1,否则给 0。公式 (2):

RRet = 𝟙(a ∩ orefine = a)
注意:奖励只统计 refine 文本;把文档留在 <documents> 里不算,但把整篇文档抄进 refine 也能通过覆盖检查——它约束的是覆盖,不是精简。

组合奖励:先保答案,再给部分学分

总奖励 ROverall 不是简单相加,而是分段函数:

ROverall = RAns  如果 RAns > 0
ROverall = 0.1  如果 RAns = 0 且 RRet > 0
ROverall = 0  如果 RAns = RRet = 0
公式 (3)。答案对时直接用 F1,避免检索奖励稀释答案质量;答案错但提炼对时给 0.1,作为中间步骤的部分学分。

论文在 Appendix C.3 对比了线性组合 RAns + RRet 和这个非线性设计,结论是非线性更好;作者假设是线性组合会过度强调中间行为。这个消融只在附录报告,主表没有展开。

优化:GRPO,检索文档的 loss 被 mask

训练用 GRPO。每个问题采样一组 G 条轨迹,用组内相对优势更新策略;检索回来的文档 token 不参与 loss,只有模型自己生成的 think/search/refine/answer token 参与。这样模型学到的是“怎么搜、怎么提炼、怎么答”,而不是“怎么复述文档”。

04

3B/8×A100 能训,但步数口径有冲突

这一节说明数据、超参数和评测口径;原文有两处训练步数/版本口径需要并列。

底座。主实验用 Qwen2.5-3B 的 Base 与 Instruct 两个版本;v5 另加 Qwen2.5-7B 的规模消融(Table 3)。检索器固定为 E5-base-v2,知识源是 2018 年 12 月的 Wikipedia dump,每次查询取 top-3 文档。

数据。训练集由 NQ 与 HotpotQA 的 train split 合并,共 169,615 条;评测集由七个数据集的 test/dev split 合并,共 51,713 条。NQ、TriviaQA、PopQA、Bamboogle 用 test split;HotpotQA、2Wiki、Musique 没有 test split,用 dev split。

训练配置。8 张 A100-80GB,全参数微调,FSDP + BF16;学习率 1×10−6,无 warmup;batch 256,micro-batch 64;每条数据采样 5 条 rollout;每条 rollout 最多 5 次搜索;检索文档拼接后截断到 512 token(这是训练截断口径,§3.3.2 的 ≥600 是分析口径);max response 2048;KL 系数 β=0.001,clip ratio ε=0.2,group size G=5。Table 5 未逐项转录,页面只引用上述超参数数值。

步数口径。Appendix B.1 正文写 “trained for 200 steps”,Table 5 的超参数表写 “Total Training Steps 250”。页面并列两处,不替原文选一个。推断 这可能是正文未随表更新,但没有原文依据,不能确定。

统计。v5 的 Appendix C.2 用 3 个随机种子重跑,报告 mean ± std 并做 T-test:AutoRefine 对 ReSearch 的 p=5.49×10−6,对 Search-R1 的 p=2.85×10−6,原文写 p≪0.01。Table 7 的三种子均值(AutoRefine Avg 0.408±0.014)与 Table 1 的点值(0.405)略有差异,页面分别标注,不混用。Table 7 未转录,页面只引用 AutoRefine 的三种子 Avg 与 p 值。

05

每条轨迹多一个 refine 节点

这张图只画单条轨迹的控制流;reward 在轨迹结束后统一计算。

<think> 判断知识缺口 生成查询 <search> E5 检索 top-3 2018 Wikipedia <documents> 拼接文档 截断 512 token <refine> 过滤 / 蒸馏 / 整理 证据不足则继续下一轮 <answer> 输出最终答案 最多 5 次搜索 虚线:refine 之后如果还有知识缺口,回到下一轮 think;否则进入 answer。 示意图按 §2.1 与 Figure 2 重绘;未画 GRPO 更新、reward 计算与文档 token mask。
AutoRefine 的单条轨迹。关键控制点是 refine:它既压缩上下文,也为 RRet 提供可检查的文本。
06

平均 EM 0.405,多跳提升大于单跳

这一节按主表、消融、规模、外部 refiner 分开看;不同表的运行次数与口径不同,不混用。

主结果:Qwen2.5-3B

AutoRefine-Base 的平均 EM 是 0.405;表内最强基线是 Search-R1-Instruct 的 0.336,绝对高 0.069,相对高 20.54%。同底座 Search-R1-Base 是 0.312,绝对高 0.093,相对高 29.81%。论文 §1 引言(§5 结论亦同)写的 “6.9% higher” 对应的是 0.069 这个绝对点差,不是相对 6.9%。

Table 1 完整转录 · Qwen2.5-3B 上各方法在七个 QA 基准的 EM。Single-Hop 为 NQ/TriviaQA/PopQA,Multi-Hop 为 HotpotQA/2Wiki/Musique/Bamboogle。
方法NQTriviaQAPopQAHotpotQA2WikiMusiqueBamboogleAvg
Direct Generation0.1060.2880.1080.1490.2440.0200.0240.134
SFT0.2490.2920.1040.1860.2480.0440.1120.176
R1-Instruct0.2100.4490.1710.2080.2750.0600.1920.224
R1-Base0.2260.4550.1730.2010.2680.0550.2240.229
Naive RAG0.3480.5440.3870.2550.2260.0470.0800.270
Search-o10.2380.4720.2620.2210.2180.0540.3200.255
IRCoT0.1110.3120.2000.1640.1710.0670.2400.181
ReSearch-Instruct0.3650.5710.3950.3510.2720.0950.2660.331
ReSearch-Base0.4270.5970.4300.3050.2720.0740.1280.319
Search-R1-Instruct0.3970.5650.3910.3310.3100.1240.2320.336
Search-R1-Base0.4210.5830.4130.2970.2740.0660.1280.312
AutoRefine-Instruct0.4360.5970.4470.4040.3800.1690.3360.396
AutoRefine-Base0.4670.6200.4500.4050.3930.1570.3440.405

多跳的增量更大,但相对口径要看清。AutoRefine-Base 在 2Wiki 是 0.393,Search-R1-Base 是 0.274,绝对高 0.119,相对高 43.43%。Musique 上 0.157 对 0.066,是 2.38 倍。论文正文另写“2Wiki 提升 0.083、相对 21%;Musique 提升 0.045、相对 26.7%”,分母用的是 AutoRefine 自己的分数(0.083/0.393=21.12%,0.045/0.169=26.63%),不是基线。这两个差值的减式是 0.083 = 0.393(AutoRefine-Base 2Wiki)− 0.310(Search-R1-Instruct 2Wiki),0.045 = 0.169(AutoRefine-Instruct Musique)− 0.124(Search-R1-Instruct Musique);由表内数字可见,论文这里混用了 Base 与 Instruct 两个 variant。紧接着的 0.119/43.43% 则是同 variant:0.393(AutoRefine-Base)− 0.274(Search-R1-Base)。两种口径并列,不替原文统一。

消融:检索奖励和 refine 各自贡献多少

Table 2 在 Base 上去掉检索奖励,平均从 0.405 降到 0.376(−0.029);再去掉 refine,降到 0.312(再 −0.064)。Instruct 上对应 0.396 → 0.360(−0.036)→ 0.333(再 −0.027)。本页只引用 Table 2 的 Avg 列,逐基准列未转录。两个组件都不是装饰:单独去掉检索奖励就掉 2.9 个点,连 refine 一起去掉掉 9.3 个点。

当前读数
主结果 · Base:Direct 0.134,Naive RAG 0.270,ReSearch 0.319,Search-R1 0.312,AutoRefine 0.405。
基线 AutoRefine

柱高统一以 0.405 为满格(AutoRefine-Base 的 Avg),不是按当前视图最大值归一化;Instruct 视图最高值 0.396 因此显示为 97.8%。标签是表格原值。Direct Generation 与 Naive RAG 没有 Base/Instruct 拆分,两个 split 下显示同一数值。

手算:主结果、消融与柱高比例与交互同一数据源

主结果 · Base。AutoRefine 0.405 − Search-R1-Instruct 0.336 = 0.069;0.069 / 0.336 = 20.54%。AutoRefine 0.405 − Search-R1-Base 0.312 = 0.093;0.093 / 0.312 = 29.81%。

消融 · Base。完整 0.405 − 去掉检索奖励 0.376 = 0.029;0.376 − 去掉两者 0.312 = 0.064;合计 0.405 − 0.312 = 0.093。消融 · Instruct。完整 0.396 − 去掉检索奖励 0.360 = 0.036;0.360 − 去掉两者 0.333 = 0.027;合计 0.396 − 0.333 = 0.063。

柱高。所有视图统一以 0.405 为满格。主结果 Base:Direct 0.134/0.405=33.1%,Naive RAG 0.270/0.405=66.7%,ReSearch 0.319/0.405=78.8%,Search-R1 0.312/0.405=77.0%,AutoRefine 0.405/0.405=100%。主结果 Instruct:Direct 33.1%,Naive RAG 66.7%,ReSearch 0.331/0.405=81.7%,Search-R1 0.336/0.405=83.0%,AutoRefine 0.396/0.405=97.8%。消融 Base:w/o Ret 0.376/0.405=92.8%,w/o both 0.312/0.405=77.0%。消融 Instruct:w/o Ret 0.360/0.405=88.9%,w/o both 0.333/0.405=82.2%。这些百分比只用于画图,不作为论文指标。

规模:7B 也涨,但幅度略小

v5 的 Table 3 加了 Qwen2.5-7B。AutoRefine-7B 的 EM/F1/CEM 平均是 0.455/0.536/0.486,Search-R1-7B 是 0.408/0.483/0.443,绝对高 0.047/0.053/0.043。3B 上对应高 0.093/0.111/0.101。原文的结论是 7B 的增益约 0.05,略低于 3B;这与表内数字一致。

Table 3 节选 · 只转录 Avg 列(EM / F1 / CEM),逐基准列未转录。Qwen2.5-7B 与 3B 的 Search-R1 / AutoRefine 对照。
模型方法EMF1CEM
Qwen2.5-7B-BaseSearch-R10.4080.4830.443
Qwen2.5-7B-BaseAutoRefine0.4550.5360.486
Qwen2.5-3B-BaseSearch-R10.3120.3660.338
Qwen2.5-3B-BaseAutoRefine0.4050.4770.439

外部 refiner:加一个摘要器不够

Table 4 给 Search-R1 外接 BART 或 Qwen 摘要器。BART 版平均 0.317,比 Search-R1 的 0.312 只高 0.005;Qwen summary 版 0.328,高 0.016;Qwen summary+plan 版反而降到 0.301。AutoRefine 的 0.405 比最好的外部 refiner(0.328)高 0.077。论文的解释是:外部摘要器只做摘要,AutoRefine 还学会“内省缺什么、下一步搜什么”。

Table 4 完整转录 · Search-R1 外接不同 refiner 的七基准 EM 与 Avg。
方法NQTriviaQAPopQAHotpotQA2WikiMusiqueBamboogleAvg
AutoRefine0.4670.6200.4500.4050.3930.1570.3440.405
Search-R10.4210.5830.4130.2970.2740.0660.1280.312
+ Refiner (BART)0.3950.6190.4500.3370.2390.0650.1150.317
+ Refiner (Qwen, Summary)0.3990.6000.4450.3310.2640.0730.1800.328
+ Refiner (Qwen, Summary & Plan)0.3780.5620.4310.2990.2310.0590.1490.301

统计与检索深度

Appendix C.2 的三种子实验给了 mean ± std 和 T-test:AutoRefine 对 ReSearch p=5.49×10−6,对 Search-R1 p=2.85×10−6,原文写 p≪0.01。检索深度 k 从 1 到 7 变化时,AutoRefine 相对基线的平均增益在 0.04–0.1 之间,峰值 0.09 出现在 k=5;这些是正文对 Figure 6 的概括,页面没有逐点转录曲线。

发现 1:refine 把上下文压短,但保留答案词

论文对 Figure 5(a)(b) 的正文描述是:refine 块大约 100–200 token,检索文档(documents 块)至少约 600 token;同时 refine 动作的成功率与 <search> 动作接近。页面不把这些正文数值当表格数字,只引用正文的近似区间。机制上,RRet 要求标准答案的词出现在 refine 文本里,这直接逼着模型保留关键实体,而不是写一段泛泛的摘要。推断(由公式 (2) 的覆盖条件反推)

发现 2:单跳涨得少,多跳涨得多

Base 上 NQ 0.467 对 Search-R1-Base 0.421(+0.046),TriviaQA 0.620 对 0.583(+0.037),PopQA 0.450 对 0.413(+0.037);多跳的 2Wiki 是 +0.119,Musique 是 +0.091(0.157−0.066)。单跳问题通常一次搜索就能拿到答案,refine 的边际收益小;多跳问题需要把上一轮的证据整理成下一轮的查询,refine 的作用更大。这与论文的动机一致,但论文没有做“单跳/多跳分别训练”的对照,不能把差异完全归因于任务类型。推断

07

它解决不了:静态语料、3B/7B 规模、没有延迟账

这些限制决定了 0.405 能推广到哪里,以及“refine 更聪明”是否等于“系统更可用”。

限制 1

知识源是 2018 年的静态快照

检索器是 E5-base-v2,语料是 2018 年 12 月的 Wikipedia dump。实时搜索、网页广告、格式多变、时效性问题都没有覆盖;论文在 Limitations 里把 static retrieval corpus 列为限制。

限制 2

只测 3B 与 7B

v5 加了 7B 规模消融,但没有 70B、MoE 或 API 模型。更大模型是否还需要显式 refine,论文没有回答;v1 的 Limitations 原句是 “all experiments in this paper use 3B-parameter language models”,v5 已改成只列指标与静态语料。

限制 3

没有端到端延迟/费用

refine 是额外的生成步骤,搜索最多 5 轮;论文没有报告墙钟延迟、token 成本或费用。准确率提升是否值得这些开销,需要按场景测。

指标覆盖有限。主表用 EM;v5 的 Table 3 加了 F1 与 CEM,但仍以短答案 QA 为主。长答案、开放式生成、需要引用来源的任务没有实验。EM 对同义改写很苛刻,F1 也只能看词重叠,不能判断事实一致性。

奖励可以被“提取”而不是“理解”。RRet 只检查标准答案的词是否出现在 refine 文本里。如果标准答案是一个短实体,模型可以把含答案词的文本甚至整篇文档抄进 refine 拿到奖励,而不一定理解它。论文用“refine 在原始文档之后、答案之前”的模板降低这种风险,但没有做 reward hacking 实验。推断

训练步数有两处写法。Appendix B.1 写 200 steps,Table 5 写 250 steps。页面并列两处;这不影响主表数字,但复现时需要确认以哪个为准。

什么时候别用:如果任务只需要一次检索、答案是一句短事实,refine 的额外生成可能是多余开销;如果知识源必须实时更新,2018 年快照不适合;如果需要引用级可追溯性,refine 文本不是引用,仍需额外做来源对齐。反过来,在多跳、文档噪声大、答案需要跨文档整合的任务里,AutoRefine 的思路最直接:先把证据整理成可检查的中间文本,再继续推理。