DR-Venus: Towards Frontier Edge-Scale Deep Research Agents with Only 10K Open Data
Paper: arXiv:2604.19859 Code: inclusionAI/DR-Venus Code reference:
master@60131410(2026-05-08)
1. Motivation (研究动机)
当前 Deep Research Agent 的主要矛盾不是“是否能调用搜索工具”,而是:要在真实部署中让小模型稳定完成长链路检索、浏览、证据整合和最终作答,同时还不能依赖昂贵闭源数据或超大模型算力。论文把目标明确限定在 edge-scale 4B 级 deep research agent:它要能在 search / browse 工具环境里完成最多 200 步的长程交互,并在 BrowseComp、BrowseComp-ZH、GAIA、xBench-DeepSearch、DeepSearchQA 等 benchmark 上接近或超过已有小模型 agent。
已有方法的瓶颈有三类。第一,训练数据少且噪声重:REDSearcher 这类开放轨迹虽然有 10K 级规模,但原始轨迹包含冗余 browse/search、非部署环境支持的工具调用、格式不一致和错误答案轨迹;小模型比大模型更容易被这些噪声带偏。第二,普通 SFT 对长轨迹利用不足:如果把短轨迹和 100+ turns 的长轨迹同权采样,模型学到的是基本工具格式,而不是 sustained planning、多步 evidence aggregation。第三,RL 的 outcome reward 太稀疏:长程 research 常常到最后才知道答案对错,trajectory-level GRPO 很难告诉模型“哪一个中间 browse/search turn 真正推进了信息获取”。
这篇工作的价值在于证明:即使只有约 10K open data,只要把数据清洗、长轨迹重采样和 turn-level reward 设计做好,4B 模型也能形成很强的 deep research 能力。这直接服务于低成本、低延迟、隐私更友好的本地/边缘部署场景,而不是只追逐 30B/70B 或闭源 frontier 模型。
2. Idea (核心思想)
核心 insight 是:小模型 deep research agent 的瓶颈首先是有效监督密度,而不只是参数规模。DR-Venus 用两阶段配方把有限开放数据“榨干”:先用严格清洗 + long-horizon resampling 做 agentic SFT,建立稳定的 tool-use / answer format / trajectory imitation;再用 IGPO 把“当前 turn 是否增加了 ground-truth answer 的概率”转成 dense turn-level reward,使 RL 能在 200-turn 级任务中做更细的 credit assignment。
关键创新可以概括为:SFT 阶段不是直接吃 10,001 条 raw REDSearcher trajectories,而是对齐部署环境、剪掉不允许工具、去重、过滤正确答案,并把 51–100 turns / >100 turns 的轨迹分别按 2× / 5× 上采样;RL 阶段不是只在最终答案上给 sparse reward,而是在 browse/visit 等信息获取节点上计算 information gain,并结合 format penalty、separate normalization、IG-Scale 和 discounted accumulation,把每个 turn 的局部收益传播到该 turn 的所有生成 token。
和 REDSearcher-30B-A3B、OpenResearcher-30B-A3B 等大模型训练 agent 相比,DR-Venus 的主要差异不是提出更复杂的 agent runtime,而是把数据利用率和 reward 密度作为小模型 scaling 的中心问题;和普通 GRPO 相比,IGPO 不把一整条 trajectory 的好坏粗暴分摊到所有 token,而是尽量让每个 tool-use turn 获得与其信息增益匹配的奖励。
3. Method (方法)
3.1 Overall framework:两阶段训练 + 同协议推理

Figure 0 解读:这张图来自官方 released repo,用于补足论文正文中没有单独 architecture diagram 的部分。整体 pipeline 分成 SFT、RL、Inference 三段:SFT 负责把 REDSearcher raw trajectories 变成同一 search + visit 工具协议下的 cleaned/resampled trajectories;RL 从 SFT checkpoint 出发,用 IGPO-style information gain reward 优化长程工具使用;Inference 则复用同一套系统提示和工具格式,让训练时学到的格式约束不会在部署时失配。
DR-Venus 将 deep research 形式化为一个带外部环境 的 policy 。给定 query ,初始历史是 ;第 个 turn 生成 ,其中 是 reasoning trace, 是 search、browse/visit 或 answer 动作:
如果 是工具动作,环境返回 observation ,历史更新为 ;如果 是 answer,trajectory 在 结束:
直觉上,SFT 教模型“怎么按协议行动”,RL 教模型“哪些中间行动真正有用”。这两者缺一不可:没有 SFT,4B 模型很难稳定地产生 <think>、<tool_call>、<answer> 这类结构;没有 dense RL,模型虽然会用工具,但会出现 redundant reasoning、无效 browse、格式错误和长程执行不稳定。
3.2 Agentic SFT:清洗、过滤、重采样,而不是直接 imitation
SFT 数据来自 10,001 条 REDSearcher raw trajectories。论文和 released code 中的 SFT/data_clean/prepare_trajectories.py 都显示,清洗逻辑围绕 deployment protocol 做四步:
- Environment alignment:把轨迹转成和在线推理一致的 message schema、system prompt、tool-call arguments、tool-response format。论文称 10,001 条 raw trajectories 在此阶段都成功转换。
- Disallowed-tool pruning + duplicate removal:部署环境只暴露 search 和 browse;released code 中实际工具名是
search与visit。因此,其他工具 turn 与配对 tool-response 会被移除。论文报告该步影响 1,064 条轨迹,移除 3,378 个 disallowed tool calls,主要来自 Python-Interpreter;重复 search/browse 调用出现在 6,821 条轨迹中,共移除 15,728 个重复 interaction,且多数是 duplicate browse events。 - Correctness filtering:用 Qwen3-235B-A22B-Instruct-2507 作为 judge,保留最终答案正确的轨迹。10,000 条 valid trajectories 经过 correctness filtering 后保留 9,365 条,保留率 93.65%。
- Turn-aware resampling:按照轨迹长度给 SFT 采样权重:0–50 turns 为 1×,51–100 turns 为 2×,>100 turns 为 5×。最终训练实例从 9,365 增至 18,745;>50 turns 占比从 60.28% 提升到 80.15%,>100 turns 占比从 13.29% 提升到 33.21%。
SFT loss 只作用在 assistant-generated tokens,包括 reasoning traces、tool invocations 和 final answer;环境 observation tokens 被 mask 掉: 其中 是 serialized trajectory 中由 agent 生成的位置,排除外部环境返回的 。这点很关键:模型不应该被训练去“生成网页返回内容”,而应该学习在看到 observation 后继续推理、调用工具或作答。
def clean_and_resample_redsearcher(rows, allowed_tools=("search", "visit")):
cleaned = []
stats = Counter()
for row in rows:
messages = normalize_row_to_dr_venus_schema(row)
if messages is None:
stats["drop_schema"] += 1
continue
messages, pruned = prune_disallowed_tool_turns(messages, set(allowed_tools))
stats["pruned_tool_turns"] += len(pruned)
messages, duplicates = remove_duplicate_tool_calls(messages)
stats["duplicate_tool_turns"] += len(duplicates)
ok, reason = validate_messages(messages) # checks <think>, <tool_call>, <answer>
if not ok:
stats[f"drop_{reason}"] += 1
continue
turns = max(len(messages) - 1, 0) // 2
row = {**row, "messages": messages, "_turns": turns}
cleaned.append(row)
resampled = []
for row in cleaned:
turns = row["_turns"]
multiplier = 1 if turns <= 50 else 2 if turns <= 100 else 5
for _ in range(multiplier):
resampled.append({**row, "_resample_multiplier": multiplier})
return resampled, stats3.3 Agentic RL:用 IGPO 提高 turn-level credit assignment
SFT 后的模型仍然会出现 formatting errors、redundant reasoning 和 inefficient tool use。DR-Venus 的 RL 阶段采用 IGPO:对每个 query 采样 条 rollouts,并在每个 rollout 的中间 turn 上估计 information gain。给定 ground-truth token sequence ,在第 个 turn 历史 下,模型对标准化 ground-truth answer 的平均 log-probability 为:
于是 turn-level IG reward 是当前 turn 前后 ground-truth log-prob 的增量:
released code 中 RL/scrl/llm_agent/prealigned_vectorized.py 的默认 INFO_GAIN_TYPE="log_prob_diff" 与该公式一致:第一轮记录 gt_values[global_idx]=mean_log_prob,后续 turn 用 cur_value - gt_values[global_idx] 得到 info_gain,再更新 baseline。代码还支持 prob_diff,但 RL/train_igpo.sh 的 paper-repro setting 使用 log_prob_diff。
def compute_turn_information_gain(mean_log_probs_by_turn, active_turns):
gt_value = {}
info_gain_rewards = defaultdict(list)
for turn_idx, turn_values in enumerate(mean_log_probs_by_turn):
for sample_id in active_turns[turn_idx]:
mean_log_prob = turn_values[sample_id]
if not torch.isfinite(mean_log_prob):
info_gain_rewards[sample_id].append(0.0)
continue
if turn_idx == 0 or sample_id not in gt_value:
gt_value[sample_id] = mean_log_prob
continue
ig = mean_log_prob - gt_value[sample_id]
info_gain_rewards[sample_id].append(float(ig))
gt_value[sample_id] = mean_log_prob
return info_gain_rewardsBrowse-aware IG assignment
论文区分 search 和 browse:search 更像 exploratory snippets,browse/visit 更接近具体证据读取。因此 DR-Venus 可只在 browse turn 上计算 IG,并把该 reward 分配给该 browse turn 及其前一个 browse 之后的所有 search turns。released code 的命名差异是:论文正文多写 browse,appendix system prompt 和 repo 中使用工具名 visit;RL/train_igpo.sh 设置 IG_TOOL_FILTER="visit",含义就是只在网页访问/浏览工具上计算 IG。
论文公式与 released code 实现差异:论文正文称工具是 search + browse,但 Appendix A 和 released code 使用 search + visit;这是命名差异而非能力差异,visit 对应论文中的 browse/page-reading action。笔记中的 code mapping 以 released code 的 visit 为准。
Turn-level format penalty
普通 trajectory-level format penalty 会因为一个 turn 出错而惩罚整条 200-turn 轨迹。DR-Venus 改成 turn-level:如果 turn 格式合法,保留原 reward;否则替换为固定负惩罚:
RL/train_igpo.sh 中 USE_FORMAT_PENALTY=true、FORMAT_PENALTY_SCALE=1.0,对应论文的 。这让 reward 不再把“某个坏 turn”扩散成“整条轨迹都坏”。
3.4 Reward normalization、IG-Scale 与 discounted accumulation
IG reward 和 final outcome reward 的尺度不同,因此论文先在 rollout group 内分开标准化。令 和 分别为格式调整后的 turn IG reward 和 terminal outcome reward:
对于 ultra-long-horizon 任务,final outcome 可能大量为 0,IG 反而主导优化。论文的 IG-Scale 用 batch-level magnitude 重缩放 IG:
最后用 discounted return 把未来 turn 的收益传播回当前 turn:
其中 RL/train_igpo.sh 设置 algorithm.gamma=0.95。released code 中 RL/verl/trainer/ppo/info_gain_advantage.py 的 scaled_separate 分支对应论文 IG-Scale:先分别对 final F1/outcome mask 和 IG mask 做 group stats,再用 f1_abs_mean / ig_abs_mean 得到 ig_scale 并 clamp 到 10,最后 _compute_turn_level_advantage 按 turn boundary 做反向折扣累计,并 broadcast 到该 turn 的 token span。
def compute_grpo_info_gain_advantage(token_rewards, response_mask, group_index, gamma=0.95):
last_pos = last_valid_token_position(response_mask)
f1_mask = token_position_equals(last_pos) & response_mask.bool()
ig_mask = response_mask.bool() & (~f1_mask) & (token_rewards != 0)
f1_mean, f1_std = group_stats(token_rewards, f1_mask, group_index)
ig_mean, ig_std = group_stats(token_rewards, ig_mask, group_index)
norm_f1 = (token_rewards - f1_mean[group_index]) / (f1_std[group_index] + 1e-6)
norm_ig = (token_rewards - ig_mean[group_index]) / (ig_std[group_index] + 1e-6)
f1_abs = norm_f1[f1_mask].abs().mean().clamp(min=0.3)
ig_abs = norm_ig[ig_mask].abs().mean().clamp(min=1e-6)
ig_scale = (f1_abs / ig_abs).clamp(max=10.0)
normalized = torch.zeros_like(token_rewards)
normalized[f1_mask] = norm_f1[f1_mask]
normalized[ig_mask] = norm_ig[ig_mask] * ig_scale
turn_boundary = f1_mask | ig_mask
returns = discounted_accumulate_by_turn(normalized, turn_boundary, gamma=gamma)
return returns * response_mask3.5 IGPO objective 与 inference loop
IGPO 保留 GRPO-style clipped objective,但 advantage/reward 不再是单个 trajectory outcome,而是 token 对应 turn 的 :
推理时,Inference/web_demo.py 的 ResearchProblemSolver 循环解析 <think>、<tool_call>、<answer>;当模型输出 search 或 visit 时,工具结果被包进 <tool_response>...</tool_response> 再追加到 message history;超过 max steps 或 context length 时,系统要求模型直接给 <answer>。这和 SFT 数据清洗阶段的 message schema 是同一协议。
def deep_research_inference_loop(model, tokenizer, question, max_steps=200):
messages = [{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": question}]
for step in range(max_steps):
text = model.generate(messages, stop=["<tool_response>"])
status, reason, payload = parse_llm_response(text, step)
if status == ANSWER_OK:
return extract_answer(payload)
if status != TOOL_CALL_OK:
messages.append({"role": "user", "content": format_error_tool_response(reason)})
continue
tool_name, args = payload["name"], payload["arguments"]
if tool_name == "search":
result = serper_search(args["query"])
elif tool_name == "visit":
result = jina_visit(args["url"], goal=args["goal"])
messages.append({"role": "assistant", "content": text})
messages.append({"role": "user", "content": f"<tool_response>\n{result}\n</tool_response>"})
return force_final_answer(messages)3.6 Code-to-paper mapping
Code reference:
master@60131410(2026-05-08) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| SFT trajectory schema alignment | SFT/data_clean/prepare_trajectories.py | normalize_raw_messages, normalize_clean_messages, normalize_row |
| Disallowed-tool pruning | SFT/data_clean/prepare_trajectories.py | prune_disallowed_tool_turns; DEFAULT_ALLOWED_TOOLS=("search","visit") |
| Duplicate search/visit removal | SFT/data_clean/prepare_trajectories.py | remove_duplicate_tool_calls, canonical_signature |
| Turn-aware resampling | SFT/data_clean/prepare_trajectories.py | compute_turns, compute_multiplier, main resampling loop |
| SFT launch config | SFT/sft_shells/run.sh, SFT/train_sft.sh | wrapper overrides DATA_MAX_LENGTH=200000, SP_SIZE=8, then calls FSDP SFT trainer |
| IG reward computation | RL/scrl/llm_agent/prealigned_vectorized.py | vectorized log_prob_diff: info_gain = cur_value - gt_values[global_idx] |
| IGPO advantage / IG-Scale | RL/verl/trainer/ppo/info_gain_advantage.py | compute_grpo_info_gain_advantage, _compute_turn_level_advantage, scaled_separate branch |
| RL launch config | RL/train_igpo.sh | USE_INFO_GAIN=true, IG_TOOL_FILTER="visit", agent_grpo.n=8, max_turns=200 |
| Outcome reward routing | RL/verl/workers/reward_manager/naive_batch.py, RL/verl/utils/reward_score/__init__.py, format_and_f1.py | batch reward manager, LLM/F1 routing, <answer> extraction |
| Search/visit inference protocol | Inference/web_demo.py, RL/configs/dr_agent_loop.yaml, RL/scrl/llm_agent/dr_agent_loop.py | ResearchProblemSolver, DRAgentLoop, tool response formatting |
4. Experimental Setup (实验设置)
Training data
- SFT data:10,001 条 raw REDSearcher trajectories,经环境对齐、工具剪枝/去重、正确性过滤和 turn-aware resampling。清洗后 10,000 条 valid,正确性过滤后 9,365 条,resampling 后 18,745 个训练实例。
- RL data:从 REDSearcher data source curated 的 1K query-answer pairs,论文脚注给出
Zchu/REDSearcher_RL_1K。 - Open-data constraint:SFT 和 RL 都只使用 open data;SFT 学 trajectory imitation,RL 用 curated QA supervision 做 optimization。
Benchmarks and metrics
评测覆盖六个 deep research / web browsing / multi-step information-seeking benchmark:BrowseComp、BrowseComp-ZH、GAIA (Text-Only)、xBench-DS-2505、xBench-DS-2510、DeepSearchQA。主要 metric 是 accuracy / benchmark score;对样本数少于 300 的数据集,论文报告三次独立评测均值,其余数据集报告单次评测结果。Pass@K 分析用于衡量 test-time 多样本采样下的 capability ceiling,而不是只看 Pass@1。
Baselines
- Foundation models with tools:GLM-4.7、MiniMax-M2.1、DeepSeek-V3.2、Kimi-K2.5、Claude-4.5-Opus、OpenAI-o3、GPT-5 High、Gemini-3-Pro。
- ≥30B trained agents:DeepDive-32B、SMTL-30B-300、WebSailor-V2-30B、Tongyi-DR-30B、DeepMiner-32B-RL、OpenSeeker-v1-30B-SFT、OpenResearcher-30B-A3B、REDSearcher-30B-A3B。
- ≤9B trained agents:DeepDive-9B、WebSailor-7B、OffSeeker-8B、WebExplorer-8B-RL、AgentCPM-Explore-4B。
- 论文明确不和依赖额外 context management 或 test-time scaling 的 RE-TRAC-4B、Marco-DR-8B、MiroThinker-v1.0 直接比较,以保持 standard evaluation setting。
Training and inference config
训练 backbone 是 Qwen3-4B-Thinking-2507。论文报告 SFT 使用 8×A100、verl FSDP trainer、maximum training length 200K tokens、global batch size 32、per-GPU micro-batch size 1、learning rate 、1 epoch、multi-turn supervision、right truncation、gradient checkpointing、sequence parallelism size 8。released code 中对应的实际入口是 SFT/sft_shells/run.sh,它覆盖 DATA_MAX_LENGTH=200000、TRAIN_BATCH_SIZE=32、MICRO_BATCH_SIZE_PER_GPU=1、SP_SIZE=8,再调用 SFT/train_sft.sh;注意 SFT/train_sft.sh 自身默认 DATA_MAX_LENGTH=32768,不能拿那个默认值当论文配置。
RL 使用 16×A100、verl vLLM engine + FSDP trainer、training batch size 16、rollout context up to 256K、每 turn 最大生成 8,192 tokens、group size 8、temperature 1.0。released code RL/train_igpo.sh 的关键 reproduction knobs 是:MAX_MODEL_LEN=261000、MAX_PROMPT_LEN=246000、MAX_RESPONSE_LEN=8192、agent_grpo.n=8、max_turns=200、algorithm.gamma=0.95、algorithm.kl_ctrl.kl_coef=0.001、actor_rollout_ref.actor.optim.lr=1e-6、IG_TOOL_FILTER="visit"、INFO_GAIN_NORM_MODE="scaled_separate"、USE_FORMAT_PENALTY=true、FORMAT_PENALTY_SCALE=1.0。推理时最多 200 个 interaction steps,decoding 使用 temperature 1.0、top-p 0.95、top-k 20、presence penalty 1.1、最大 token budget 256K。
工具服务器遵循 search + browse/visit 协议:search 由 Serper/Google Search API 返回 top-10 搜索结果,browse/visit 基于 Jina reader 读取网页,并用 Qwen3-30B-A3B-Instruct-2507 做内容 summarization。
5. Experimental Results (实验结果)
Main results on six benchmarks
Figure 1 解读:图中突出的是 DR-Venus-4B 在 BrowseComp / BrowseComp-ZH 上相对同规模开源 agent 的位置。SFT 版本已经超过 AgentCPM-Explore-4B;IGPO RL 后在两个语言环境上进一步提升,说明 dense turn-level reward 主要改善执行可靠性,而不是只靠更大模型容量。
| Model | BrowseComp | BrowseComp-ZH | GAIA Text-Only | xBench-DS-2505 | xBench-DS-2510 | DeepSearchQA |
|---|---|---|---|---|---|---|
| AgentCPM-Explore-4B | 24.1 | 29.1 | 63.9 | 70.0 | 34.0 | 32.8 |
| DR-Venus-4B-SFT | 26.8 | 35.7 | 65.4 | 69.0 | 35.3 | 37.7 |
| DR-Venus-4B-RL | 29.1 | 37.7 | 64.4 | 74.7 | 40.7 | 39.6 |
| WebExplorer-8B-RL | 15.7 | 32.0 | 50.0 | 53.7 | 23.0 | 17.8 |
| Tongyi-DR-30B | 43.4 | 46.7 | 70.9 | 75.0 | 55.0 | – |
| REDSearcher-30B-A3B | 42.1 | 49.8 | 80.1 | – | – | – |
| GPT-5 High | 54.9 | 65.0 | 76.4 | 77.8 | 75.0 | 79.0 |
最重要的结论是:DR-Venus-4B-SFT 已经在六个 benchmark 中普遍超过先前 4B–9B agentic systems;RL 版本在 BrowseComp (+2.3)、BrowseComp-ZH (+2.0)、xBench-DS-2505 (+5.7)、xBench-DS-2510 (+5.4)、DeepSearchQA (+1.9) 上继续提升,但 GAIA 从 65.4 降到 64.4。这说明 IGPO 并非所有 benchmark 都单调增益,但整体显著增强了 long-horizon web research 的执行稳定性。尤其是 xBench-DS-2505 上 DR-Venus-4B-RL 达到 74.7,接近 Tongyi-DR-30B 的 75.0。
Ablation: resampling, GRPO vs IGPO
| Model | Training | BrowseComp | BrowseComp-ZH |
|---|---|---|---|
| REDSearcher-30B-A3B (SFT) | SFT | 34.7 | 26.8 |
| DR-Venus-4B-SFT (w/o Resampling) | SFT | 22.8 | 33.9 |
| DR-Venus-4B-SFT (w/ Resampling, Ours) | SFT | 26.8 (+4.0) | 35.7 (+1.8) |
| DR-Venus-4B-RL (w/ GRPO) | SFT+RL | 25.3 (-1.5) | 35.6 (-0.1) |
| DR-Venus-4B-RL (w/ IGPO, Ours) | SFT+RL | 29.1 (+2.3) | 37.7 (+2.0) |
这张 ablation 证明两个点。第一,turn-aware resampling 对有限 open data 很重要:仅在长轨迹上增加采样权重,就让 BrowseComp 从 22.8 到 26.8,BrowseComp-ZH 从 33.9 到 35.7。第二,普通 GRPO 在这种长程 research setting 中不稳:BrowseComp 反而从 26.8 降到 25.3,BrowseComp-ZH 几乎不变;IGPO 则在两个 benchmark 都有正增益。原因和方法部分一致:GRPO 的 sparse outcome reward 很难处理 200-turn 级 credit assignment,而 IGPO 的 turn-level IG reward 给了更密的监督。
Capability boundary: Pass@K
Figure 2a–2b 解读:左图是 BrowseComp,右图是 BrowseComp-ZH。BrowseComp 上 RL 在所有 上都高于 SFT,Pass@1 从 26.8 到 29.1,Pass@16 从 61.7 到 63.7,说明 RL 不只改善单次采样,也略微抬高了 capability boundary。BrowseComp-ZH 上最大增益集中在小 :Pass@1 从 35.7 到 37.7,Pass@2 从 52.9 到 53.3;但大 时 SFT 本身已经很强,Pass@8 达到 74.0、Pass@16 达到 78.5,RL 版本在大 反而略低(文中解释可能与 RL data 全英文造成的 distribution mismatch 有关)。
Pass@K 分析的意义是:如果只看 Pass@1,会低估 4B deep research agent 的潜在能力。特别是在 BrowseComp-ZH,DR-Venus-4B-SFT 的 Pass@16=78.5,超过 Tongyi-DR-30B 的 46.7,也超过 GPT-5 High 的 65.0。这支持论文的 deployment claim:小模型通过 test-time scaling 可以达到很高上限,但 RL 更偏向让强轨迹在低采样预算下更可靠地出现。
Tool-use analysis: correct trajectories browse more
Figure 3 解读:这张图比较 SFT/RL 下 correct、wrong、overall trajectories 的 browse ratio。总体规律是 correct trajectories 的 browse ratio 通常高于 wrong trajectories,说明 deep research 成功不只是“多 search”,而是需要进入网页做更深证据检查。RL 后 overall browse ratio 从 17.49% 提升到 22.46%,correct trajectories 的 browse ratio 从 23.71% 提升到 28.96%;在 xBench-DS-2510 上,SFT 出现 wrong trajectories browse more 的反常模式(15.57% vs. 14.51%),RL 后反转为 correct trajectories browse more(22.99% vs. 17.50%)。
这个结果说明 IGPO 不是简单鼓励“浏览越多越好”,而是更好地把工具使用与正确答案对齐。对 Search & RAG Agent 来说,这比单纯提高 retrieval recall 更关键:模型必须学会何时从搜索摘要转入页面阅读,以及如何把页面证据整合进最终答案。
Limitations and caveats
论文没有展开独立的 limitations section,但正文给出几个实际 caveat。第一,RL data 当前全英文,这可能解释 BrowseComp-ZH 在大 下 RL 不如 SFT 的现象;跨语言 deep research RL 仍需要更均衡数据。第二,DR-Venus 仍明显低于 frontier foundation models:例如 GPT-5 High 在 xBench-DS-2510 是 75.0,DR-Venus-4B-RL 是 40.7;Kimi-K2.5 在 DeepSearchQA 是 77.1,DR-Venus-4B-RL 是 39.6。第三,训练和推理依赖外部 Serper/Jina/Qwen summarizer/Judge 服务;这会影响 reproducibility、成本和隐私边界。第四,Pass@K 暗示小模型上限很高,但 test-time scaling 本身会增加推理成本,edge deployment 需要在 latency、采样次数和成功率之间取舍。
总体结论是:DR-Venus 证明 4B agent 在只有约 10K open data 的条件下可以达到新的 small-model frontier;关键不是盲目堆模型规模,而是让 SFT 数据更干净、更偏长程,让 RL reward 更密、更贴近信息获取过程,并确保训练协议与推理工具协议一致。