LiteResearcher: A Scalable Agentic RL Training Framework for Deep Research Agent

Zhejiang University × Simplex AI × HKPU · Wanli Li, Bince Qu et al. · 2026-04-22 · arXiv:2604.17931
关键词: Agentic RL · Deep Research · ReAct · curriculum · synthetic web · GRPO · Qwen3-4B

速读卡片 (TL;DR)

一句话: 把整个 web 复刻进一个本地"虚拟世界"(32M 真实网页 + 本地 BGE-M3 检索),让 4B 模型在零边际成本的稳定环境里跑 700+ 步 on-policy GRPO,绕过 live web 的噪声和成本,首次让小模型在 GAIA / Xbench 上反超 30B 同类。

71.3% / 78.0%
GAIA-Text / Xbench-DS (4B)
73.2M
RL 中 tool 调用次数 (零边际成本)
10–46×
本地 search/browse 比线上快

立场:不是新算法,是一套数据 + 环境 + 课程的"训练基础设施"。它的真正贡献是把 deep research RL 从"赌运气式"的 live-web 训练变成像 SWE-RL 那样可重复、可扩展的实验科学。和 sibling note 01_DR-Venus_2604.19859.html 是 4B deep research 的另一面(算法/采样侧 vs 环境/数据侧),建议对照读。


1 · 动机:为什么 deep research 的 RL 之前不 scale

1.1 历史脉络:从闭门 reasoning 到开放 web 的鸿沟

2024–2025 沿着 DeepSeek-R1 的 RLVR(reinforcement learning with verifiable rewards)路径,closed-world reasoning(数学、代码题)上 RL 已经能稳定地 scale——只要有 verifier、有合适难度,reward 曲线就一直涨。但一旦把 reasoning 接到外部世界(deep research 需要联网搜东西、读网页、跨源核对),先前所有工作(WebSailor、WebDancer、Search-R1、ZeroSearch 等)都遭遇了同一个困境: training saturation ——奖励曲线很快进入平台期,继续训反而下降。

论文给出的诊断很锋利: 瓶颈不在 RL 算法,在环境。就像 SWE-RL / R2E-Gym 把代码 agent 关进确定性的 sandbox 才让代码 RL 开始 scale,deep research 也需要一个"sandbox 化的 web"。

A. 真 · 在线 web 上做 RL policy liveinternet $0.001–$0.01 / turn · 7.9s · 答案非确定 ↘ reward 噪声 · 训练 variance 爆炸 ↘ 每次结果不同 → 难复现 ↘ 长 horizon × 大 batch ⇒ $59K–$243K B. Lite Virtual World policy BGE-M3 + Postgres $0 / turn · 0.15–0.17s · 完全确定 ↗ reward 来自固定 corpus + 静态 ranker ↗ 32M 真实网页 → 仍涵盖 real-web 分布 ↗ 73.2M tool calls 全程零边际成本
Live web RL (左) 把 policy 直接耦合到不可控外部系统 — 每条 trajectory 在不同时间会拿到不同结果,reward signal 本身就在漂。LiteResearcher (右) 把整个 web 的"行为"复刻到本地静态 corpus + 检索器,policy 在确定性环境里更新,等训完再迁回 live web 评测。

1.2 别的方案为什么不够

论文按"环境是怎么做的"把已有工作分成三类,每类各有结构性短板:

派系代表怎么做短板
Online real-web RLWebExplorer-RL · WebThinker · DeepResearcher · AgentCPM-Explore训练时直接调 Google/Serper/Jina每 turn 几秒 + 几美分,reward 噪声大;AgentCPM 自己报告 RL 只比 SFT +3.8%
Local retrieval-onlySearch-R1 · Search-o1 · ZeroSearch (LLM 仿真)关在 Wikipedia 之类窄 corpus 内domain 单一 (只覆盖百科),无法复现 cross-verification / 跨源举证
Synthetic-only dataWebSailor 系合成图谱、Search-R1 早期用 LLM 手工编 multi-hop QA + 给定推理结构"过度工程化"的推理图,合成时已隐含答案路径,练不出 atomic 能力
LiteResearcher (本文)合成 QA + 抓真页 + 本地化为 tool确定性 + 真 web 分布 + 不预设解法
论文最有意思的一句论断 (Section 4.1): 与其精心设计 multi-hop 题目的逻辑结构,不如把信息源 scale 到真实 web 量级,然后让"简单到不能再简单"的 QA 抽取规则直接在 32M 页上跑——分布的多样性自然涌现,反而比手搓的复杂图谱更接近真实用户 query 分布。

1.3 为什么这事并不平凡

看上去就是"把网爬下来 + 起个本地 search service",但要让训出来的策略不仅在虚拟世界 work、还能迁回 live web,需要解决几个互相纠缠的工程 + 算法问题:


2 · 背景速查

术语含义
ReActYao 2022, agent 在每 turn 交替输出 thought τ → action a → 拿 observation o,history Ht = (q, τ1, a1, o1, …)
Action space本文只两个原子动作: Search(q') 返回 ranked snippets+URLs;Browse(u, q') 返回 query-conditioned summary
GRPODeepSeekMath 提出,无 value model 的 PPO 变体;一个 prompt 采 K 条 rollout,advantage = (ri − μ) / σ,只用 clipped surrogate
Pass@K filter对每个候选 query 跑 K=8 条 rollout,只留正确数 1 ≤ c ≤ 7 的样本(有梯度信号)
Atomic search capabilities本文的五元组: Direct / Aggregation / Enumeration / Cross-verify / Statistics — 既是数据维度也是评测维度
Information Source MaskingQA 合成后从 corpus 删掉来源页,逼 agent 从相关页拼凑答案
BGE-M3同一前向同时输出 dense + learned sparse 两个 embedding,可融合做 hybrid retrieval
DiskANNMicrosoft 的 disk-based ANN 索引,能在单机上对十亿点做近邻搜索;本文存盘 + mmap
Page-level vs chunk-level index本文每页只一条向量(title+summary),不切 chunk,牺牲精度换 10× 索引规模缩小、并且更像真 search engine
TIS CorrectionTrajectory Importance Sampling,纠正 SGLang (BF16) rollout 与 FSDP (FP32) trainer 的精度 drift
Training saturationRL 训不动了 — 简单题全对、难题全错,gradient ≈ 0

2.1 GRPO 复习

JGRPO(θ) = E [ (1/K) Σᵢ min( rᵢ(θ)·Aᵢ , clip(rᵢ(θ), 1−εlow, 1+εhigh)·Aᵢ ) ]

ri(θ) = πθ(oi|q) / πθrollout(oi|q),没有 KL,没有 entropy。Advantage 是 group-normalized:Aᵢ = (rᵢ − mean) / std。本文严格 on-policy: 每个 rollout batch 用一次就丢。


3 · 架构总览: 三个支柱 + 一个虚拟世界

整个系统可以理解为三件事接力:

① Co-construct 数据 ↔ Corpus Wikipedia / BBC seed ↓ 抽 QA (LLM) ↓ 7-rubric 过滤 ↓ 信源遮蔽 ↓ 用 Q 当 query 抓真页 ↓ corpus 扩充 → 再合成 10M → 21M → 32M pages ② Local Tool Env Local Search Engine BGE-M3 + Milvus + DiskANN Local Browse Tool PostgreSQL Markdown store 0.15s / 0.17s 每次调用 ③ Curriculum RL 每 stage 前 pass@8 过滤 保留 1≤c≤7 Stage 1: 32K · 40 turns · T=0.7 Stage 2: 48K · 60 turns · T=1.0 strict on-policy GRPO 700+ 步无饱和 三者闭环: 数据吃 corpus,corpus 吃 task,RL 吃 (data, env),反过来 RL 的 difficulty filter 又决定下一轮 task 怎么挑
整套 LiteResearcher 的逻辑链路。数据合成 (①) 不是一次性产出 dataset,而是持续把新 query 用作 search seed 去抓页扩 corpus,再生成更复杂的 task,这就是"co-construct"的含义。

4 · 数据合成: 五种 atomic capability + 信源遮蔽

4.1 五种 atomic search capability

论文把"deep research"分解成五个原子能力。这是它的概念基石——后面 corpus 扩充、curriculum 都围绕"覆盖这五种"设计:

能力例题Golden path
Direct2025 全球总人口?1 search → 1 browse
Aggregation"Apollo Belvedere 2024年10月修复中,使用传统技术的 Andrea Felice 用什么材料做了用来替换原雕像缺失左手的复制品?"列出多 constraint → 各自找 → 取交集
Enumeration2023年11月4日 Edmonton Valley Line 东南段开通时共有多少站?多源穷举 → 取并集
Cross-verify某品牌奶粉是否含蔗糖?多少?多源比对一致性
Statistics某地某模型的 R² 值?找原始数据 → 重新算

4.2 数据合成流水线 (重点: 信源遮蔽)

Wiki/BBC 页 Fiat Tagliero 1938 LLM 抽 QA "谁是 1938 在 厄立特里亚的现代主义 建筑设计师?" 7-rubric 过滤 独立性/可验证 无歧义/非简单 信源遮蔽 从 corpus 删除 原始页 扩 corpus 用 Q 调 Serper 抓 ~100 相关页 下一轮: 新增页又能抽出新 QA → corpus 越长越大 关键: 第 4 步遮蔽源 + 第 5 步留下"周围真实相关页",合起来逼出 atomic capabilities
合成 → 过滤 → 遮蔽 → 扩 corpus 的循环。每条 QA 的源页被删,但其语义周围的真实相关页(由 Serper 通过该 question 找到)被保留 — 这正是模型在线上做 search 时会遭遇的分布。

4.3 Worked example (合成视角): 那道 Fiat Tagliero 题怎么诞生的

展开看一条 QA 走完整个 pipeline
  1. Seed 页: Wikipedia 关于 Fiat Tagliero service station 的页面,包含事实 "Located in Eritrea / Completed 1938 / Designed by Giuseppe Pettazzi"。
  2. LLM 抽取: Q="Who is the designer of the famous modernist building in Eritrea that completed in 1938?" / A="Giuseppe Pettazzi"。注意这个 Q 用了三个 attribute(modernist + Eritrea + 1938),不是直接问 "Fiat Tagliero 的设计师" — 这就是 LLM 被 prompt 引导避免直接 keyword leak。
  3. 7-rubric 评: Independence ✓ / Specificity ✓ (人名) / Unambiguity ✓ / Answerability ✓ / Not open-ended ✓ / Not common-sense ✓ / Time specificity ✓ ("1938")。通过。
  4. 遮蔽: Wikipedia "Fiat Tagliero" 这一页从 corpus 删除。
  5. 扩 corpus: 用整个 question 当 query 调 Serper,返回 top-100 URL,可能包含 "Eritrea modernist architecture"、"Italian colonial architecture in East Africa"、"Asmara UNESCO" 等页 — 都加入 corpus。
  6. 训练时: agent 看到 question,本地 search 结果里没有 "Fiat Tagliero" 直接命中,但有 "Asmara modernist architecture overview" → browse 后发现"1938年完工的著名现代主义加油站是 Fiat Tagliero,设计师 Pettazzi" → cross-verify 一下其他页 → 输出。它学到的是 aggregation,不是 keyword recall

反向论证: 如果不做信源遮蔽会怎样? agent 学到的最优策略是 "用 question 里的关键词组(modernist + Eritrea + 1938)直接搜",一击命中原始 Wikipedia 页。这条 policy 在 corpus 里 reward = 1,但迁到 live web 上当用户问真实问题(query 关键词不那么对齐时),立刻 fail —— 即所谓"corpus shortcut"。


5 · 本地 tool 环境: 32M 网页 + 页级索引

5.1 为什么用 page-level 而不是 chunk-level

这是个看似工程、实则关乎"虚拟世界保真度"的决策。常规 RAG 会把每页切成 ~512 token 的 chunk,每 chunk 独立 embed,这样精度更高(细粒度匹配)但:

所以 LiteResearcher 选 page = title + summary 单向量,索引大小压到 ~3 千万向量(约 100GB 量级),BGE-M3 hybrid (dense + learned sparse) 用 Milvus 融合,DiskANN + mmap 实现 ~150ms 查询延迟。Browse tool 单独用 PostgreSQL 存 Markdown 全文,1000 并发,~170ms 返页。

Local Search Engine Query: "Eritrea modernist 1938" BGE-M3 (dense + learned sparse) Milvus hybrid · DiskANN mmap Top-K page snippets (~150ms) Local Browse Tool Browse(url, "designer name") Postgres KV: url → markdown LLM 提炼 query-conditioned 摘要 Page summary (~170ms)
两个 service 的微架构。注意 Browse 不是直接返回原 markdown(那会爆 context),而是用 LLM 做 query-conditioned summary — 这本身和 Jina Reader / Tongyi 系的 browse tool 行为一致,保持迁移性。

5.2 数字感受

整个 RL run 内累计 45.8M search + 27.4M browse = 73.2M tool call。如果走 Serper + Jina 的线上 API,光这部分账单 ~$59K (用便宜的 Serper) 到 $243K (SerpAPI)。本地化后 $0,而且 latency 10–46×,真正让 hundreds of concurrent rollout 成为可能。


6 · Curriculum RL: 难度过滤 + 两段式

6.1 难度轴是什么

论文 curriculum 不是 token 复杂度 / 题目长度,而是沿三轴同时升档:

Stage 1 (steps 0–220) Max response: 32K Max turns: 40 Temperature: 0.7 Data: 73% own + 27% multi-hop 10,398 queries (pass@8 留) → GAIA 64.7% 平台 饱和 → 升档 Stage 2 (steps 220–700+) Max response: 48K (+16K) Max turns: 60 (+20) Temperature: 1.0 (升熵) Data: 69% own + 20% multi-hop + 11% science 16,199 queries (重新 pass@8 过滤) → GAIA 68.3% (+3.6%)
课程一升,三件事一起动: 更长 context 给 long-horizon 留空间;更多 turn 让原本 truncate 的题能完成;更高温度 配合更多样数据增加 exploration。同时 pass@8 重新筛一遍 — 老模型已经全对的题这时被剔除。

6.2 为什么 pass@8 + 1≤c≤7 是关键

很简单的 GRPO 算法直觉: 如果 K=8 条 rollout 全对,Ai = (1−1)/0 全是 0,gradient = 0;全错也是 0。只有部分对部分错,才有 group-normalized advantage 来推策略动。所以 difficulty filter 的存在不是为了"加难度",而是为了保证每个 step 的 batch 里都有可学的对比信号

反向论证: 如果不做 pass@8 过滤,Stage 1 训到 220 步时,corpus 里大量 direct-information 题已经全 pass,但 enumeration 题还全 fail,batch 里大半 sample 提供 0 gradient,等价于 batch size 缩水 + 信号高方差 → 训练 stuck。

6.3 严格 on-policy 的另一面

论文用一个对照实验把这一点说死了:

变体每 batch 更新次数初期 reward训完 GAIA
Off-policy4 (256 / 4 mini-batch)涨得快66.75% (后期回落)
On-policy1 (整 batch)慢一点68.89% (持续涨)

论文给的解释: long-horizon trajectory 上,policy lag 沿 turn 累积放大 — 一条 30-turn 的 rollout,在第 20 turn 时与 current θ 的 KL 已经远超普通 single-turn RL 的 mismatch。off-policy 复用相当于把这个 mismatch 的样本喂多次。


7 · Worked example: 一条 GAIA-style 题在虚拟世界中的 ReAct trace

选一道前面提的 aggregation 题: "In the Apollo Belvedere statue restoration project completed in October 2024, what was the material used by Andrea Felice, who employed traditional techniques, to create the replica that was used to replace the missing left hand of the original statue?"

τ₁: 拆解 constraint "4 个限定: Apollo Belvedere / 修复 / 2024.10 / Andrea Felice" a₁: Search("Apollo Belvedere restoration 2024 missing hand") o₁: 5 篇 page snippet · 含 "Vatican Museums announce Belvedere project" τ₂: 第 1 篇看起来对,但没提材料 a₂: Browse(url1, "Andrea Felice material left hand") o₂: "Felice 用 traditional sculpting technique,材料未明确" τ₃: 改 query,加 sculptor 名字 a₃: Search("Andrea Felice sculptor Carrara marble Apollo") o₃: 一篇意大利新闻 + Vatican 报告 → "Carrara marble" 命中两次 τ₄: cross-verify 通过 → 给答案 final: <answer>Carrara marble</answer> · reward = 1 注: 4 turn,~3K token 输出,<1s 总 tool 延迟 (本地 search/browse 加起来 ~600ms)
一条典型 trajectory。RL 训练目标只看最后 reward(LLM-judge 判 "Carrara marble" 与标答语义等价 → 1)。中间 4 turn 的所有 token 共享这个 reward 的 advantage。注意 τ₃ 的 "改 query 加新约束"是 atomic capability "aggregation" 的核心,模型靠 pass@8 过滤里那些"前两 turn 失败、后面成功"的样本反复学到的。

反向论证: 如果数据合成时没遮蔽源页,那 turn 1 直接命中 Vatican 原页 → 1 turn 答完;模型从此学不到 "改 query 加约束 + cross-verify"。


8 · 实验关键结果与剖析

8.1 主表 (节选)

ModelSizeGAIAFramesWebWalkerXbench-DS
Claude-4.5-Sonnet?71.2%85.0%66.0%
GPT-5-high?76.4%77.8%
Tongyi DeepResearch30B70.9%90.6%72.2%75.0%
WebSailor30B53.2%53.3%
SFR-DeepResearch?66.0%82.8%
AgentCPM-Explore4B63.9%82.7%68.1%70.0%
LiteResearcher4B71.3%83.1%72.7%78.0%

读法: 4B 在 GAIA 上 match Claude-4.5-Sonnet,超过 Tongyi 30B (70.9% → 71.3%);Xbench-DS 上 78% 超过 GPT-5-high 的 77.8%(开源最高)。WebWalker 上 72.7% 也压住 Tongyi 30B 的 72.2%。

8.2 SFT vs RL 拆解

论文的 SFT 用 Tongyi DeepResearch (30B) 当 teacher 蒸出 68K 条 trajectory。SFT 完成后 GAIA 只有 55.6% — 比老师本人 70.9% 低 15.3 个点(典型 distillation gap)。然后 RL 训练把这条曲线推到 71.3%,反而反超 teacher

这里的论点很重要。它说明 4B 能赢 30B 的来源不是 "蒸馏 + 一点 RL 调优",而是 "RL 训练框架本身"。teacher 的能力在 SFT 后已经被压缩到 4B 容量上限,但 RL + 难度课程让 4B 在 deep research 这个特定能力空间里超越了它见过的 trajectory。

8.3 4B 何以胜 30B —— 论文的 attribution

把所有 ablation 拼起来,论文的因果链是:

  1. 数据多样性: 73% 自合成 (覆盖 5 atomic) vs WebSailor 那种结构化合成 (只覆盖 multi-hop) → +8.1% GAIA (Table 4: 58.7 → 66.8)
  2. 本地稳定环境: 700 步 monotonic 提升 vs AgentCPM 在 live web 训只 +3.8% / 整体 63.9%
  3. 严格 on-policy: +2.1% GAIA over off-policy (66.75 → 68.89)
  4. 两阶段 curriculum: +3.6% GAIA over Stage 1 plateau

合起来 ~+15.7% over SFT baseline。没有一项是新算法;每一项都是工程/方法论的设计

8.4 "为什么不做 KL/entropy?"

这点论文一带而过但值得停一下: GRPO 默认有 KL 项约束 πθ ≈ π_ref。本文显式去掉。原因可能是: SFT init 已经离 base 很远,KL→ref 没意义;同时 outcome reward 噪声小、reward shaping 已由难度过滤替代,不需要 entropy 防 collapse。但这也意味着该 recipe 对 reward 设计非常敏感 — 没有 reward hacking 防护。

8.5 Long-context 是 4B 的真痛点

BrowseComp 任务 ~20+ 页/题,128K context 直接爆。论文用了一个memory mechanism: 64K 上限,撞限就调 summarization model 把每个旧 turn 压成一句话。这个 trick 把 BrowseComp 从 20.3% 推到 27.5%,但仍然弱于 30B 同行 (DeepSeek 67.6%)。模型容量在长 horizon 下确实是瓶颈—— 4B 能赢主要赢在 GAIA / Xbench 这种 ~10 turn 的中等长度任务。


9 · 与同类工作对比

LiteResearcherDR-Venus (sibling note)SFR-DeepResearchWebSailor v2Tongyi DeepResearch
规模4B4B未明指 (中等)30B30B
训练环境本地 32M 真页 mirror(见 sibling)Online live webOnline + 合成图谱Online live web
数据合成Co-evolve corpus + 信源遮蔽(见 sibling)结构化 multi-hop graph大规模合成
RL 算法strict on-policy GRPO, 无 KL/entropy(见 sibling)GRPO 变体GRPOGRPO + 工程优化
课程2 stage (32K→48K, 40→60 turn, T 0.7→1.0)(见 sibling)
GAIA71.3%(见 sibling)66.0%53.2%70.9%
关键 insight环境稳定 + 数据 atomic 覆盖率(见 sibling)RL 单 agent 即可合成图谱够用scale + 工程

对比要点:


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

10.1 局限

10.2 个人 take

10.3 待验证问题

  1. 把 corpus 扩到 100M+ 页(覆盖更多 long-tail domain)会继续涨吗,还是 4B 容量 saturate?
  2. 把 Stage 2 之后再加 Stage 3 (64K context, 80 turns) 还会涨吗?Stage 1→2 +3.6% 之后是否进入新平台?
  3. retriever (BGE-M3) 也加到 RL 训练循环里(joint 学 retriever),效果会怎样?
  4. 5 个 atomic capability 的独立 ablation: 只去掉 enumeration 数据,enumeration benchmark 掉多少?
  5. "信源遮蔽"的强度可调吗?如果只删一半源页,corpus shortcut 与多样性的 trade-off 在哪?
  6. 把 LiteResearcher 的本地 tool 直接接到现有的 Search-R1 / WebSailor 上做 RL,能不能等比例提升?换言之,"环境"和"模型"的解耦程度。
  7. LLM judge 改成基于 exact match / multiple-choice 后,reward variance 会怎么变?on-policy 是否还稳?

11 · 记忆点 (Memory points)

立场 环境而非算法: deep research RL 之前不 scale,瓶颈是 live web 噪声 + 成本,不是 GRPO 不行。
核心招 Lite Virtual World: 32M 真实网页 + 页级 BGE-M3 索引 + Postgres browse → 0 边际成本、10–46× 加速。
数据招 Co-construct + 信源遮蔽: 抽 QA 后从 corpus 删源页,逼出 aggregation/cross-verify 等 atomic capability。
课程招 pass@8 1≤c≤7 + 三轴升档: response length / max turns / temperature 同时升,确保 group advantage 永不为 0。
算法招 strict on-policy GRPO,无 KL/entropy: long-horizon trajectory 上 policy lag 累积,off-policy 反而后期掉点。
工程数字 73.2M tool calls / 700 steps · 32K→48K context · K=8 rollouts/query · global batch 128 · lr 1e-6.
主结果 Qwen3-4B-Thinking 起步 → SFT 55.6% → RL 71.3% GAIA / 78.0% Xbench,反超 Tongyi 30B、match Claude-4.5。
最弱处 BrowseComp (深度浏览链 20+ 页) 27.5%,memory summarization 是补丁,长 context 仍是 4B 瓶颈。
对照 See also 01_DR-Venus_2604.19859.html — 同期另一条 4B deep research 路线,数据/算法侧的互补视角。