DeepSearch-World:可验证环境中深度搜索 Agent 的自蒸馏

  • 关联论文:2607.07820
  • 作者:flyP
  • 更新:2026-07-22

一句话结论

作者把"深度搜索 Agent"训练里 SFT 轨迹死板、RL 奖励稀疏两大痛点,合并成一个方案:先造一个确定性可验证的环境(DeepSearch-World),再让 Agent 在里面自己跑、自己筛、自己蒸馏(DeepSearch-Evolve)。结果 9B 模型没靠更强教师蒸馏,就在 BrowseComp 上拿到 31.2%、GAIA 61.5%、HotpotQA 93.4% 的成绩。

解决什么真问题

Deep Search Agent 这一类工作(Web 搜索 + 多跳推理 + 工具调用)目前主流训练范式有两条路,各有明显短板:

  1. 教师蒸馏 SFT:从 GPT-4、Claude 等更强模型采轨迹,再用 SFT 把小模型"绑死"在这些轨迹上。问题是轨迹分布固定,Agent 见到训练集外的 query 不会自己长进,遇到工具报错也只会沿原路径重试。
  2. 稀疏奖励 RL:环境反馈只在最后给一个对错,中间几十步都是黑盒。长程任务里 credit assignment 极弱,要么训不动,要么训歪。

DeepSearch 的核心观察是:两条路其实都缺一个"可信沙盒"。真实 Web 搜索不可复现(页面会变),小改 query 就拿到不同文档,于是无论 SFT 还是 RL,都拿不到稳定的监督信号。

核心方法

2.1 DeepSearch-World:可验证环境

不是爬真实 Web,而是人造一个完全确定性的世界:

  • 实体级随机游走构造 QA:先有一张实体图(节点是实体,边是关系),从起点实体沿边走 k 跳,路径上若干实体作为"问题中必须被检索/链接到的桥接实体",起点 + 终点 + 桥接路径 = 一个多跳 QA。420K 任务就靠这条路生成。
  • 可复现搜索与读页工具:环境里的"搜索引擎"返回的是预先索引好的快照(不抓网络),"打开页面"返回的是同一份快照。同一 query 永远拿到同样的文档集,于是轨迹可重放、奖励可验证。
  • Agent 认知行为支撑:环境能回答"你现在找到了几个桥接实体?""还差几步?""前一次检索失败的原因是什么?"。这让 Agent 有空间做 progress verification、grounded reflection、failure recovery——这是后面自蒸馏能成的关键。

2.2 DeepSearch-Evolve:自蒸馏循环

整体是一个没有外部教师的迭代 pipeline:

init:  base_agent (e.g., 9B base SFT model)
loop:
  1. rollout: 拿当前 agent 在 DeepSearch-World 上跑一批 query, 得到完整轨迹
  2. filter: 用环境给出的"是否找到所有桥接实体 + 终点正确"作为硬标签,
            只保留成功的轨迹(也可保留带失败-反思对的轨迹作为负样本/对照)
  3. data mixing: 把成功轨迹按 hop 数、桥接难度、工具使用多样性做配比,
                 防止模型塌缩到某种固定的检索套路
  4. SFT: 在混合后的轨迹上继续微调 agent
  until: 验证集饱和或预算耗尽

要点:

  • 没有"更强大模型"蒸馏。所谓"自蒸馏"指:用当前 agent 自己生成的、自己验证为对的轨迹,去监督自己的下一个版本。Environment 提供 ground-truth verification,不依赖人类或外部教师。
  • 轨迹过滤 + 配比是关键技巧。论文强调若直接拿全部 rollout 训,会把"碰巧蒙对"的轨迹学进去;data mixing 是防止自蒸馏退化的核心保险。

2.3 训练目标(伪代码)

for iteration in range(N):
    # 1) rollout
    trajectories = []
    for q in sample_tasks(env, batch_size):
        traj = agent.rollout(env, q, max_steps=H)
        trajectories.append(traj)

    # 2) filter by env-verified success
    good = [t for t in trajectories if env.verify(t) is True]

    # 3) data mixing by difficulty / tool-diversity buckets
    mixed = mix(good, weights=hop_distribution)

    # 4) SFT on successful trajectories
    agent.sft(mixed, lr=lr, epochs=E)

关键实验与数据

  • BrowseComp:31.2%。BrowseComp 是 OpenAI 出的"反爬、抗 browse-only"难题集合,难度高于 HotpotQA。31% 在 9B 规模、且不靠 GPT-4 级教师蒸馏的设定下,是一个有意义的信号。
  • GAIA:61.5%。GAIA 是带工具的通用助手 benchmark,Agent 要综合搜索、读文档、计算。9B 模型拿到 61.5%,说明 self-evolution 没有让模型"只会做多跳 QA"。
  • HotpotQA:93.4%。已接近该 benchmark 的强基线水准。
  • 规模:9B 参数(DeepSearch-World-9B),不是超大模型也能拿到上述成绩。
  • 环境规模:420K 多跳 QA,全部来自实体级随机游走,可按需扩展。

值得注意的"原文未明确"项:论文摘要里没公布的具体细节——比如 base model 是哪一个(Qwen?LLaMA?)、具体 RL/SFT 超参、self-distill 跑了多少轮、轨迹过滤阈值是多少——这些都在正文里,原文摘要级信息暂缺。

亮点与局限

亮点

  1. 环境即方法论:把"web agent 难训"归因到"环境不可验证",然后用合成环境解耦训练与真实 Web 的耦合。这个思路可以复用到其它领域(SQL Agent、GUI Agent、Code Agent)。
  2. 不要更强教师:自蒸馏证明一个 9B 模型靠环境反馈就能"自己把自己训强",降低了 Web Agent 训练对闭源大模型的依赖。
  3. 数据生成机制清晰:实体级随机游走是一个可解释、可复现、可扩展的合成数据流程,不是黑盒 prompting。
  4. 全栈开源承诺:环境、420K 训练池、验证集、模型、代码全部释放,社区可复现。

局限

  1. 环境与真实 Web 的 gap:可验证意味着"看起来像 web",但检索质量、噪声分布、长尾实体覆盖率都和真实搜索不一样。论文没有给出 zero-shot 到真实 Web 上的迁移曲线。
  2. 轨迹分布塌缩风险:自蒸馏天然有"近朱者赤"的反馈循环,data mixing 是缓解,不是根除。需要更多 iteration 才看得清有没有模式崩塌。
  3. 算力门槛没说清:420K QA × 多轮 rollout × 多轮 SFT 的总成本没披露,对想复现的实验室是不确定项。
  4. BrowseComp 31.2% 仍有很大空间:相对于 GPT-4 级 agent 的 50%+,9B 模型在最难 benchmark 上仍是追赶者定位。
  5. "自进化"上限未验证:摘要里只说"competitive",没说自我迭代是否存在收益递减或负收益拐点。

对工程落地的启发

  • 企业知识库 Agent 的训练范式:把内部 wiki + 文档结构化成"实体图 + 多跳 QA"是可行的合成数据路线,比靠人标 / 调闭源 API 抽取便宜得多。
  • 环境可验证优先于环境真实:很多 agent 团队第一步就试图接真实 API,结果失败 case 不可复现、不可学习。先造一个低保真但确定的环境把训练-评估闭环跑通,再迁移到真实环境,是更稳的工程顺序。
  • 自蒸馏 + 硬验证是性价比解:在没有强教师预算时,"环境给 ground-truth + 自己的 rollout 自己筛" 是一条不依赖外部闭源模型的路。
  • data mixing 是反塌缩的廉价保险:哪怕只按 hop 数 / 工具使用类型做桶配比,也能显著缓解自蒸馏后期的模式崩塌。

与同方向工作的关系

  • Web Agent 训练:与 WebGPT、WebVoyager、AutoBrowse、Open-Interpreter 等"在真实 Web 上跑"的工作互补——DeepSearch 是"先在合成环境训,再迁移"。
  • Agent RL:与 RAGEN、Search-R1、Agent-R1 等 RL 路线相比,DeepSearch 用 SFT 自蒸馏代替了稀疏奖励 RL,规避了长程 credit assignment 的不稳定。
  • 合成环境:与 TextWorld、ALFWorld、SQL 环境这一脉"deterministic env for agent training"思路一脉相承,但 DeepSearch 把它专门针对 multi-hop Web QA 设计。
  • Agent Foundation Model:与最近的 "agent foundation model"(如 AppWorld、UI-TARS)方向形成对照——前者靠大规模真实环境轨迹,后者靠可控合成环境 + 自蒸馏。

适合谁读

  • Web Agent / Deep Research Agent 的研究员与工程师,尤其关心训练范式(数据合成 + RL/SFT 取舍)。
  • 关注 Self-improving / Self-evolving AI 的研究者:这是该方向在 Web Agent 上的一个具体落地样本。
  • 企业内部 RAG Agent 的工程团队:能从中学到"如何不靠闭源模型蒸馏得到一个可用的 deep search 模型"。
  • 关注 可验证环境 / 合成数据 的研究者:实体级随机游走 + 自蒸馏循环是可复用的方法模板。

工程落地与核查(Jay)

事实核查

核查项 原文声明 核查结果
数字来源 BrowseComp 31.2% / GAIA 61.5% / HotpotQA 93.4% ✅ abstract 原文确认;v2 摘要同
模型规格 9B(DeepSearch-World-9B) ⚠️ 抽象只说「9B」;未指名 Qwen/LLaMA 等具体家族
训练池规模 420K 多跳 QA ✅ abstract 原文确认
自蒸馏无外部教师 「without distillation from more capable models」 ✅ abstract 原文确认
开源承诺 「We will release environment, 420K training pool, validation set, model, and code」 ⚠️ 截至 2026-08-15,GitHub URL 未出现在 abstract 页面;文件未核查实际 release 状态
实验设置 abstract 未披露具体 base model 超参 / 迭代轮次 / 过滤阈值 ❌ 均为原文缺省,工程参考价值有限

⚠️ 存疑与坑点

  1. HotpotQA 93.4% 异常高:该数字在 9B 非蒸馏设定下格外显眼;作为对比,主流更强模型在该任务上亦难达到此水准。文件解读忠实引用 abstract 数字,但下游引用建议补「仅原文 single-run 数字,原文未给置信区间」。
  2. 「9B」未指明具体模型家族:文件解读补注「e.g., Qwen2.5-9B-Instruct」属工程推断,非原文声明。落地若要复现,需自行测试 Qwen/LLaMA/Mistral 多个 9B 家族的敏感度差异。
  3. GitHub 链接未释放:abstract 注明「will release」但未给 URL;截至 2026-08-15 未核验 release 状态。若要复用环境代码,需等作者实际 release 或自行实现 DeepSearch-World 接口。
  4. BrowseComp 31.2% 与 GAIA 61.5% 的 baseline 对照:abstract 说「competitive compared with open-source agents」但未给具体对比模型名称。31.2% 在 BrowseComp(抗爬难题集)上实际是强是弱,需对照该 benchmark 的 leaderboard 才能判断。
  5. 420K 规模扩展成本:420K QA × 多轮 rollout × 多轮 SFT 的 GPU hour 原文未披露。工程团队在立项评估时应预留 2-3 周实测预算。

工程落地三步走

第一步:实体图 + 随机游走构建合成环境 DeepSearch-World 的核心工程价值不在模型,而在「确定性可验证环境」这个方法模板。最小可行复现:

import random
from collections import defaultdict

class EntityGraph:
    def __init__(self, entities: list[str], relations: list[tuple[str, str, str]]):
        # entity -> list of (relation, target_entity)
        self.adj = defaultdict(list)
        for src, rel, tgt in relations:
            self.adj[src].append((rel, tgt))
            self.adj[tgt].append((rel, src))  # 无向

    def random_walk(self, start: str, k: int) -> list[str]:
        path = [start]
        current = start
        for _ in range(k):
            edges = self.adj[current]
            if not edges:
                break
            rel, nxt = random.choice(edges)
            path.append(nxt)
            current = nxt
        return path

    def make_qa(self, start: str, k: int) -> tuple[str, list[str], str]:
        path = self.random_walk(start, k)
        bridge_entities = path[1:-1]  # 桥接实体
        answer = path[-1]
        question = f"Starting from {start}, follow {k} relations. What is the final entity?"
        return question, bridge_entities, answer

第二步:自蒸馏循环(略过模型重训版) 若只想用已训好的 DeepSearch-World-9B(等 release 后),最小集成:

from openai import OpenAI  # 或兼容 API

agent = load_pretrained("DeepSearch-World-9B")  # 等 release
env = EntityGraph(entities=entities, relations=relations)  # 自行构建或等官方

for iteration in range(N):
    trajectories = []
    for q in env.sample_tasks(batch=32):
        traj = agent.rollout(env, q, max_steps=H)
        trajectories.append(traj)
    good = [t for t in trajectories if env.verify(t)]
    mixed = mix_by_hop(good)
    agent.sft(mixed)  # 若不想重训可跳过此步

第三步:关键部署检查项 - 环境确定性:每次启动 seed 必须固定,否则 QA 生成不可复现 - entity 覆盖度:随机游走依赖 entity graph 密度;长尾实体覆盖率低时 bridge entity 多跳 QA 会失效 - verifier 硬标签:env.verify(t) 必须是确定性布尔值,不能是概率阈值;模糊验证会让自蒸馏退化 - data mixing 防止塌缩:哪怕只用 hop 数分桶也比不分桶好;建议同时按工具调用多样性分层