SSRL
Search Agent · arXiv 2025 · 2508.10874v1

SSRL:不接一次外部搜索,把搜索智能体训出来

搜索 RL 要靠外部引擎产生轨迹,而 Search-R1 的 <search> 结果每一步都产生 API 费用;ZeroSearch 换成另一个微调过的 LLM 当引擎,又多一份模型开销。 这篇论文先测出一件事:答案常常就在参数里——Llama-3.1-8B-Instruct 在 Bamboogle 上 pass@1024 达到 87.2%,比 pass@1 高约 2.5 倍。于是它让策略模型自己扮演搜索引擎,用一份格式奖励 + 规则奖励把这种内隐搜索训成稳定的单次能力。 代价写在论文自己的表里:主表领先只对 Llama 成立,换成 Qwen2.5-7B 就落后于 ZeroSearch。

Yuchen Fan, Kaiyan Zhang, Heng Zhou 等 · 清华 / 上海 AI Lab / UCL / SJTU / CSCEC / 微信 AI 等 arXiv 2508.10874v1 ↗
TL;DR · 30 秒抓住核心

作者先不看训练,而是只做推理:让模型在一次生成里自己写 <search> 和自我作答 <information>,重复采样 K 次算 pass@k。 K 越大越准,曲线遵循 log c ≈ a·Kb 的拟合——说明知识在参数里,缺的是「把它稳定取出来」的方法。

取不出来就训练。RL 目标 (Eq. 4) 里本来要边训边查外部引擎;当检索器就是策略模型自己时 R 的分布与 πθ 相同,目标退化成 Eq. 5——「全模拟」(Full-Sim)搜索 RL。 奖励是结果对错(Eq. 6:+1 / −1)与格式布尔量 fformat ∈ {True, False} 按 λf = 0.1 组合成 Eq. 7 的四个常数(1 / 0.9 / 0.1 / 0);训练时把 <information> 的 token 从损失里屏蔽。

结果分两半。Llama-3.1-8B-Instruct 六个 QA 基准 EM 平均 43.1,高于训练时用 Google 的 Search-R1(37.1)和半模拟的 ZeroSearch(41.5),训练时间约为 ZeroSearch 的 1/5.53。 但把它训出来的技能直接接到真实 Google 上,Llama 反而掉了(K=3 时 35.5),只有 Qwen2.5-7B 涨到 47.9;而且 Qwen2.5-7B 上 SSRL 本身就低于 ZeroSearch。

43.1 avg EM
SSRL Llama-3.1-8B-Instruct,六个基准 EM 平均;Search-R1-Instruct 37.1,ZeroSearch-Instruct 41.5
Table 3
1/5.53
训练时间相对 ZeroSearch 的倍率(作者写「5.53× reduction in training time」,图 8 左轴是训练步数随小时数)
§3.4.1 · Figure 8
47.9 avg EM
Qwen2.5-7B-Instruct 纯 SSRL 30.2;Sim2Real K=3(最多三次真实 Google 替换自编信息)47.9
Table 4
01

搜索 RL 的瓶颈不在算法,在「每个 rollout 都要问一次外部引擎」

读完这节,你要知道为什么作者先测 pass@k、再谈训练。

把 LLM 训成搜索智能体的标准做法是:模型写 <think>、发出 <search> 查询、拿回 <information>、再思考,直到给出 <answer>。Search-R1 在本地维基语料上跑这套流程,在线版本则直接打 Google / Bing。RL 训练需要大量 rollout,而每条轨迹里可能有多次搜索调用——§1 原句是「interacting with real web search engines remains costly …, especially given the large number of rollouts and multi-turn tool calls required during RL training」,即成本来自实时网页搜索交互,训练期 rollout 数量与多轮工具调用会把它放大 (§1)。

但在换环境之前,作者先问了一个更基础的问题:如果完全不搜索,模型自己知道多少? 这正是 pass@k 能回答的问题:给定一个问题采样 K 个答案,其中至少一个正确就算命中。它衡量的是「知识库覆盖率」,而不是「一次答对的稳定性」。两者之间的差距,就是训练要补的空间。

pass@k = (1/N) · Σi [ 1 − C(K−Ci, k) / C(K, k) ]
Eq. 1(§2.2 Task Formulation)· 每道题采样 K 条、其中 Ci 条正确,N 为题目数;k 是抽取数。论文在 §2.4 / Figure 3 用 K = 1024 采样

实验覆盖 Llama-3.x、Qwen2.5、Qwen3 三个家族和 0.6B–72B,共七个基准(Table 2):TriviaQA、NQ、HotpotQA、2Wiki、Musique、Bamboogle 属于事实/多跳问答,BrowseComp 是开放网页浏览题。采样温度 0.7、top-p 0.95、max tokens 8192 (§2.3)。

两个结果值得记住,它们分别说明「有上限」和「上限高」:

所以真正的问题

知识在上限里,但「挑出对的答案」比「答得出来」难得多

论文在 §2.5.2 试了 maj@k(多数投票):即使把样本数加到 1024,提升依然很小,因为错误答案会成批地重复出现(Figure 6)。这就是 SSRL 的切入点——不靠事后投票,而是训练模型自己把内隐知识用对。

顺带一个与直觉相反的观察:数学 RL 里常被当作好底座的 Qwen,在自搜索场景的 pass@k 上限反而低于 Llama (§2.4),作者据此认为「搜索先验」与「推理先验」不是同一件事。

02

前人给了两条替代路:真引擎太贵,假引擎要两份模型

论文自己的术语表(Table 11,§3.5.3 末)把「训练/推理时用谁做搜索引擎」分成四档,这里是其中三档。

Full-Real

Search-R1:真引擎 / 语料

训练时用 e5 + 维基语料检索,上线接 Google。知识新鲜、噪声真实,但 RL 要海量 rollout,每步搜索都是成本。

Semi-Real

ZeroSearch:另一个 LLM 当引擎

用一个微调过的 LLM(论文称「Simulation LLM」)模拟搜索返回。便宜,但多养一份模拟器,而且引擎和被训模型是两份参数。

Full-Sim

SSRL:策略模型即引擎

只训一份模型,它生成的 <information> 就是检索结果。零外部调用,但知识冻结在预训练数据里。

单看训练集配置也能看出差距:论文在附录 B.2.1 里写明 search baselines 与 ZeroSearch 都沿用 R1 的设置——batch 256、lr 1e-6,并且 ZeroSearch 的 max turn 是 2;Search-R1 在测试阶段换成 Google。SSRL 自己则是每条 prompt 采 5 条 rollout、训练 5 个 epoch、max response length 4096,训练全在 8×A800 单节点上 (§3.3)。

代价对照是这篇的核心卖点,但对照只在一个模型家族上全面成立——见 §06。

03

信息源就是自己:目标函数里的 R 消失了,奖励变成「格式 × 对错」

看懂这两个式子,再加上 §3.2 的信息屏蔽与复合奖励,,基本就拿到了这篇的全部机制。

maxπθ Ex∼D, y∼πθ(·|x; R) [ rφ(x, y) ] − β · DKL[ πθ(y|x; R) ‖ πref(y|x; R) ]
Eq. 4 · 带外部检索 R 的搜索智能体 RL 目标(Search-R1 / ZeroSearch 一类)
maxπθ Ex∼D, y∼πθ(·|x) [ rφ(x, y) ] − β · DKL[ πθ(y|x) ‖ πref(y|x) ]
Eq. 5 · SSRL:R 由 πθ 自回归生成,分布与策略相同,于是从目标里消掉

rewards 用的不是 reward model,而是两个可验证信号(§3.2)。附录 C 的 Listing 1 给了格式奖励的判定函数,它返回 0~1 的连续分数 s(正文 Eq. 7 的 fformat 却是 True/False,两者如何对应论文未说明,见下);结果奖励是个符号函数:

R(ŷ, y) = +1 if is_equivalent(ŷ, y) else −1
Eq. 6 · 结果奖励(EM 口径,§3.2 · 评测温度 0.0 见 §3.3)
rφ(yi, y) = 1  if is_equivalent(ŷ, y) ∧ fformat(y) = True
1 − λf  if is_equivalent(ŷ, y) ∧ fformat(y) = False
λf  if !is_equivalent(ŷ, y) ∧ fformat(y) = True
0  if !is_equivalent(ŷ, y) ∧ fformat(y) = False    (λf = 0.1 → 1 / 0.9 / 0.1 / 0)
Eq. 7(§3.2 Reward Modeling)· 论文里 fformat(y) 取 True / False 两值,奖励因此只有四个常数:对 ∧ True → 1;对 ∧ False → 0.9;错 ∧ True → 0.1;错 ∧ False → 0。λf = 0.1 原文:「to prioritize correctness while maintaining structured reasoning」

注意 Eq. 7 的布尔 fformat 与附录 C Listing 1 的连续分数是两套东西:Listing 1 的 format_reward 最后一行返回 min(score, 1.0) * ratio(think ≤ 8 时),可以取 0~1 之间的任何连续值(如 A 用例的 0.5)。论文正文没有说明这个连续分数 s 如何映射到 Eq. 7 的 Boolean fformat;下面分别称它们为「Listing 格式分 s」与「Eq. 7 的 f」。这是原文自身未接上的两处(Listing 1 是代码实现,Eq. 7 是正文公式),页面并列呈现,不做消解。

自己动手:Listing 格式分 s 与 Eq. 7 奖励怎么算

模拟器先按 附录 C Listing 1 原样算连续分数 s,再按 Eq. 7 的布尔口径给最终奖励;两者之间的映射见下方「页面约定」。覆盖 Listing 1 的这些检查:标签白名单(6 个用例都假设通过,分支保留)、search_num = information_num、score = (1/max_turn)·think_num(max_turn = 2)、ratio、think > 8 返回 0。未覆盖(用例均假设通过):空内容、search 内容必须单行、占位词(your query / your thoughts / your answer / your information)、len(tags) < 4、起始必须是 <think> 后接 </think>、结尾必须是 <answer></answer>、以及中间每个 search 后必须紧跟 /search · information · /information 的配对与顺序。此外 Listing 1 本身没有「think / search / info 至少 1 个」这一步——那只是页面按用例结构直接给的简化假设。页面约定:f = (s > 0),即 Listing 返回正分记为 True、返回 0 记为 False。下面的 f 与 r 都按这条约定 + Eq. 7 计算(λf = 0.1)。

当前组合
手算对账两组参数 → 结果,与上面按钮逐位一致(默认按钮状态)

组 1:用例 A(2 think、1 search、1 information),答案正确,Tag 取 ✓。

  • 合法性:标签序列 think /think search /search information /information answer /answer 全在白名单里,search_num = information_num = 1,结构通过。
  • Listing 格式分:score = (1/max_turn)·think_num = (1/2)·2 = 1;think_num = search_num + 1,ratio = 1;think_num ≤ 8 → s = min(1,1)·1 = 1。
  • 页面约定:s = 1 > 0 → f = True。
  • Eq. 7:对 ∧ f=True → 1。同一 Tag 取法若把 f 判为 False,Eq. 7 给 1 − λf = 0.9(而不是 1)。

组 2:用例 C(4 think、3 search、3 information),答案错误,Tag 取 ✓。

  • 合法性:三数相等,score = (1/2)·4 = 2;think_num = search_num + 1 = 4 → ratio = 1;min(2,1)·1 = 1,think_num ≤ 8 → s = 1。
  • 页面约定:f = (s > 0) = True。
  • Eq. 7:错 ∧ f=True → λf = 0.1。
  • Tag 取 ✗(约定 f = False)时:错 ∧ f=False → 0。

另附边界与口径:用例 B(3 ≠ 1)与用例 F(2 ≠ 1)在 Listing 1 的 search_num != information_num 处返回 0,故 s = 0 → f = False:答案对时 0.9、错时 0。用例 D 的 think_num = 9 > 8 直接返回 0,同上。Eq. 7 不区分 s 的大小:f 只有 True/False 两档,Listing 的连续 s 只决定 f 的取值(页面约定 f = (s > 0)),这是 Eq. 7 原文口径。以上均为确定值,无标准差。

另一个不显眼但关键的开关:<information> 不做 loss

Search-R1 那类工作中,外部检索到的文本天然不计入策略损失。在 SSRL 里 <information> 是模型自己编的——很自然会想「那就一起训吧」。论文的做法相反:仍把它们从损失里屏蔽。原因在 §3.5.1 给了:屏蔽(preventing the model from simply copying retrieved information)迫使模型更深入地走推理过程,屏蔽后不再能「拷贝」,训练动态显示 search 次数显著增加(附录 B.3.3 · Figure 14 左),轨迹更完整、推理更深。

04

能不能训、训得动,取决于同步与异步的取舍

这节讲清楚训练配置与「为什么离线反而更快」。

项设置出处
算法GRPO(默认),另测 PPO / REINFORCE++ / DAPO / KL-Cov§3.3, Table 10
训练数据NQ + HotpotQA 混合§3.3
batch / lr / warmup256 / 1e-6 / 62 步§3.3
rollout每条 prompt 5 条;temperature 1.0§3.3
KL 系数 β0.001§3.3
max response length4096§3.3
epoch 选点5 epoch,取验证集平均最高的 checkpoint§3.3
硬件单节点 8× A800§3.3

训练配置(§3.3 · Table 10 给出算法对比)。附录 B.3.4 的 Table 25 另测 group size = 10:Llama-3.2-3B 的 avg 从 35.2 到 35.5、Qwen2.5-3B 反而从 26.0 掉到 24.5。

为什么 Fully-Sim 能省时间?关键在于信息源不是外部服务:一条 rollout 只需一次前向,<information> 由同一个策略一并生成;turns 由模型决定,而不是等 API 返回。§3.4.1 的 Figure 7 显示 Llama 训练初期 response length 和 search 次数都在下降——模型先被格式奖励逼回结构,后期才发展出拆题与自我反思。

Figure 8 是作者对效率的量化:同模型同硬件,SSRL 完成训练所需时间只有 ZeroSearch 的 1/5.53。注意作者给的是「reduction」,而 Figure 8 左图纵轴是 training steps 对 hours,即「达到相同步数所需的墙钟时间」推断(依据 Figure 8 左图轴标注:ZeroSearch 约 25 小时、SSRL 约 5 小时),不是吞吐率。

一条反直觉的推论

离线训练让「多采样」变成纯收益

在线引擎下,多 rollout 就是多 API 调用;论文在 §3.5.4 指出,正因为训练完全离线,更多 rollout 不会带来额外成本——这解释了为什么它能放心每条 prompt 采 5 条、做 5 个 epoch。

05

一条轨迹里,谁的 token 进 loss、谁被屏蔽

对照 Figure 1 左与 §2.2 的 Prompt 模板(Table 1)、§3.2 的信息屏蔽与 Eq. 6–7,把「训练一条 rollout」拆成五个动作。

Prompt · 问题 x <think> 开始推理 <search> query 策略自己生成 <information> 自编 token 屏蔽 loss <answer> ŷ 与 y 比对 多轮:再写 <think> 与下一组 <search> 结果奖励 R ∈ {+1, −1} Eq. 6 · EM Listing s ∈ [0, 1] → Eq. 7 f ∈ {True, False} s→f 映射正文未说明 r = Eq. 7 (R, f ∈ {T, F}, λf = 0.1) GRPO 组内归一化 → 更新 πθ 外部引擎(可选) 仅 Sim2Real 推理时 粉 = 推理 token 进 loss · 蓝 = information 屏蔽 · 虚线 = 仅推理时生效
流程重绘,依据 Figure 1(左:Full/Semi-Real 与 Full-Sim 对比)、§2.2 标签模板、§3.2 信息屏蔽与 Eq. 6–7

把「训练最后一步选点」也算进去:每个 epoch 结束看验证集平均 EM,保留最高的 checkpoint。这条和 Table 25(附录 B.3.4)的 group-size 结果放在一起看,说明论文对训练稳定性并不完全不在乎——它花了篇幅说明「有信息屏蔽时 search 次数更高」(附录 B.3.3, Figure 14 左)。

06

主表赢在 Llama,换 Qwen2.5-7B 就输给 ZeroSearch

两处结论:同一方法在论文自己的附录表里就出现了反例;Sim2Real 是分模型成立的。

主表(Table 3):六个 QA 基准,指标为 EM

训练数据 NQ + HotpotQA,评测同一批六基准,BrowseComp 因难度和训练数据缺失被排除(§3.3)。下表只挑与 SSRL 最直接可比的一列 Avg。

模型类型Search-R1-BSearch-R1-IZeroSearch-BZeroSearch-ISSRL-BSSRL-I
Llama-3.2-3B对照32.628.234.028.530.535.2
Llama-3.1-8BSSRL 领先40.437.127.941.534.443.1

Table 3(节选)· Avg = NQ、TQ、HotpotQA、Musique、2Wiki、Bamboogle 六基准 EM 平均 · B = Base 起点,I = Instruct 起点 · 本表每个模型节选 6 行,完整 12 行见原文

细拆一下这组数(Python 复算):

反例:Qwen2.5-7B 在附录表(Table 23)里输给 ZeroSearch

模型(Qwen2.5-7B-Instruct)NQTQHotpotQAMusique2WikiBamboogleAvg
Search-R1-Instruct42.463.432.817.433.226.435.9
ZeroSearch-Instruct43.665.234.618.435.227.837.5
Self-Search-Instruct31.444.426.011.831.036.830.2

Table 23(节选,附录 B.3.1,Qwen2.5-7B-Instruct 六基准 EM)· 同一模型上 SSRL 30.2 比 ZeroSearch-Instruct 37.5 低 7.3 个百分点,相对低 19.5%(7.3 / 37.5)

Sim2Real:四个模型里只有 Qwen2.5-7B 随搜索次数单调上涨

Zero-shot CoTSSRLSim2Real K=1Sim2Real K=3Sim2Real All
无真实搜索(CoT / 纯 SSRL) 接入真实搜索

横轴是五次设置,纵轴为该模型的六基准 Avg EM。K 指「用真实 Google 替换模型自编信息的最多轮数」,见 §3.4.2。

读法:Qwen2.5-7B 从纯 SSRL 30.2 一路涨到 K=3 的 47.9(+17.7 个百分点,相对 +58.6%),是全表最漂亮的一段;Llama-3.2-3B 在 K=3 小幅涨到 41.9;但 Llama-3.1-8B 从 43.1 掉到 K=3 的 35.5(−7.6 个百分点,尽管 K=1 时还有 41.6),Qwen2.5-3B 在 K=1 时仅比纯 SSRL 高 3.8 个百分点。

还有一组同样值得看的数据:只训 TTRL、完全不用标准答案(Table 6),比同数据的 GRPO 高得多。Llama-3.2-3B 从 35.2 到 56.1(+20.9 个百分点,相对 +59.4%);但 Llama-3.1-8B 只有 48.7(+5.6 个百分点,相对 +13.0%)。作者在 §3.4.3 也承认 TTRL 模型「over-relying on internal knowledge」,Sim2Real 时几乎只搜一次。注意 Table 8 只列了 Llama-3.2-3B 与 Qwen2.5-3B:3B 的 TTRL→Sim2Real 从 56.1 到 54.5,Qwen2.5-3B 从 43.5 到 42.9。

规律:SSRL 抬高的是内隐知识利用率,不是「接过 Google 就会用」。这一点与 §2.5.1 的发现一致:Self-Search 设定下,加长思考、多轮自搜索、加反思都「同 token 预算下不如朴素重复采样」(Figure 4、5)。

07

三类场景别用 SSRL;五件事它没有解决

一条是「方法本身的前提失败」,两条是「换环境后反而变差的已知形态」。

边界一

知识有截止日期

论文在 §3.4.2 明说「inherent knowledge within these models remains fixed」。对时效性问题、内部文档、私有库,Full-Sim 根本无从检索。附录 B.3.5 的 Table 27 也给了旁证:SimpleQA 上纯 SSRL 只有 2.7–7.0,接真实搜索 / Entropy-guided 后跳到 30–51——靠的是外部知识。

边界二

Sim2Real 不是自动接上

Llama-3.1-8B 在 K=1 时 41.6、K=3 时 35.5,作者把原因归到「self-search generated information 与外部信息之间的 gap」。如果目标就是「训完立刻能用真引擎」,那 Qwen2.5-7B 的经历(30.2 → 47.9)才是正面例子;同一个方法换模型就能反转。

边界三

「同 token 预算下更长的思考没有帮助」

§2.5.1 报告的 Qwen3 结果显示,更多 thinking token 并不换来更高准确率;同预算下 Multi-turn 与 Reflection 通常还比朴素重复采样差。作者的解释是这时的瓶颈是「知识使用」而非「推理」(§2.5.1 末:「knowledge utilization may be more advantageous than reasoning in these scenarios」)。

还没解决的

一句话:SSRL 是「在知识已经够用的问题上,把答案更稳定地取出来」的一种廉价训练方案;知识本身不够、或部署时依赖实时外部信息时,它不能替代 Full-Real 检索。