Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning

Bowen Jin, Hansi Zeng, Zhenrui Yue, Jinsung Yoon, Sercan Ö. Arık, Dong Wang, Hamed Zamani, Jiawei Han (UIUC · UMass Amherst · Google Cloud AI) · 2025-03 · arXiv:2503.09516 · COLM 2025 · github.com/PeterGriffinJin/Search-R1
关键词: RL · search engine · retrieval-augmented reasoning · retrieved-token masking · PPO/GRPO · multi-turn rollout · outcome reward

速读卡片 (TL;DR)

一句话:把搜索引擎当作 environment 的一部分,让 LLM 在 <think>/<search>/<information>/<answer> 这套结构里自主地选择什么时候、查什么、查几次,只用 exact-match outcome reward 训 PPO/GRPO,但对检索回来的 token 做 loss masking ——这一个细节是稳定训练的核心。

+24%
Qwen2.5-7B 平均相对提升 vs RAG
0.431 → 0.343
去掉 retrieved-token mask 后 7B Avg EM 跌 9pt
7 datasets · 1 reward
仅 EM,没有 process reward / format reward

立场:Search-R1 是 DeepSeek-R1-Zero 的"加搜索"自然延伸——证明纯 outcome reward + RL 足以让 LLM 学会 multi-turn search 这一类需要外部世界交互的能力,前提是别把 environment 返回的 token 也当成自己的输出去做梯度。


1 · 动机:为什么 RAG / SFT-Tool-Use 都不够

1.1 历史脉络:LLM + 外部知识三个时代

2020 - 2024 年间,把外部知识喂给 LLM 一共出现过三套主流范式。每一套都解决了上一套的某个痛点,但都留了一个新坑给下一套。

2020 · RAG 2022 · IRCoT/ReAct 2023 · Toolformer SFT 2025 · Search-R1 RAG 单轮检索 query → top-k → 拼 prompt × 多跳跳不动 Prompted multi-turn IRCoT / ReAct: 不训只 prompt × 没学会查得好 SFT 工具使用 Toolformer: 标 trajectory + SFT × 数据贵 + 不可微 Search-R1 (RL) outcome reward + RL ✓ 自主学会用 三次失败的尝试,把"让 LLM 学会调搜索"逼到了 RL 上
RAG 把"取什么"写死了;IRCoT/ReAct 让 LLM 自己写 query 但不训,所以泛化不到训练数据没覆盖的领域;Toolformer 用 SFT 训,但需要大规模高质量 trajectory 标注且 search 不可微,scale up 困难。Search-R1 用 RL 把这三件事一次性绕开。

1.2 别的方案为什么不够

Paper Section 2 把这件事讲得偏温和,这里展开一下每个 baseline 实际卡在哪里:

方案核心机制致命短板
RAG (Lewis 2020)固定 1 轮 retrieve,把 top-k 拼进 prompt多跳 QA 第二跳的 query 需要看到第一跳的答案才能写——单轮 RAG 没机会
IRCoT (Trivedi 2022)Prompted iterative retrieval什么时候停、写什么 query 都靠 in-context demonstration,小模型/陌生 domain 立刻崩
ReAct (Yao 2023)Prompt 让 LLM 输出 Thought/Action/Observation同上,frozen LLM,不优化交互能力
Toolformer (Schick 2023)自蒸馏 trajectory + SFT标注成本高;search 是离散非可微操作,SFT 等价于 imitation,不能修自己犯的错
Self-RAG (Asai 2024)SFT + reflection tokens仍是 SFT 框架,且 reflection 信号需要 GPT-4 教师
Search-o1 (Li 2025)把推理模型 (o1-style) 套 prompt 调 search不训,小模型上反而比 RAG 还差(见 Table 2 0.206 vs 0.304)
R1-zero (Guo 2025)纯参数化推理 + outcome RL不能访问外部知识,过期信息 / 长尾事实直接幻觉

注意一个微妙之处: Toolformer 这条线之所以走不下去,核心不是"工具难学",而是 search 这一步在 forward 里是 非可微 ——你没法让 search 操作对 loss 求梯度,所以 SFT 等于先用 teacher 标轨迹再 imitate,模型永远学不到"我这条 query 写错了→retrieve 拿回垃圾→应该改写 query"这种纠错回路。RL 在这里的优势不是"更强",而是"它原生就不需要 retrieve 步骤可微"——只需要最后能给 trajectory 打分。

1.3 为什么这事不平凡

把 RL 接到 search 上听起来直白:就把 search 当工具调用嘛。但作者点出了三个非平凡的工程/理论难题:

  1. RL framework & stability: 在 rollout sequence 里,LLM 自己生成的 token 和 search engine 返回的 token 混在同一条序列。PPO/GRPO 默认对整条 sequence 算 token-level loss——但 retrieved tokens 不是策略生成的,对它们算 policy gradient 等于"奖励模型记住这段网页文本",训练会失稳。
  2. Multi-turn interleaved reasoning: 不像数学题那种 single-shot CoT, search 任务的 trajectory 长度不固定,一次还是五次取决于问题难度。RL 训练要能 handle 变长 rollout、要能让 model 自己决定 stop。
  3. Reward design: 给 process reward (中间每一步好不好) 听起来合理,但需要 reward model,而 reward model 在大规模 RL 里出名地脆弱 (reward hacking)。能不能只用最终答案对不对 这一个 0/1 信号训出多步 search?——R1 在数学上证明可以,作者要把这个结论搬到 search 上。
关键洞察: 这三个问题之中, retrieved-token masking 是 #1 的具体解。后面会看到,去掉这一个 mask, 7B 在 7 数据集平均从 0.431 跌到 0.343 —— 接近 RAG baseline 的水平 (0.304),整套 RL 几乎白训。

2 · 背景速查

术语含义
PPOProximal Policy Optimization. Actor-critic, 用 clipped ratio 限制策略更新幅度,需要一个独立的 value head/critic 估 advantage (GAE)。
GRPOGroup Relative PO (DeepSeek). 抛掉 critic, 一个 prompt 采 G 条 rollout, 用组内平均 reward 当 baseline 算 advantage。收敛快,但训练后期可能 reward collapse。
RAGRetrieval-Augmented Generation. query → retriever (E5/DPR) → top-k passages → concat 进 prompt → LLM 生成。
multi-hop QA答案需要 2 个以上事实串起来。例: "Curious 香水的代言人出生在哪个城市?" 需要先查代言人 = Britney Spears, 再查 Britney 出生地。HotpotQA / 2WikiMultiHopQA / Musique / Bamboogle 都是这类。
exact match (EM)预测字符串 normalize 后是否等于 gold answer。Search-R1 唯一的 reward。
retrieved-token mask本文核心。在 <information>...</information> 里的 token 全部不参与 policy gradient 和 KL 计算。
rollout从当前 policy 采一条 trajectory 的过程。本文 rollout 里 LLM 会主动调用 search engine, 所以 environment 真的参与 trajectory 的形成。
E5 retrieverMicrosoft 的 dense embedding retriever, 本文检索器选择。Knowledge corpus 是 2018 Wikipedia dump。
速复习 · PPO 目标 (single-step, 无 search 版)
JPPO(θ) = 𝔼[ min( rt(θ) At, clip(rt(θ), 1−ϵ, 1+ϵ) At ) ]

其中 rt(θ) = πθ(yt|·) / πold(yt|·)。Search-R1 在这个 sum 前面挂一个 indicator I(yt)=1 仅当 yt 是 LLM 自己生成的 token (而不是 retrieved 的)。

速复习 · GRPO 与 PPO 差在哪

GRPO 把 critic 砍了,改用 group-relative baseline: 对同一 prompt 采 G 条 rollout, advantage Âi,t = (Ri − mean(R)) / std(R)。少一个网络,显存省一半,但因为 advantage 全局共享,稍稳定性差。GRPO 还把 KL 从 reward 移到 loss 里直接加。


3 · 方法详解

3.1 训练范式: rollout 时让 environment 参与 trajectory generation

普通 RLHF/R1 的 rollout 很简单——LLM 自己一路 sample 到 <eos>,environment 不出现。Search-R1 不一样: rollout 是一个真正的 agent-environment 循环,LLM 生成到 </search> 就被打断,parse 出 query 去打 retriever,把返回 doc 塞进 <information>...</information> 再交回 LLM 续写。

Policy LLM πθ 生成 token Search Engine ℛ E5 + Wiki 2018 top-3 passages 遇到 </search> 触发: parse query 返回 doc → 包进 <information> Rollout trajectory: <think>... <search>Q1</> <info>doc</info> <think>... <search>Q2</> <info>doc</info> <answer>...</> 蓝 = LLM 生成 (参与 loss); 黄 = environment 返回 (mask 掉,不参与 loss) Agent-Environment Interleaved Rollout 直到 <answer> 或达到 action budget B
关键点: rollout sequence y = πθ(·|x) ⊕ ℛ —— 一条交错序列。这个 ⊕ 是 paper 用的符号,意思是"interleaved retrieve-and-reason"。算法上对应 Algorithm 1: 内层循环逐 token decode,直到吐出 </search></answer> 才暂停。

Worked example: 看一条 rollout 实际长什么样

Paper Appendix 给的 Case Study 11 用的题: "Curious 是哪位歌手代言的女性香水?这位歌手出生在哪个城市州?" Ground truth: McComb, Mississippi。R1 (无 search) 答错: "Houston"——因为它幻觉成了 Beyoncé。Search-R1 的 rollout 实测如下 (略缩):

[user] Curious is a women's fragrance by a singer born in what city and state?

[LLM 自生成]
<think> I need to find out which city and state a singer, by whom the women's fragrance
"Curious" was created, was born in. </think>
<search> Curious fragrance information </search>
                                  ↑ 解析到这里就被打断

[Environment 注入,不参与 loss]
<information> Doc 1 (Title: "Curious (fragrance)") ... Curious is a women's fragrance
by Britney Spears for Elizabeth Arden ... </information>

[LLM 自生成]
<think> I need to find out which city and state Britney Spears, the singer behind
"Curious" fragrance, was born in. </think>
<search> Britney Spears birthplace </search>

[Environment]
<information> ... Spears was born in McComb, Mississippi, the second child of ... </information>

[LLM 自生成]
<think> Since Britney Spears was born in McComb, Mississippi, I need ... </think>
<search> McComb, Mississippi location </search>
<information> ... McComb is a city in Pike County, Mississippi ... </information>
<think> I have found ... </think>
<answer> McComb, Mississippi </answer>        ← EM(pred, gold) = 1, reward = 1

注意第三次 search 是"过度小心"——模型已经有 McComb 了还要确认一下,这本身是训练里学出来的 self-verification 行为,paper 在 case-study 里专门讨论这件事。

3.2 Retrieved-token masking (本文最关键的方法细节)

这是 Search-R1 的命门。先问"为什么不做 mask 会出事?"

PPO/GRPO 默认对整条 rollout sequence 上每个 token 都算 ratio πθ(yt|y<t)/πold(yt|y<t) 然后乘 advantage。如果 yt 是检索到的 doc 里的 token (它压根不是 policy 采出来的, 而是 environment 写进去的), 那么这一项的语义就崩了:

Token-level loss contribution model-generated (I=1, 参与 loss) retrieved (I=0, masked,不参与 loss) advantage × ratio <think> <search>Q <information> doc... → 0 (masked) <think> <search>Q <information> doc... → 0 (masked) <think> <answer> Indicator I(yt) ∈ {0, 1}: 是 LLM 自己生的 token → 1, 是检索回来的 → 0
Loss masking 的可视化: 检索段 (黄) 的每个 token 在 PPO objective 的求和里被强制乘 0。这同时也用在 KL 惩罚项上 —— KL(πθ‖πref) 也只在 model-generated tokens 上算。这一笔很重要: 否则 KL 会强行把模型在 retrieved span 上的分布拉回 reference policy, 而 reference policy 完全没见过 retrieve 注入这件事, 等于强行注入噪声。

Worked example: 数值化看看 mask 的影响

设 rollout 长度 |y| = 1000 tokens,其中 LLM 自生成 350,检索注入 650 (3 个 passages × 200+ tokens 很常见)。假设 advantage A=+1 (答对了)。

w/o maskw/ mask
对 LLM tokens 算 gradient350 项350 项
对 retrieved tokens 算 gradient650 项 (无意义信号)0 项
归一化分母 (token 数)1000350
有效"信号比"35%100%

定量上,paper Table 4 直接给了消融: Qwen2.5-7B-base + PPO, 平均 EM 从 0.343 (无 mask) 提升到 0.431 (有 mask), 相对提升 26%。每个数据集都涨,multi-hop 涨得更多 (HotpotQA: 0.325 → 0.433, Bamboogle: 0.304 → 0.432)。

3.3 Reward design: outcome-only, 仅 EM

整个 reward 就一行: r(x, y) = EM(apred, agold) ∈ {0, 1}。

没有:

"为什么这样设计 / 反向论证": 如果引入 process reward (比如奖励每次 search 都成功 retrieve 相关 doc),会有两个 failure mode:

  1. 模型为了刷 process reward 学会多 search 但 search 没用 ——增加无谓 retrieve 次数
  2. 需要训练一个 retrieve-quality reward model,而这个 model 本身可能不准, hack 起来比 outcome reward 还容易

实测 Figure 2(d) 显示模型在没人教的情况下也会逐步学到"多 search 几次", valid search count 从 ~1.4 涨到 ~2.0 —— 因为多 search 真的能提高最终 EM,outcome reward 自己就把这件事 incentivize 了。

3.4 Training Template

训练用的 system prompt 几乎是空的:

Answer the given question. You must conduct reasoning inside <think> and </think> first every time you get new information. After reasoning, if you find you lack some knowledge, you can call a search engine by <search> query </search>, and it will return the top searched results between <information> and </information>. You can search as many times as you want. If you find no further external knowledge needed, you can directly provide the answer inside <answer> and </answer> without detailed illustrations. ... Question: {question}.

注意作者刻意规定:

"We deliberately limit our constraints to this structural format, avoiding any content-specific biases"——让 RL 的 learning dynamics 保持可观测、未污染


4 · 公式: 带 mask 的 PPO / GRPO 目标

4.1 总目标 (Eq. 1)

maxθ 𝔼x∼𝒟, y∼πθ(·|x; ℛ) [ rφ(x, y) ] − β·𝔻KL[ πθ(y|x; ℛ) ‖ πref(y|x; ℛ) ]

记号: y = πθ(·|x) ⊕ ℛ —— 交错 rollout sequence。条件 "; ℛ" 表示这条 sequence 是检索器一起生成的。这件事最大的语义差异: 同一个 prompt x 在不同 random seed 下会得到结构完全不同的 y (search 几次、查什么都可能变),而 RAG 范式下 y 是 deterministic 的 retrieve+generate。

4.2 PPO with Search Engine + masking (Eq. 2)

JPPO(θ) = 𝔼x∼𝒟, y∼πold(·|x; ℛ) [
1 / Σt=1..|y| I(yt) · Σt : I(yt)=1
   min( ρt(θ) At,   clip(ρt(θ), 1−ϵ, 1+ϵ) At )
]

其中 ρt(θ) = πθ(yt | x, y<t; ℛ) / πold(yt | x, y<t; ℛ), 是 importance ratio。 At 用 GAE 估。

逐项拆解:

  1. 外层期望: 从 old policy 采 trajectory (PPO 的 off-policy 写法)。注意采的时候 ℛ 真实参与——所以 rollout 必须 online 跑搜索,不能预先离线生成。
  2. 红色归一化分母 1/Σ I(yt): 只对 LLM tokens 数目归一,不算 retrieved tokens 进分母。Paper 把这件事写在公式里 ——很多实现里会忘掉这一步导致 effective loss 被 retrieved 长度稀释。
  3. indicator I(yt): 这个 mask 在 forward 里就已经知道——你 parse rollout sequence 时,<information>...</information> 的 span 是 environment 写进去的,直接打 mask=0。
  4. clip ratio: PPO 标配,ϵ 一般 0.2,限制单步更新幅度避免 policy 跳出 trust region。

4.3 GRPO with Search Engine + masking (Eq. 3)

JGRPO(θ) = 𝔼x, {yi}i=1..G ∼ πold [
  (1/G) Σi=1..G 1 / Σt I(yi,t) · Σt : I=1 min(ρi,t Âi,t, clip(·) Âi,t)
  − β · 𝔻KL[ πθ ‖ πref ]
]

差异点 vs PPO:

4.4 退化检验

I(yt) ≡ 1 (没有 retrieved tokens), 且 trajectory 只有一步 (无 search),公式退化回标准 PPO/GRPO。所以 Search-R1 可以看作把标准 RL 的 sample 空间从 "single response" 扩展到 "interleaved response + retrieval",再加一个 token-level mask 把 environment 段切掉。这是个很干净的扩展。

4.5 物理直觉

把 mask 想成: RL 只对"我能控制的东西"算账。Search engine 返回什么不在 policy 的控制下,所以不能也不应该归功/归罪给它。这跟经典 RL 里 "stochastic environment transition 不能反传梯度" 是同一个直觉的离散版本。


5 · 实验关键结果

5.1 主表 (Table 2 of paper, Qwen2.5-7B-Base + PPO)

MethodNQ†TriviaQA*PopQA*HotpotQA†2Wiki*Musique*Bamb.*Avg.
Direct inference.134.408.140.183.250.031.120.181
RAG.349.585.392.299.235.058.208.304
Search-o1.151.443.131.187.176.058.296.206
R1-base (无 search).297.539.202.242.273.083.296.276
Reject. sampling (SFT-trajectory).360.592.380.331.296.123.355.348
Search-R1-base.480.638.457.433.382.196.432.431

† = in-domain (训练里见过 NQ + HotpotQA), * = out-of-domain。所有 7 个数据集都 SOTA。平均 EM 从 RAG 的 0.304 → 0.431, 相对提升 41.7% (paper 摘要写 24%, 但摘要里的 24% 是对 RAG baseline 平均的 average relative improvement, 算法不同; conclusion 段写的 41% 才是最大版本,两者都正确,只是分母选法不同)。

5.2 retrieved-token masking 消融 (Table 4, 最 load-bearing)

MethodNQTriviaQAPopQAHotpotQA2WikiMusiqueBamb.Avg.
w/ mask.480.638.457.433.382.196.432.431
w/o mask.388.567.391.325.321.108.304.343

掉 9 个点。每个数据集都掉。这是整篇 paper 最重要的单一证据: 去掉 mask, RL 几乎白训, 跟 rejection-sampling SFT 同档。

5.3 PPO vs GRPO (Section 5.1 + Table 3)

5.4 训练动态 (Figure 2)

三件有意思的事:


6 · 与同类工作对比

方法训练?多轮 search?核心信号vs Search-R1 缺什么
RAG (Lewis 2020)×单轮不学 query 改写,多跳无能
IRCoT (Trivedi 2022)× (prompt)不训,泛化差
ReAct (Yao 2023)× (prompt)同上
Toolformer (Schick 2023)SFT多轮imitation需 trajectory 标注,不能纠错
Self-RAG (Asai 2024)SFT✓ (reflection)GPT-4 teacherSFT 框架,reward 不是 task outcome
LeRet (Hsu 2024)RL单轮 query 重写retrieval recall仅训 query 写法,不学 reasoning 结构
Search-o1 (Li 2025)× (用 R1/o1 prompt)不训; 小模型反而拖累
R1-Zero (Guo 2025)RL outcome无 searchEM无外部知识,纯 parametric
ReTool (concurrent 2025)RL outcome多轮 (code tool)execution outcome不同 tool 域(code),但思路同款
Search-R1RL outcome✓ 多轮EM + mask

简单读法: Search-R1 = R1-Zero + 外部 search + retrieved-token mask。它在 paradigm 层面没有发明新东西,但把"outcome RL 能学多步 tool use"这件事在 search 这个最重要的 tool 上做实了,是后来一整批 agentic-RL-for-search 工作的祖师爷。


7 · 局限 / 个人 take / 待验证问题

待验证 follow-up 问题清单
  1. 把 retriever 从 E5 (dense) 换成 BM25 (sparse), Search-R1 的 RL 训练曲线和最终 EM 会怎么变? 是否 RL 反而需要 (因为要靠改 query 弥补检索弱)?
  2. retrieved-token mask 在 KL 项上的影响单独有多大? paper 只汇报 policy gradient 项 + KL 项一起 mask,没拆开消融
  3. 在 Bamboogle (4-hop 极端 multi-hop) 上,Search-R1 真的学到了"4 跳"还是只是"碰巧第 2 跳查到了答案"? 需要分析 valid search 分布
  4. 把 outcome reward EM 换成 LLM-as-judge,在 LFQA 上能否 work? reward hacking 风险有多大?
  5. Search-R1 学到的 search behavior 是否可以 zero-shot transfer 到 code / calculator 这些 tool? 还是 search-specific?
  6. GRPO reward collapse 的具体临界点 ——是 group size、KL coef、还是 rollout 长度 dependent?

Memory points · 冷启动复盘

立场 Search-R1 = R1-Zero 的 search 扩展。证明 outcome-only RL 足以让 LLM 学会 multi-turn search,但前提是把 retrieved tokens 从 loss / KL 里 mask 掉。
核心技巧 Retrieved-token masking: I(yt) = 1 iff yt 是 policy 生成的。无此 mask, 7B Avg EM 从 0.431 跌到 0.343。
trajectory 结构 <think> reasoning · <search>query</search> 触发 retrieve · <information> environment 注入 · <answer> 终止并打 EM。
关键数字 Qwen2.5-7B-base + PPO: 7 datasets avg EM 0.431 (RAG: 0.304). 训练数据 = NQ + HotpotQA merge, retriever = E5, knowledge = 2018 Wiki.
PPO vs GRPO GRPO 快但训久会 collapse; PPO 慢但稳。Paper 默认 PPO。
Reward 仅 EM, 没有 format reward, 没有 process reward, 没有 neural reward model。
退化关系I≡1 且 trajectory 单步,公式退化回标准 PPO/GRPO。这是个干净扩展。
局限 静态 Wiki 不是真 web; EM 不能用于 LFQA; B (max search 次数) 未调; GRPO collapse 未解释; retriever 强度未压力测试。