深度解读 · LLM / 深度搜索 Agent 训练数据

结构复杂 ≠ 真搜得动:
给搜索 Agent 喂「抗捷径」数据

现有方法靠堆图结构复杂度造难度,但模型总能找到更便宜的「识别捷径」绕过预期搜索过程。FORT 把捷径分析变成数据合成的控制旋钮,仅靠 SFT 就训出同尺寸最强搜索 Agent。

原文:arXiv 2606.12087 · 论文阅读 · RUCAIBox(人大 AI Box) · 解读视角:search-agent 训练实操启发
一句话抓住重点

训练深度搜索 Agent 需要「答案必须搜够证据才能拿到」的可验证题,但把图结构堆复杂并不等于真的难搜——模型常能走一条更便宜的识别路径绕开预期的多步检索。FORT 把这种「捷径」形式化为四类风险(证据共覆盖、单线索选择性、暴露常量、先验绑定),并在实体选择→证据图构造→问题生成→对抗精修四阶段逐一压制;用产出的轨迹仅做 SFT,FORT-Searcher(激活仅 3B)就在同尺寸开源搜索 Agent 中取得最佳综合成绩

4 类
可操作的捷径风险
66.2
同尺寸开源最高综合分
仅 SFT
无需 RL,激活 ~3B
141.0
FORT 数据求解步数 $\widehat{\Omega}$
01 · 问题在哪

为什么「图越复杂」的数据,训出来的 Agent 反而没变强?

深度搜索 Agent 的目标能力不是检索,而是在开放网络上持续发现证据:多轮改写查询、找到难找的信息、判断证据可靠性、串联零散线索后才给出答案。要训这种能力,需要「答案只有搜够证据才能拿到」的可验证题。

主流合成方法靠堆结构造难度——增加跳数 / 图形状、加分层约束、提升证据分散度(treewidth)。问题是:这些结构先验只定义了「预期的解题过程」,却不保证 Agent 真执行时也走这条路

⚡ 核心错位
一道题可以线索很多、证据图很长,但只要求解器能在实际搜索时找到一条更便宜的识别路径,它依然很简单。在这种数据上训练收益有限——因为它几乎不激励模型去做长程搜索、规划与信息综合。
🧱
结构复杂度(intended)
跳数、图形状、约束数——你以为的难度
🏃
实现难度(realized)
Agent 真跑时被迫付出的检索成本——真正的难度
02 · 难度框架

把「真难度」写成公式:由最便宜的识别路径决定

论文用一个「捷径感知」的难度框架把这件事说清楚。一道任务记为 $q=(\mathcal{X},\mathcal{C}_q,\Sigma)$:$\mathcal{X}$ 是答案空间,$\mathcal{C}_q$ 是问题表达的约束(线索)集合,$\Sigma$ 是检索接口(如网页搜索)。对任意线索子集 $\mathcal{P}$,$\mathrm{Ans}(\mathcal{P})$ 是只用这些线索后剩下的候选池:

$$ \mathrm{Ans}(\mathcal{P})=\left\{x\in\mathcal{X}:\bigwedge_{c_i\in\mathcal{P}}c_i(x)=1\right\},\qquad \mathrm{Ans}(\mathcal{C}_q)=\{y^{\star}\} $$
题目良定义:全部约束唯一锁定金标答案 $y^{\star}$

关键洞察:一个「无先验、不瞎猜」的参考求解器 $\Pi_{\mathrm{post}}$ 不需要验证所有线索,只要找到某个已足以唯一识别答案的子集就行。于是任务本身强加的成本(纯后验成本)下界为最便宜识别路径的长度:

$$ D_{\mathrm{post}}(q)\;\geq\;Q_{\Sigma}^{\star}=\min_{\mathcal{P}:\,\mathrm{Ans}(\mathcal{P})=\{y^{\star}\}}\;Q_{\Sigma}(\mathcal{P}) $$
难度由「最便宜的能锁定答案的子集路径」决定,而非线索总数

而单条路径成本又被两个量同时下界:

$$ Q_{\Sigma}(\mathcal{P})\;\geq\;\max\!\left(M_{\mathrm{ev}}(\mathcal{P}),\;\mathrm{dep}(\mathcal{P})\right) $$
$s(\mathcal{P})$线索子集的选择性:剩余候选数 $|\mathrm{Ans}(\mathcal{P})|$。越小越「一击命中」
$M_{\mathrm{ev}}(\mathcal{P})$验证该子集所需的独立证据获取次数。被一条网页同时覆盖多条线索 → 它变小
$\mathrm{dep}(\mathcal{P})$路径的串行依赖深度。题面暴露了本该后续才发现的常量 → 它变小

求解器侧再叠一层:具体模型可以靠先验知识省掉一部分搜索。记实际成本 $\Omega(q,\pi_0)=D_{\mathrm{post}}(q)-U_{\pi_0}(q)$,其中 $U_{\pi_0}(q)$ 是先验带来的成本削减。难度坍塌就发生在 $Q_{\Sigma}^{\star}$ 被压小,或 $U_{\pi_0}(q)$ 被推大这两条通道上。

💡 我的看法
这个框架最值钱的一句话是:难度的下界是「最便宜识别子集」而不是「全部约束」。我们做 search-agent 数据时常默认「线索越多越难」,但只要任意一个线索子集就能唯一定位答案,模型就会奔向那条捷径。换句话说——难度不是你加了多少约束,而是你有没有堵住所有便宜的旁门。这直接解释了为什么很多「看起来很复杂」的合成题,训练曲线却不动。
03 · 四类捷径

模型会从哪四扇「后门」溜走?

论文把可操作的捷径归为四类:前三类通过压低 $Q_{\Sigma}^{\star}$ 起作用(route-level,题目结构层面),第四类通过推高 $U_{\pi_0}(q)$ 起作用(solver-level,模型层面)。

捷径它是什么压低了哪个量层级
单线索选择性
single-clue selectivity
某一条 / 一小撮线索就把候选缩到一两个$s(\mathcal{P})\!\downarrow$ → $Q_\Sigma^\star\!\downarrow$路径级
证据共覆盖
evidence co-coverage
一条网页 / 片段同时验证了多条预期线索$M_{\mathrm{ev}}\!\downarrow$ → $Q_\Sigma^\star\!\downarrow$路径级
暴露常量
exposed constants
题面直接给出本该后续检索才发现的名字/日期/数字$\mathrm{dep}\!\downarrow$ → $Q_\Sigma^\star\!\downarrow$路径级
先验绑定
prior-knowledge binding
模型在证据支撑前就凭参数化知识说出答案$U_{\pi_0}\!\uparrow$ → $\Omega\!\downarrow$求解器级
⚡ 注意:第四类是「模型相关」的
前三类是题目本身的结构缺陷,换谁来做都偷得了懒;先验绑定却因模型而异——同一道需要长程检索的题,对一个「恰好背过这个冷门实体」的模型来说就直接秒了。所以根治先验绑定的手段(选长尾实体)跟根治结构捷径的手段是两套思路。
04 · 轨迹信号

难度看不见?用三个可观测信号给数据「体检」

$s,M_{\mathrm{ev}},\mathrm{dep},U_{\pi_0}$ 这些理论量在开放网络里无法精确计算。论文转而用三个从真实轨迹里能直接量出来的信号来诊断「实现难度」:

⏱️
$\widehat{\Omega}$ · 求解成本
成功轨迹的平均检索调用次数。高 ≠ 难,可能在答案出现后空转
🎯
$\overline{T}_{\mathrm{hit}}$ · 答案命中时刻
答案首次在证据/生成里出现的步号。越晚 = 前置搜索越长
🧠
$\widehat{p}_{\mathrm{prior}}$ · 先验捷径率
证据锚定之前模型就说出答案的轨迹占比
$$ \widehat{\Omega}=\frac1N\sum_{i=1}^{N}|\tau_i|,\quad \overline{T}_{\mathrm{hit}}=\frac1N\sum_{i=1}^{N}T_{\mathrm{hit}}(\tau_i),\quad \widehat{p}_{\mathrm{prior}}=\frac1N\sum_{i=1}^{N}\mathbf{1}\!\left[T_{\mathrm{model}}(\tau_i)\lt T_{\mathrm{tool}}(\tau_i)\right] $$
$T_{\mathrm{hit}}=\min(T_{\mathrm{tool}},T_{\mathrm{model}})$;模型先于工具说出答案 → 计为先验绑定
🔥 关键诊断现象
论文实测:OpenSeeker 的 $\widehat{\Omega}=84.7$(看着很长),但 $\overline{T}_{\mathrm{hit}}$ 只有 9.3、先验率高达 31.9——也就是说答案第 9 步就出来了,后面 75 步都在「事后验证 / 绕路 / 空转」。$\widehat{\Omega}$ 与 $\overline{T}_{\mathrm{hit}}$ 之间的大缺口,正是「假长」数据的指纹。
💡 我的看法
这套「轨迹体检三件套」对我们最有直接价值——它不依赖任何理论量,拿现成的强 Agent 跑 200 条样本就能算。我建议把它做成我们自己 search 数据集的常规体检指标:尤其盯住 Ω - T_hit 这个缺口,缺口大说明你的题「长而不难」,多半在浪费训练算力。这比单看平均轨迹长度靠谱得多。
05 · FORT 合成方法

把捷径分析「反过来」:四阶段逐一堵门

FORT(Framework of Shortcut-Resistant Training-Data Synthesis)把难度框架当成「反向构造问题」:不是让题看起来复杂,而是让便宜识别路径更少、先验绑定更难。它在一个内部「证据图」工作区上操作(节点=真实实体,边=可核验事实),最后才把子图渲染成自然语言问题。

阶段 1
图初始化
选长尾根实体(治先验绑定)+ 预挖环结构种子(治暴露常量)
阶段 2
图构造
多源采集 + 派生事实 + 选「单看普通、合看致命」的通用事实
阶段 3
问题生成
隐去中间实体名、把精确常量模糊成真实范围/类别/间接描述
阶段 4
对抗精修
强 Agent 实跑每道草稿,按轨迹信号修复过易 / 过难
FORT pipeline
论文 Fig.2:FORT 抗捷径合成流水线。① 绿框「图初始化」从 Wikidata 候选里按主题覆盖 / 实体冷门度 / 信息密度过滤根实体,并生成初始环;② 蓝框「图构造」由 enricher(多源采集→派生事实→事实校验)与 expander(弱事实选择→子节点扩展)迭代交互,长出推理图 $\mathcal{G}$;③ 橙框「问题生成」做答案选择+子图剪枝、线索组合、模糊化,产出草稿题;④ 紫框「对抗精修」由对抗 Agent 诊断,分「捷径易解」(修捷径/加强模糊)与「初始无解」(修歧义/收窄模糊)两路,最终输出精修题。

四类风险 → 四组构造控制

捷径风险FORT 的对策作用机理
先验绑定选无英文维基页的长尾根实体;对抗发现先验则换根降低 $U_{\pi_0}(q)$
暴露常量用预挖环种子;生成时隐去中间名、模糊精确常量保住 $\mathrm{dep}(\mathcal{P})$
证据共覆盖多源异构采集(维基/网页/学术/地图)+ 构造派生事实抬高 $M_{\mathrm{ev}}(\mathcal{P})$
单线索选择性优选「单看普通、合看才识别」的通用事实抬高 $s(\{c_i\})$,堵死小子集
# 派生事实的四种构造器(让答案不会在单条证据里逐字出现)
coincidence bridging 巧合桥接
count aggregation 计数聚合
numerical relation 数值关系
meta-fact extraction 元事实抽取 ← 单条网页搜不出,必须综合
💡 我的看法
三个设计我认为最可迁移:(1) 长尾根实体 + 预挖环种子——环结构让你能用「关系」间接指代而不暴露实体名,这是把 $\mathrm{dep}$ 撑起来的巧招;(2) 派生事实——「两个事实的交集 / 计数 / 数值关系」天然抗 keyword 检索,是堵证据共覆盖的好工具;(3) 精确常量模糊化(把日期改成「数字和为 7 的年份」),消融里这一步去掉后难度掉得最狠。对我们的实操启发:合成数据的最后一道工序不该是「质检过滤」,而该是「对抗精修」——拿强 Agent 实跑,按 $T_{\mathrm{hit}}$ 把题校准回「可解但搜得久」的甜区。
06 · 训练 & 主结果

只用 SFT、激活 3B,打平甚至超过百亿级开源 Agent

基座是 Qwen3-30B-A3B-Thinking(推理时仅激活约 3B / 30B,256K 上下文)。只做 SFT,不用 RL:6 epoch、global batch 64、最长序列 262,144、bf16、cosine LR(峰值 $2\times10^{-5}$)。推理用「上下文管理」协议:rollout 内保留工具结果以复用证据;到达轮次上限仍无答案则清空历史、从原题重启

FORT-Searcher 主结果对比
论文 Fig.1:FORT-Searcher(蓝)vs 同尺寸开源(灰)vs >30B 或闭源(浅蓝)在 BrowseComp / BrowseComp-ZH 上的得分。FORT-Searcher 在 BrowseComp 取 72.2(同尺寸最高,超 MiroThinker 67.0),在 BrowseComp-ZH 取 75.0——是表中全部开源 Agent里的最佳中文成绩,且超过了不少 >30B 大模型(如 GLM-5、Step 3.5 Flash)。
BrowseComp · FORT-Searcher(~3B)72.2
BrowseComp · MiroThinker-1.7-mini67.9
BrowseComp · Qwen3.5-35B-A3B61.0
BrowseComp-ZH · FORT-Searcher75.0

同尺寸开源里 综合分 66.2 最高:超 MiroThinker-1.7-mini 1.6 分、超 Qwen3.5-35B-A3B 6.3 分;在 BrowseComp、BrowseComp-ZH、xbench-DeepSearch-2505 上均第一。

🔥 上下文管理的威力(容易被忽视)
消融显示「到顶清空重启」这一个推理 trick 在难基准上收益巨大:BrowseComp +16.3 分(55.9→72.2)、BrowseComp-ZH +12.9 分(62.1→75.0);但在其他基准上仅 +0.7~3.1 分。原因:BrowseComp 类题更易陷入低效搜索路径,重启给了模型换条路探索的机会。
💡 我的看法
对我们最直接的启发是「数据质量 > 训练范式」:FORT 用纯 SFT + 3B 激活就打平百亿级 RL Agent,说明当数据真的逼模型长程搜索时,SFT 就能学到行为,RL 不是必需的入场券。另一条要划重点的是:那 +16 分的「清空重启」是几乎零成本的推理侧改造,值得我们在自家搜索 pipeline 里先复现验证——它和数据质量是正交的两个增益来源。
07 · 消融 & 证据

逐一拆掉抗捷径组件,难度像滑梯一样塌下来

累积消融(在 2K 题上,每行比上一行多去掉一个组件,用同一强 Agent 测准确率,准确率越高 = 题越简单):

配置Acc.(越低越难)$\widehat{\Omega}$$T_{\mathrm{hit}}$$\widehat{p}_{\mathrm{prior}}$
完整 FORT29.0(最难)141.946.511.4
逐步移除组件…↑ 一路变易↓ 提前
全部移除81.6(最易)43.711.822.3

在这个累积顺序里,去掉「模糊化」造成的难度跌幅最大——印证混淆/模糊对提升搜索难度尤其关键。

对抗精修:不只是「加难」,而是双向校准

草稿类型$\widehat{\Omega}$ 精修前→后$\overline{T}_{\mathrm{hit}}$ 前→后$\widehat{p}_{\mathrm{prior}}$ 前→后
捷径易解型33.9 → 82.712.4 → 31.417.0 → 12.0
初始无解型(无解)→ 123.0(无解)→ 50.2

捷径题被「修难」、无解题被「修可解但仍搜得久」——精修把两端都拉回甜区。

数据集横评:FORT 的「真难度」最高

数据集$\widehat{\Omega}$$T_{\mathrm{hit}}$(越晚越好)
REDSearcher(最强开源基线)92.118.7
FORT141.046.9

同一诊断设置下,FORT 不只是轨迹更长,而是答案命中被推到第 46.9 步(REDSearcher 仅第 18.7 步)——证明它延长的是「前置搜索」而非事后空转,且先验率没有因此升高。轨迹级代理指标(低 $R_{\mathrm{low}}$、高 $R_{\mathrm{ev}}$、高 $\widehat{C}_{\mathrm{dep}}$、低 $\widehat{p}_{\mathrm{prior}}$ 等)也全部朝期望方向移动。

💡 我的看法 · 这篇对「微信搜索做 search-agent」的三条落地建议
① 把「轨迹体检」纳入数据准入:任何合成 / 采购的 search 数据,先用强 Agent 跑 200 条算 $\widehat{\Omega}$、$\overline{T}_{\mathrm{hit}}$、$\widehat{p}_{\mathrm{prior}}$,盯死 $\widehat{\Omega}-\overline{T}_{\mathrm{hit}}$ 缺口与先验率,缺口大 / 先验高的数据直接打回。
② 中文场景尤其值得复刻:BrowseComp-ZH 上 75.0 是全开源最佳,说明 FORT 的长尾实体 + 模糊化思路在中文长尾知识上同样成立——而这正是微信搜索的主战场。
③ 先抄两个低成本组件:「精确常量模糊化」(消融里增益最大)和「到顶清空重启」(+16 分、纯推理侧),这两个不依赖重训,可以最快验证收益。