DeepDive
Deep Search Agent · arXiv 2025 · 2509.10446

DeepDive:从知识图谱「反向造题」,再用多轮 RL 教会模型深搜

开源模型在 BrowseComp 这类「答案藏在十几个网页之外」的题上普遍不到 10%。论文把差距归因于两件事:没有足够难的题,也没有让模型在多轮搜索里被奖励的训练方法。 DeepDive 的做法是先在图谱上走一条长链、把中间线索模糊化造出难题,再用带冗余查询惩罚的多轮 GRPO 在这些题上训练。

Rui Lu, Zhenyu Hou, Zihan Wang 等 · 清华 / Z.AI / 东北大学 arXiv 2509.10446 ↗ 代码与数据 ↗
TL;DR · 30 秒抓住核心

深搜训练卡在数据上:HotpotQA 这类题几个明确实体搜一下就有答案,而 BrowseComp 的题要求你在多个「模糊实体」之间反复推理、搜索、验证。人工造这种题太贵,DeepDive 就用知识图谱自动造。

造题流程是「先定答案,再逆向写题」:按出度范围 4–8 筛节点,走一条长度 5–9 的长链,用 LLM 挑下一个节点保证连贯,再把链上每个节点的属性模糊化(「1948 年」写成「20 世纪 40 年代末」),最后用一个带搜索的前沿模型做难度筛——问 4 次只要答对 1 次就丢弃。

训练端是端到端多轮 GRPO:格式全对 + 答案判对才给 1 分,再减去 λ·S(T) 惩罚同一个轨迹里高度相似的重复查询。这个小惩罚让模型在分数略降的情况下少调约 14% 的工具。

15.3%
DeepDive-32B 在 BrowseComp 的准确率
仅 SFT 时 9.5%,WebSailor-32B 10.5%
3,250
KG 合成 QA 总数
1,016 条 SFT + 2,234 条 RL
24.8%
并行采样 8 次、选最少工具调的答案
多数投票只有 18.8%,pass@8 上限 37.6%
01

难点不在「搜得到」,而在「先搞清楚该搜谁」

先看清 BrowseComp 这类题的形状:能不能搜到答案,取决于能不能先把模糊的描述还原成具体实体。

论文 Figure 2 用一道 HotpotQA 题和一道 BrowseComp 题做对比。HotpotQA 问「World Fellowship Center 东边的山有多高」,实体是明确的,搜一次就能定位。BrowseComp 的题则给出一串绕圈子的描述——「偶尔打破第四面墙、曾在 1960–80 年代播出不到 50 集电视剧的虚构角色」——每个描述都指向一个模糊实体,必须边搜边推理,一步步把范围收窄。

HotpotQA 型

Definite Entity

问题里给出可以直接搜索的实体名,推理链短、可预测。只需要 Browse,不需要长程推理。

BrowseComp 型

Blurry Entity

问题里是一组特征描述,实体本身要借搜索+推理才能锁定。Browse 与 Reason 必须交替,网页信息往往分散、矛盾、难以定位。

这就带来两个互为因果的缺口。论文在引言里明确指出,开源模型落后的原因是:

所以问题可以拆成两问:怎么批量造出足够难的题?怎么让模型学会在工具环境里长程地搜?后面两节分别对应论文的两大支柱。

02

前人两条路:题太简单,或者只学会了「搜一下就答」

数据侧和训练侧各有一路主流做法,DeepDive 是在它们各自的短板处补位。

数据侧

用现成多跳 QA / 人工标注

HotpotQA、2WikiMultiHopQA、Bamboogle、Musique 等数据集让 agent 有题可训,但题目结构可预测,搜几次明确实体就能作答。

卡点:难度不够,学不会「在模糊线索间迭代」「在矛盾信息里筛证据」。人工造 BrowseComp 级题目则成本高、难扩展。

训练侧

在简单数据上做检索式 RL

R1-Searcher、ReSearch、Search-R1、DeepResearcher 等用 RL 优化「推理 + 检索」的组合,但训练和评测主要停留在多跳 QA 场景。

卡点:训练目标只追求「找到答案」,对「探索是否充分、查询是否重复」没有约束;模型容易收敛到浅层查询模式。

DeepDive 的拆分

数据用图谱「可控地变难」,训练用多轮 GRPO + 多样性惩罚

数据侧从 KG 自动合成:图谱天然支持多跳、每个节点都带属性,属性能被选择性遮盖——难度是「旋钮」而不是「祈祷」。训练侧沿用 GRPO,但在奖励里加入 r(T) − λ·S(T),把「问得重复」直接扣分。

03

把答案「藏」进图谱长链:先定终点,再逆向写题

数据合成的全部巧思,就是让图上的路径决定答案在哪、让模糊化决定题目有多难。

知识图谱记作 G = (V, E),每个实体 vi 带着一组属性 A(v)。论文先挑一条路径:

P = [v0, v1, …, vk]    N(vi) = { u | (vi, u) ∈ E ∧ dmin ≤ d(u) ≤ dmax }    vi+1 = LLM-select(Pi, N(vi))
Eq. 4–5 · 候选集按出度 d 过滤;再从候选里由 LLM 选与当前路径最相关的下一个节点,兼顾「复杂」和「连贯」

然后,把路径上每个节点和它的属性拼成「属性富集路径」 PA,从终点 vk 的属性里选一个 aik 作为标准答案,并由 LLM 对整条路径做模糊化:

(q, aik) = LLM-obscure(PA)
Eq. 3 · 问题 q 描述的是「怎么从起点一步步走到终点」,答案却是终点的某个属性——答案和问题描述在文本上并不相邻

论文写明的合成超参是:路径长度 k ∈ [5, 9],出度 d = 3,dmin = 4,dmax = 8;模糊化用 Gemini-2.5-Pro;图谱数据来自 KILT 与 AMiner 两个公开图谱。最终产出 3,250 条,随机拆成 1,016 条 SFT、2,234 条 RL。

为什么要卡出度

太热门会被猜中,太冷门走不下去

出度太高的节点是「过度热门」的实体,模型很容易猜到;出度太低则无法扩展路径。上界 dmax = 8 砍掉热门枢纽,下界 dmin = 4 保证每一步都有足够分支让 LLM 挑选。这与直接把出度固定在 d = 3 形成对照:固定的路径完全由度数决定,而 DeepDive 还多一层 LLM-select 的语义把关。

题目造出来还不算完,论文再用一个带基础搜索能力的前沿模型(如 GPT-4o)做难度筛:每道题测 4 次,只要任何一次答对就丢弃,只有 4 次全失败的题才保留。这一步直接把「模型查表就能答」的题筛出数据集。

自己动手:固定出度 vs 度数区间 + LLM 挑选

下面把 10 个候选节点按实际出度排开。拖动出度区间,看哪些节点能进入下一步的候选集、有多少条路径可以延伸;点「让 LLM 挑选」看与路径语义不相关的节点被剔除后还剩多少。

d d = 3
实时结果
拖动滑块调整区间,观察候选节点数量变化。
这个模拟简化了什么?点开看与论文公式的差异

论文并没有公布具体的度分布和 LLM-select 的命中率;这里的 10 个节点与「剔除 2 个」都是为了让你手算而设定的最小示例,反映的是 Eq. 4–5 的逻辑,不是论文数据。

真实实现中,N(vi) 是对当前节点所有邻居按出度区间筛出的候选集,LLM 每次只选 1 个下一个节点;这里把候选数直接理解为「可延伸路径条数」,是为了让「广度」和「零候选」两种失败模式可见。

04

奖励 = 严格二元对错 − 重复查询扣分

训练端的全部创新集中在一个减号上:对错之外,再惩罚「在同一个轨迹里反复问几乎相同的问题」。

轨迹沿用 ReAct 式循环:思考 ct → 动作 at(search / click / open)→ 观测 ot,直到模型用终止动作 aeos 给出答案。一条轨迹是

T = [q, (c1, a1, o1), …, (cm, am, om), cans, aeos],   m ≤ n
Eq. 1 · 多轮循环直到模型自认为信息足够;最大轮数 n 在评测时逐级调高

严格二元奖励要求每一步格式都对,且终止答案经 LLM-as-Judge 判定与标准一致:

r(T) = 1  if  (∀i, Format(ci, ai)) ∧ Judge(aeos, a*);   否则 0
Eq. 8 · 用 LLM judge 是因为实体可能有多种合法写法("Inter" vs "Inter Corp.")

冗余惩罚用轨迹内所有查询两两之间的 Jaccard 相似度平均值来度量,再以系数 λ 从奖励里扣除:

S(T) = 1T(T−1) Σi≠j sim(qi, qj),   sim(qi, qj) = |qi ∩ qj| / |qi ∪ qj|
r′(T) = r(T) − λ · S(T)
Eq. 7、9 · S(T) ∈ [0, 1]:查询全相同为 1,完全不相交为 0;训练中 λ = 0.1

GRPO 部分沿用标准形式:每个问题采样 G 条轨迹,组内标准化得到优势 Ai,再用裁剪的目标函数(Eq. 6)更新策略。一个关键的工程选择是 KL 系数 β = 0——论文引用已有工作(Vassoyan et al., 2025)说明去掉 KL 惩罚、放开探索,对这类任务更有利。

自己动手:Jaccard 相似度与 π 近似

论文 Figure 4 的例子:query 1 =「deep neural network」(3 个词),query 2 =「neural network eval」(3 个词),交集 2、并集 4,相似度 2/4 = 0.5。勾选要放进轨迹的查询,看 S(T) 怎么变——注意:它算的是两两平均,不是「相邻平均」,查询越多,分母 T(T−1) 涨得越快。

S(T) 两两平均相似度
0.00
r′ = r − λ·S,λ=0.1,取 r=1
1.00
计算明细

有两种边界值得记住:一是 λ 与准确率存在权衡——Figure 7b/7c 报告加入冗余惩罚后,后期准确率约高 20%,工具调用约少 14%。二是 惩罚是「平均」而非「最大」,所以一条轨迹只要保持整体多样,偶尔的重复查询不会把奖励一棍子打没;但如果模型收敛到「换个说法再搜一次」,S(T) 会快速逼近 1,扣满 0.1。

训练配置:SFT 用 Claude-4-Sonnet-Thinking 拒绝采样生成 858 条冷启动轨迹,backbone 为 GLM-Z1-9B-0414 与 QwQ-32B,各训 3 epoch、全局 batch 32、学习率 1×10−5、最大上下文 104,800;RL 用 Slime 框架,rollout 8、每 prompt 16 样本、全局 batch 128、temperature 1.0、最大上下文 51,200 tokens、学习率 1×10−6。

05

整条流水线:图谱造题 → 冷启动 SFT → 多轮 RL

论文 Figure 3(造题)与 Figure 4(训练)拼起来,就是下面这张端到端流程。

DATA · KG SYNTHESIS 1 Selective Walk KILT / AMiner k ∈ [5,9] 4 ≤ d(u) ≤ 8 2 LLM-Select 逐跳选最相关邻居 P = [v₀ … v_k] 3 Obscure Gemini-2.5-Pro 属性 → 模糊描述 答案 = v_k 的某属性 4 Difficulty Filter GPT-4o + search 测 4 次,对 1 次即弃 3,250 条留存 1,016 · SFT 2,234 · RL 5 Cold-start SFT Claude-4-Sonnet-Thinking 拒绝采样 858 条高质量轨迹 GLM-Z1-9B / QwQ-32B 6 Multi-turn GRPO (Slime) r′ = r − λ·S(T),λ = 0.1 KL β = 0 · rollout 8 · 16/prompt max ctx 51,200 · lr 1e-6 热启动 7 Test-time Scaling 单次:调大 max tool calls(8 → 128) 多次:并行采样 K 次,选「工具调用最少」的答案 > 多数投票 评测:LLM-as-Judge(Llama-3.1-70B),每个数据集跑两次取平均
图 1:根据论文 Figure 3、Figure 4 与 §3.1 训练细节重绘。灰色为数据合成与既有组件,陶土红为论文的多轮 RL 核心。

有两个容易忽略的细节:一是训练时的环境是真实 API(Serper 检索返回前 10 条、Jina 负责 click/open),不是离线快照,所以模型学到的是真实网页的噪声分布;二是训练期的评测只在 BrowseComp-266 子集上做(最多 75 轮),训练饱和后才换到完整 1,266 题、上限提到 128 轮——这解释了为什么 Figure 5 的曲线比最终表 1 的数字更低。

06

开源里第一档:15.3%,但离闭源深研仍有 36 个点

看三个层面:和谁比、RL 带来了什么、推理时加计算能加到多高。

和基线的对照(Table 1,准确率 %)

模型BrowseCompBrowseComp-ZHXbench-DSSEAL-0
OpenAI DeepResearch51.5*42.9*——
Claude-4-Sonnet-Thinking†14.730.853.037.8
GPT-4o†1.9*12.830.09.1
Claude-3.7-Sonnet†4.514.229.014.4
WebSailor-32B10.5*25.5*53.3*—
DeepSeek-R1-05283.228.737.05.4
QwQ-32B†1.314.527.04.5
DeepDive-32B (SFT only)9.523.048.523.9
DeepDive-32B15.329.751.825.5

† 表示论文为这些非浏览模型接上了浏览工具;* 表示直接沿用原论文报告的数字。Table 1 中 Xbench-DeepSearch 的 DeepDive-32B 为 51.8,Table 3 同行为 50.0,以 Table 1 为准。

推理时加计算:工具调用越多越好,但选答案的方式更重要

Figure 6c 的两个对照:多数投票把 BrowseComp-266 从 12.0 提到 18.8,而「选工具调用最少的那个答案」提到 24.8,逼近 pass@8 的理论上限 37.6。论文给出的解释是——模型对好答案有信心时会早早停手,额外调用往往反映的是不确定。工具调用扩展上(Figure 6a),最大工具调用达到 16 以上后,RL 版明显拉开与 SFT 版的差距。

反直觉

奖励变「严」反而学得更好

Figure 7a:去掉格式奖励后曲线基本停在 8.0 附近不动,加上格式奖励后整段训练期高出约 2 个绝对点。Figure 7b:加入冗余惩罚后后期准确率约高 20%,同时工具调用约少 14%。严格的格式约束没有「饿死」稀疏奖励,反而让优化更稳定。

07

什么时候别指望它:难度天花板、过度搜索、任务错配

论文自己承认的边界,配上实验里能读出来的边界。

论文承认

难度天花板

合成数据难度上限「显著低于 BrowseComp」,这是 15.3% 与 DeepResearch 51.5% 差距的直接原因。题目再难,也逃不出图谱结构 + LLM 模糊化这两道加工。

论文承认

过度搜索

主要用难题训练,导致 DeepDive-32B 出现 over-search:即使已有答案,也倾向继续调用工具。论文把「最优训练步数 / 更合适的奖励设计」列为未来工作。

从实验读出

增益依赖模型尺度

9B 模型 RL 后 BrowseComp 从 5.6 到 6.3、SEAL-0 反而从 15.2 到 12.2。论文对此的解释是小模型推理能力有限、易对合成数据过拟合——所以不要把 32B 的结论直接外推到更小的模型。

需要谨慎套用的三个场景

一句话:DeepDive 解决的是「用可控成本把题变难、把搜索过程奖励对」,而不是「把难度上限推到 BrowseComp」。论文给出的下一步是补一份半自动 i.i.d. 数据——用带搜索的 o3 辅助人工造 2,997 英文 + 275 中文题,论文报告单靠它做 RL 后 32B 模型 BrowseComp 到 22.2%(§4)。这也印证了:数据难度依旧是这条路线的主变量。