论文链接:arxiv.org/abs/2608.06057 HTML 全文:arxiv.org/html/2608.06057v1 发表时间:2026 年 8 月 机构:未明确披露(作者 Xiaoqing Wu, Xingyu Fan, Feifei Li, Wenhao Que) 领域标签:cs.AI(人工智能)、Tool-Use Agent、Policy Distillation、Context Robustness
一、论文背景
1.1 什么是工具调用型 Agent?
近两年的大语言模型不再只是"聊天机器",而是逐渐变成能够动手做事的"代理"(Agent)。其中最核心的能力叫做工具使用(Tool Use)/ 函数调用(Function Calling):模型不再只输出文字回答,而是能输出一条结构化的"工具调用指令",例如 call(update_reservation, {id: "KKKYCG", payment_id: "abc"}),由外部程序去真正执行这条 API,然后把执行结果再喂回模型,模型据此决定下一步。
让这一切运转起来的,是 2022 年 Yao 等人提出的 ReAct(Reasoning and Acting)范式。ReAct 让模型在"思考(Thought)“与"行动(Action,即工具调用)“之间交替循环:模型先推理"我需要查这个订单的状态”,然后发起一次工具调用,拿到"观察(Observation)",再推理下一步,直到任务完成。这种"推理—行动—观察"的多轮循环,让 LLM 从被动的问答系统变成了能自主完成任务的 Agent。
1.2 多轮历史:Agent 的"记忆"从哪里来?
随着交互变长,模型看到的不再是一个干净的初始 prompt,而是一段不断累积的交互记录(Multi-Turn History):
- 用户会修改之前的请求(“哦不,我要改的不是这单”)
- 工具会返回部分或失败的结果(API 报错、参数不对、权限不够)
- 早期的对话轮次会留下标识符、参数值、状态声明(某个订单号、某个城市名、某次"已完成"的声明)
关键问题来了:这些历史信息在"结构上"和"语义上"可能依然合理,但它们对当前动作的"权威性"已经过期了。
举个例子:航司助手在历史里看到一条"用 paymentId(驼峰命名)调用支付接口失败"的记录。这条记录结构上完全合法,语义上也讲得通(确实有过这么一次失败调用)。但是——当前真正的 schema 要求的是 payment_id(蛇形命名),而且这次失败并没有改变订单状态。一个稳健的模型应当遵从当前的 schema 发出 payment_id,而不是去模仿历史里那个错误的命名。
类似的"过期但合理"的历史还有很多:涉及到另一个实体的轨迹(不是用户现在问的这个订单)、不成立的完成声明(历史里声称"已退款"但其实没退)、已下线的旧工具(历史里调过 old_api,但现在工具集里已经没有了)。
1.3 现有基准为什么回答不了这个问题?
作者梳理了已有的工具使用基准,发现它们各有侧重,但都没有隔离“误导性历史是否会让一个本来会做对的模型做错"这一具体问题:
| 已有工作 | 关注的问题 | 与本论文的区别 |
|---|---|---|
| BFCL v1/v2/v3/v4、APIGen、APIBench | 函数选择与参数生成的正确性 | 多为单轮或固定多轮,不显式干预"历史权威性” |
| τ-bench、ToolSandbox、MMAU | 有状态多轮交互 | 不专门构造"合理但非权威"的对照历史 |
| ReflecTool-Bench | 模型能否修复先前的工具调用错误 | 关注"修错”,而非"历史污染是否翻转了本来正确的策略" |
| InjecAgent、AgentDojo | 工具内容中的恶意指令注入 | 关注安全攻击,而非"结构合法但非权威"的自然历史 |
| Rabinovich & Anaby Tavor 2025 | 自然查询变化、工具集变化 | 改变的是查询和工具集,本论文则保持它们不变 |
换句话说:已有基准无法区分两种模型——一种是"根本没有这个能力",另一种是"有能力、在可靠上下文下做对了,但被误导的历史带偏了"。前者是能力问题,后者是可靠性问题。这两类错误在聚合指标上是看不出来的,因为它们都表现为"做错了"。
1.4 为什么这是一个真正重要的问题?
在真实部署中,Agent 几乎从不在"干净的 prompt"上工作。它总是在一条不断累积的交互记录上工作,其中充满用户改主意、工具失败、遗留的标识符和过期的状态声明。如果模型无法判断哪一段历史仍然对当前请求具有权威性,那么它就会在关键时刻被历史惯性带偏——即使它本身已经掌握了正确的策略。
这就引出了本论文要回答的核心问题:
当历史在说谎时,模型是否还能忠于它本该执行的策略?
二、论文定位和关联工作
本论文处在两条研究脉络的交汇处:工具使用评估与鲁棒性 和 上下文与策略蒸馏。
2.1 谱系一:工具使用评估与鲁棒性
前序工作:
- ReAct(Yao et al. 2023)、Toolformer(Schick et al. 2023)、Gorilla(Patil et al. 2024):奠定了工具调用型 LLM 的基础范式——让模型"学会"在推理中穿插工具调用,并在大规模 API 集合上做选择。
- APIGen(Qin et al. 2024)、APIGen-MT(Prabhakar et al. 2026):提供了可验证的多轮工具调用训练数据与基准。本论文的 ContextPollute-Bench 正是构建在 APIGen-MT 的航司(airline)和零售(retail)领域轨迹之上。
- τ-bench、ToolSandbox、When2Call、BFCL v3/v4:覆盖了有状态交互、何时调用(when-to-call)等维度。
鲁棒性子线:
- Rabinovich & Anaby Tavor 2025:研究自然查询变化和可用工具集变化下的鲁棒性。
- ReflecTool-Bench(Liu et al. 2026):评估模型能否检测并修复多轮对话中先前的工具调用错误。
- InjecAgent(Zhan et al. 2024)、AgentDojo(Debenedetti et al. 2024):研究工具内容中的恶意指令注入。
本论文的关键区别:ContextPollute-Bench 保持当前请求、可用工具、gold action 三者完全不变,只对"非权威历史"做干预。这是对上述所有工作的正交补充——它隔离的是"策略保留(policy preservation)",而非任务变化、错误修复或指令注入。
2.2 谱系二:上下文与策略蒸馏
前序工作:
- 多轮呈现效应(Laban et al. 2026; Chen et al. 2026):即使任务信息不变,多轮的不同呈现方式也会改变模型行为。
- 经典知识蒸馏(Hinton et al. 2015; Kim & Rush 2016):序列级 / token 级蒸馏迁移教师的分布或解码输出。
- 反向 KL 与在策略蒸馏(Gu et al. 2024 MiniLLM; Agarwal et al. 2024 GKD; Thinking Machines Lab 2025):在学生自己采样的状态上用教师做监督,缓解 exposure bias(训练看的是教师的轨迹,部署看的是自己的轨迹)。反向 KL 是 mode-seeking 的——鼓励学生集中在教师的高概率模式上,而不是摊薄到所有可能模式。
- 特权信息学习与上下文蒸馏(Vapnik & Vashist 2009; Lopez-Paz et al. 2016; Snell et al. 2022; Ye et al. 2026; Penaloza et al. 2026):训练时可访问某些特权信息(部署时不可用),把这些特权信息"蒸馏"进学生的权重里。
本论文的专门化:Oracle-OPD 把上述原则专门化到"可靠性不对称的工具使用“场景——教师条件化在"可靠的 Oracle State"上(这是它的特权信息),学生在"可能误导的污染历史"上生成自己的 prefix,教师在同样的 prefix 上提供软监督;部署时只需要学生和普通历史,教师和 Oracle 都被移除。
2.3 本论文在研究脉络中的定位
| 维度 | 之前的路线 | 本论文的突破 |
|---|---|---|
| 评估对象 | 任务正确性 / 错误修复 / 安全攻击 | 历史权威性下的策略保留 |
| 干预变量 | 改查询、改工具集、注入恶意指令 | 只干预历史,请求/工具/gold 完全不变 |
| 诊断方式 | 聚合准确率 | 三视图同步对照(Original/Polluted/Oracle) |
| 解决思路 | 提示工程 / SFT / 序列蒸馏 | Oracle 条件教师 + 反向 KL 在策略蒸馏 |
| 部署要求 | 需要提示模板 / 需要教师 | 仅需学生权重 + 普通历史 |
定位结论:本论文首次把"历史可靠性"作为一个独立可测量、可训练的工具使用瓶颈分离出来,并给出了一个不需要部署时特权的可扩展解法。
三、问题定义
3.1 从具体场景到抽象问题
具体场景:一个航司助手在历史里看到了一条用错误参数名 paymentId 调用支付接口失败的记录。当前的请求是更新订单 KKKYCG,正确的 gold action 是用 payment_id 调用 update_reservation。这条失败历史在结构上合法、语义上合理,但它对当前动作没有权威性——它没有改变订单状态,正确的下一步动作在有它和没它的情况下完全相同。然而模型可能会去模仿历史里的错误命名。
核心洞察:问题的本质不是"模型不会做”,也不是"任务变了",而是——当一段历史在结构上合法、语义上合理、但对当前动作不再具有权威性时,模型能否识别并保留它本已掌握的正确策略?
3.2 类比:把问题映射到一个熟悉的框架
可以把这件事类比成"策略保持(policy preservation)下的对抗性上下文扰动"——类似于经典鲁棒性研究中"输入扰动下分类决策是否保持",但这里被扰动的是 Agent 的上下文历史,要保持的是它的多轮策略:
| 经典鲁棒性 | 本论文的形式化 |
|---|---|
| 输入 $x$ | 当前请求 $u_t$ + 系统 prompt + 可用工具 $\mathcal{T}$ |
| 扰动 $\delta$ | 在历史中插入一段"结构合法但非权威"的轨迹 |
| 分类器 $f$ | 模型策略 $\pi$(输出 Call 或 Answer) |
| 决策是否翻转 | gold action 不变的前提下,预测是否从对翻成错 |
3.3 形式化的问题定义
给定系统策略 $p$、可用工具集 $\mathcal{T}$、历史 $h_t$、最新请求 $u_t$,模型在每个决策点预测:
$$a_t \in \left\{ \text{ANSWER}(y), \text{CALL}(f, \mathbf{z}) \right\} \quad (1)$$- Call 决策正确当且仅当调用了 gold 工具且参数对象完全正确。
- Answer 决策应澄清缺失信息、基于已验证证据回答,或识别当前工具无法完成请求。
本论文为每个决策点构造一个同步三元组:
$$\mathcal{D}_i = (x_i^{\text{orig}}, x_i^{\text{poll}}, x_i^{\text{oracle}}, a_i^\star) \quad (2)$$三个视图共享相同的系统策略、工具集、最新请求和 gold action,唯一不同的是历史前缀。它们满足关键的 gold-preservation 约束:
$$a^\star(x_i^{\text{orig}}) = a^\star(x_i^{\text{poll}}) = a^\star(x_i^{\text{oracle}}) \quad (3)$$- Original:未经修改的原始源轨迹前缀。
- Polluted:在不变的请求前,插入一段结构合法但非权威的轨迹。
- Oracle State:只包含可靠的、与决策相关的意图、槽位、观察、策略和证据状态(不暴露 gold 工具名)。
要研究的问题:在 gold action 完全相同的前提下,Polluted 视图相对 Original / Oracle 视图,会翻转多少比例的正确决策? 以及,能否训练出一个学生策略,使它在 Polluted 视图下仍能保留 Oracle 视图所诱导的正确策略?
3.4 这个抽象的精妙之处
这个三视图同步设计有一个极深的妙处:它把"能力缺失"和"可靠性失败"彻底分开了。
- 如果一个模型在 Original 上做错、在 Oracle State 上也做错,说明它没有这个能力。
- 如果一个模型在 Oracle State 上做对、在 Original 上做对、但在 Polluted 上做错,说明它有能力但不可靠——历史污染劫持了它本已掌握的策略。
这种"对照实验"式的诊断,是过去任何聚合指标都做不到的。
四、问题解法
论文的解法分两部分:先测量(ContextPollute-Bench),再修复(Oracle-OPD)。
4.1 ContextPollute-Bench:测量历史污染的影响
4.1.1 三视图的构造
从 APIGen-MT 的航司和零售领域轨迹出发,对每个决策点构造三个同步视图(详见 3.3 节)。一个 benchmark 项就是一个四元组 $\mathcal{D}_i$。
如何确定 gold action?
- Call 决策:保留下一条源消息是"对一个可用工具的有效调用"的决策点,该调用直接给出 gold 工具和 gold 参数。
- Answer 决策:保留用户轮之后紧跟"实质性非工具回答"的决策点,覆盖三种情况:Clarify(澄清)、Answer-from-Evidence(基于证据回答)、Unsupported(识别当前工具无法完成)。
4.1.2 污染轨迹与 Oracle State 的生成
由 DeepSeek-V4-Flash 生成被插入的污染轨迹和 Oracle State,但不生成源 gold call/answer——这条红线保证了 gold action 来自 APIGen-MT 原始轨迹,而非合成。
4.1.3 十一类干扰算子(核心创新之一)
论文设计了 11 个 gold-preserving 干预算子,覆盖三个维度。这张表是理解整个 benchmark 的关键:
| 维度 | 算子 | 说明 |
|---|---|---|
| Decision State(决策状态) | 不受支持的完成声明 | 声称"已完成 X",但实际未完成 |
| 决策无关读取 | 调用一个与当前决策无关的工具读取信息 | |
| 已废弃的历史工具 | 调用一个当前工具集里已不存在的旧工具 | |
| Entity Binding(实体绑定) | 同一工具不同目标 | 用同一工具调用了另一个实体(另一个订单号) |
| 交替竞争实体 | 历史中交错出现多个相互竞争的实体标识符 | |
| Interface Execution(接口执行) | 错误参数名 + 拒绝 | 用了错误参数名,被接口拒绝 |
| 遗留参数 + 表面成功 | 用了旧的/遗留的参数名,但接口表面返回成功 | |
| 缺失必需参数 | 缺少某个必需参数 | |
| 多余参数 | 多了一个不该有的参数 | |
| 格式漂移 | 参数值格式变了(如日期格式、命名风格驼峰↔蛇形) | |
| 单位 / 尺度漂移 | 数值的单位或尺度被换了(如美元↔美分) |
关键属性:所有 11 个算子都经过确定性验证器校验,保证它们不改变源消息顺序、保持最新请求在最后、给工具调用配上结果、真正实例化了预期的干扰、并且 gold action 不变。Oracle State 若泄露了 gold 工具名或遗漏了决策关键状态,就会被拒绝。
4.1.4 数据划分与质量审计
| Split | Total | Call | Answer | Gold tools |
|---|---|---|---|---|
| Train | 9,901 | 5,828 | 4,073 | 14 |
| Validation | 1,121 | 846 | 275 | 13 |
| Test-Indist | 2,375 | 1,651 | 724 | 13 |
| OOD-600 | 600 | 600 | 0 | 6(训练时未见作为 gold) |
轨迹级划分:来自同一源轨迹的所有例子留在同一个 split,杜绝训练/验证/测试之间的泄漏。OOD-600 专门用 6 个训练时从未作为 gold 出现的工具,测真正的泛化。
质量审计(两层):
- 200 例精细人工审计:97.0% gold 正确率、99.0% Oracle 充分性、98.0% 标注一致;100 例 Call 审计中零例 gold 工具名字面泄漏。
- 1000 例分层交叉审计:人工联合接受率 93.7%,Claude-Opus-4.7 接受率 91.6%,二者在联合 pass/fail 上一致率 92.5%。
4.1.5 评估指标体系
设 $d^\star$ 与 $\hat{d}$ 为 gold 与预测的决策类型,$(f^\star, \mathbf{z}^\star)$ 与 $(\hat{f}, \hat{\mathbf{z}})$ 为 gold 与预测的工具调用:
$$\text{TCR} = P(\hat{d}=\text{CALL}, \hat{f}=f^\star, \hat{\mathbf{z}}=\mathbf{z}^\star \mid d^\star=\text{CALL}) \quad (4)$$$$\text{OCR} = P(\hat{d}=\text{CALL} \mid d^\star=\text{ANSWER}) \quad (5)$$$$\boxed{\text{BTA} = \tfrac{1}{2}\text{TCR} + \tfrac{1}{2}(1-\text{OCR})} \quad (6)$$- TCR(True Call Rate,真正调用率):在应该调用时,完整调用了正确的工具 + 完整正确的参数。这是"该出手时就出手"的能力。
- OCR(Over-Call Rate,过度调用率):在不该调用(应回答)时却发起了调用。这是"不该出手乱出手"的失败。
- BTA(Balanced Tool-Use Accuracy,平衡工具使用准确率):把"该调用时调用对"和"不该调用时不调用"做算术平均,是本论文最核心的主指标。
另外还有 Decision Accuracy、Tool Accuracy(在 gold Call 上的工具选择准确率)、ArgExact|Tool(在工具选对条件下的参数完全匹配率),且满足 $\text{TCR} = \text{ToolAcc} \times \text{ArgExact}$。
设计哲学:BTA 之所以是主指标,是因为它同时惩罚两种极端失败模式——一种是"永远不调用"(高 OCR 抑制却低 TCR),另一种是"什么都调用"(高 TCR 却高 OCR)。一个健康的工具使用策略必须在两者之间取得平衡,BTA 正是这种平衡的度量。
4.2 Oracle-OPD:可靠状态策略迁移
诊断完问题后,作者提出了 Oracle-Guided On-Policy Distillation(Oracle-OPD),它由三个组件共同驱动。
4.2.1 三个设计组件
| 组件 | 类比 | 本论文做法 |
|---|---|---|
| Reliable-State Conditioning(可靠状态条件化) | 教师在一个"安静无干扰的房间"里做决策 | 教师条件化在 Oracle State 上,代表由权威任务证据诱导的策略,而非由竞争性历史轨迹诱导的策略 |
| Distributional Policy Transfer(分布式策略迁移) | 不是只告诉学生"标准答案是 B",而是告诉学生"A 是 0.7、B 是 0.2、C 是 0.1" | Token 级软目标保留教师在"回答 vs 调用、选哪个工具、生成什么参数"上的相对偏好,这些信息在单一硬目标序列里会丢失 |
| Student-State Coverage(学生状态覆盖) | 教练不是在场边喊标准动作,而是上场陪练学生实际走到的每一个位置 | 教师在学生自己生成的 prefix 上做评估,而非在固定的 gold/教师 prefix 上,保证训练时的状态分布与部署时一致 |
4.2.2 训练目标
设 $\pi_\theta$ 为学生、$\pi_T$ 为冻结教师。给定成对的 Polluted 与 Oracle 输入 $(x_p, x_o)$:
- 学生先在污染历史上采样生成一个 prefix:
- 对学生生成的每个 prefix $y_{
实现细节:
- 反向 KL 在教师与学生 top-16 token 支持的并集上计算(遵循 Gu et al. 2024 的反向 KL 语言模型蒸馏实践)。
- 温度 1,每个 prompt 4 次学生 rollout。
- 不附加额外的 gold-CE 目标。
- 部署时:只需要训练好的学生 + 普通交互历史;教师与 Oracle State 都被移除。
4.2.3 为什么是反向 KL + 在策略?
这两个选择不是随意的,而是各自对应一个根本问题:
- 为什么反向 KL 而不是前向 KL? 前向 KL(等价于在教师序列上做 SFT)是 mean-seeking 的,会强迫学生覆盖教师所有可能的模式,包括很多低概率的边缘 token,导致长文本生成时分布过于平滑、容易漂移。反向 KL 是 mode-seeking 的,鼓励学生集中在教师高概率的模式上,这正是工具使用这种"需要明确决策"的场景想要的——你要的是"清楚地选一个工具并填对参数",而不是"在多个工具间摊薄概率"。
- 为什么在策略(学生自己采样 prefix)? 因为训练时如果只看教师生成的 prefix,部署时学生看到的却是自己生成的、可能因为污染历史而走偏的 prefix——这就是经典的 exposure bias(训练分布与部署分布不一致)。让学生自己采样 prefix,教师在这些"学生真正会到达的状态"上做评估,才能把"纠偏信号"精确地送到学生真正会犯错的位置。
4.2.4 方法全景对比
| 方法 | 教师视图 | 监督形式 | 前缀来源 | 部署需要 |
|---|---|---|---|---|
| Gold-SFT | — | 硬 gold 序列 | gold | 学生 |
| Oracle-SeqKD | Oracle | 硬解码序列 | 教师 | 学生 |
| Off-policy OD | Oracle | 软 token 分布 | gold | 学生 |
| Oracle-OPD | Oracle | 软 token 分布 | 学生自己采样 | 学生(教师与 Oracle 移除) |
五、评估指标与实验证据
5.1 实验设置
- 训练模型:Qwen3-1.7B(主)、Qwen3-8B。
- 训练配置:3 个 epoch,全参数 FSDP,8 张 H20 GPU,贪心解码,按验证集 BTA 选 checkpoint。
- Oracle-OPD 超参:学习率 $10^{-6}$,全局批大小 32 prompts,每 prompt 4 次 rollout,prompt/response 限制 12,288/1,024 tokens。
- 交叉生成器评估:用 Claude-Opus-4.7 独立再生评估上下文,所有 checkpoint 保持固定,不用 Claude 生成的例子做训练/适配/模型选择。
5.2 诊断实验:历史诱导的策略劫持有多严重?
Table 2:三视图 BTA 对照(Test-Indist)
| 模型 | P(污染) | O(原始) | R(Oracle) |
|---|---|---|---|
| Qwen3-1.7B | 0.4720 | 0.6713 | 0.7450 |
| Qwen3-8B | 0.6888 | 0.8416 | 0.8910 |
| Qwen3-32B | 0.6587 | 0.7170 | 0.8773 |
| DeepSeek-V4-Flash | 0.5691 | 0.5829 | 0.6613 |
翻转率分析(Qwen3-1.7B):
- 从 Original → Polluted:总体 32.1%,Call 类 29.4%,Answer 类 40.5%。
- 从 Oracle → Polluted:总体 40.8%,Call 类 37.5%,Answer 类 50.8%。
损坏字面量采纳率(证明污染是直接原因):
| 干扰类型 | M₀(未微调)在污染下采纳 | Oracle-OPD 后采纳 |
|---|---|---|
| 格式漂移 | 65.8% | 显著降低 |
| 同工具不同目标 | 34.8% | 1.0% |
| 交替竞争实体 | 20.9% | 0.4% |
结论:32.1% 这个数字本身就是论文最强的论据——接近三分之一的、本来正确的决策,仅仅因为多看了一段结构合法但非权威的历史,就被翻转成了错误。这不是"模型能力不行",而是"模型有能力但被历史带偏了"。格式漂移的 65.8% 采纳率尤其触目惊心:只要历史里出现过一次蛇形↔驼峰的命名变化,模型就会大量跟随那个错误的命名风格。
5.3 主实验:Oracle-OPD 学到了最强的平衡策略
Table 3:Qwen3-1.7B 在 ContextPollute-Bench 上的后训练对比
| 方法 | Test-Indist BTA ↑ | TCR ↑ | 1-OCR ↑ | Decision Acc. ↑ | Tool Acc. ↑ | ArgExact|Tool ↑ | OOD-600 TCR ↑ |
|---|---|---|---|---|---|---|---|
| M₀(Polluted 基线) | 0.4720 | 0.5807 | 0.3633 | 0.7938 | 0.8993 | 0.6457 | 0.6233 |
| Gold-SFT | 0.6628 | 0.3422 | 0.9834 | 0.6838 | 0.5370 | 0.6373 | 0.2467 |
| Sampled-SFT (2:1) | 0.6620 | 0.3392 | 0.9848 | 0.6728 | 0.5237 | 0.6477 | 0.2400 |
| SeqNorm-SFT | 0.5983 | 0.1966 | 1.0000 | 0.4760 | 0.2458 | 0.8000 | 0.1000 |
| SFT→DPO | 0.6350 | 0.2700 | 1.0000 | 0.5384 | 0.3343 | 0.8076 | 0.1300 |
| Oracle-SeqKD | 0.8229 | 0.7688 | 0.8771 | 0.9410 | 0.9066 | 0.8481 | 0.7133 |
| Off-policy OD | 0.8499 | 0.9041 | 0.7956 | 0.9376 | 0.9642 | 0.9377 | 0.7433 |
| Oracle-OPD | 0.8703 | 0.9132 | 0.8273 | 0.9473 | 0.9824 | 0.9296 | 0.7433 |
关键证据:
- 渐进改进:Oracle-SeqKD(0.8229)→ Off-policy OD(0.8499)→ Oracle-OPD(0.8703)。
- 统计显著性:相对 Off-policy OD 提升 +0.0204 BTA,95% CI [+0.0118, +0.0295],p < 10⁻⁴。
- SFT 家族的根本缺陷:Gold-SFT 及其变体虽然"非调用召回率"接近完美(0.98+),但"完整调用召回率"极低(0.34)——它们学会了停止边界,却丧失了执行召回。这是一个被 BTA 揭露、被单看 TCR 或 OCR 会掩盖的关键失败模式。
5.4 平衡策略的三个模式(Figure 3 解读)
| 策略模式 | TCR | 非调用召回率 (1-OCR) | 特点 |
|---|---|---|---|
| 仅 Call 训练的 Gold-SFT | 0.8762 | 0.2942 | 高执行召回,但无法学会何时停止 |
| 混合 Gold-SFT | 0.3422 | 0.9834 | 学会了停止边界,但执行召回极低 |
| 混合 Oracle-OPD | 0.9132 | 0.8273 | 兼顾高执行召回与选择性控制 |
这个"工具使用策略平面"图(横轴 TCR、纵轴 1-OCR)是本文最直观的证据:BTA 等值线是反对角线,所有 SFT 变体都挤在"高抑制—低召回"的角落,而 Oracle-OPD 把策略推向了右上角——既该出手时出手(TCR=0.91),又该收手时收手(1-OCR=0.83)。
5.5 鲁棒性迁移到干净历史
一个合理的担忧是:“Oracle-OPD 会不会只是学到了修正特定污染模式,反而对干净历史过敏?“作者冻结 checkpoint,在 Original 视图上重新评估:
| 模型 | 方法 | Polluted BTA ↑ | Original BTA ↑ |
|---|---|---|---|
| 1.7B | Off-policy OD | 0.8499 | 0.8205 |
| 1.7B | Oracle-OPD | 0.8703 | 0.8450 |
| 8B | Oracle-OPD(Oracle-SFT 教师) | 0.9301 | 0.9260 |
结论:可靠状态蒸馏学到的是通用的策略保留能力,而不是针对特定污染模板的修正规则——它在干净历史上同样有效(0.8450 vs 污染下的 0.8703,几乎无损)。
5.6 跨干扰算子的鲁棒性
Table 5(Call 侧 8 个算子的 TCR %):
| 算子 | M₀ | Gold-SFT | Off-OD | Oracle-OPD |
|---|---|---|---|---|
| 同工具不同目标 | 50.7 | 32.6 | 90.3 | 91.6 |
| 交替竞争实体 | 53.4 | 28.5 | 89.2 | 91.6 |
| 错误参数名+错误 | 73.5 | 42.8 | 91.6 | 89.3 |
| 缺失必需参数 | 62.9 | 41.2 | 91.2 | 91.2 |
| 多余参数 | 68.9 | 34.2 | 91.4 | 92.3 |
| 遗留参数+表面成功 | 60.7 | 32.9 | 90.9 | 91.8 |
| 格式漂移 | 40.0 | 35.8 | 93.3 | 93.3 |
| 单位/尺度漂移 | 44.5 | 24.4 | 84.0 | 89.1 |
| 算子宏平均 | 56.8 | 34.1 | 90.3 | 91.3 |
结论:Oracle-OPD 在 8 个算子中的 7 个上达到最佳或并列最佳。最大提升出现在单位/尺度漂移(+5.1pp)和两个实体绑定干扰上——这些恰恰是"语义合理但目标错误"的难点。
交叉生成器迁移:在不重新训练的情况下,仅把污染轨迹换成 Claude-Opus-4.7 独立再生成的版本,Oracle-OPD 仍是最强的 1.7B 后训练模型(0.814 BTA,Off-OD 0.792,Oracle-SeqKD 0.761)。这证明改进不依赖于单一污染生成器的风格。
5.7 驱动可靠状态策略迁移的三大因子(消融)
Table 6(因子化消融):
| 方法 | 教师视图 | 目标类型 | 前缀来源 | BTA ↑ |
|---|---|---|---|---|
| Original-OPD | Original | Soft | Student | 0.7562 |
| Oracle-SeqKD | Oracle | Hard | Teacher | 0.8229 |
| Off-policy OD | Oracle | Soft | Gold | 0.8499 |
| Teacher-prefix OD | Oracle | Soft | Teacher | 0.8479 |
| Curriculum OPD | Oracle | Soft | T→S | 0.7923 |
| Oracle-OPD | Oracle | Soft | Student | 0.8703 |
因子贡献分解:
- 因子 1(Oracle vs Original 教师视图):固定软目标 + 学生前缀,把教师视图从 Original 换成 Oracle → +11.41 pp(0.7562 → 0.8703)。这是最大的单一因子,说明"教师在可靠状态下诱导的策略"才是要迁移的真正对象。
- 因子 2(软目标 vs 硬序列):固定 Oracle 视图,软 token 分布 vs 硬解码序列 → +2.70 pp(0.8229 → 0.8499 的差距,以及 0.8479 vs 0.8229 的对比)。软目标保留了教师关于"回答/调用、工具选择、参数生成"的相对偏好。
- 因子 3(学生前缀 vs 教师前缀):固定 Oracle 视图 + 软目标,学生自己采样 vs 教师/gold 前缀 → +2.24 pp(0.8703 vs 0.8479/0.8499)。学生前缀覆盖了部署时学生真正会到达的状态。
结论:三个因子任何一个单独都不够——Original-OPD 只有 0.7562,Off-policy OD(少学生前缀)只有 0.8499,Teacher-prefix OD(少学生前缀)只有 0.8479。三者合在一起才达到 0.8703。
5.8 扩展教师与学生容量
Table 7(两个互补扩展轴):
| 学生 | 训练方法/教师 | Test-Indist BTA ↑ | OOD TCR ↑ |
|---|---|---|---|
| 1.7B | Gold-SFT | 0.6628 | 0.2467 |
| 1.7B | Oracle-OPD,1.7B 教师 | 0.8703 | 0.7433 |
| 1.7B | Oracle-OPD,8B 教师 | 0.9193 | 0.7500 |
| 8B | Gold-SFT | 0.9221 | 0.7967 |
| 8B | Oracle-OPD,8B base 教师 | 0.9077 | 0.8200 |
| 8B | Oracle-OPD,Oracle-SFT 教师 | 0.9301 | 0.8217 |
结论:8B 教师把同一个 1.7B 学生从 0.8703 提到 0.9193,且不增加任何推理成本(部署仍是 1.7B)。这证明"可靠 Oracle 视图下的策略知识"可以跨模型尺寸迁移。更强的教师和更有能力的学生都能从可靠状态蒸馏中获益。
5.9 外部能力、调用控制与噪声鲁棒性迁移
Table 8(外部基准):
| 方法 | BFCL ↑ | W2C ↑ | Halluc. ↓ |
|---|---|---|---|
| M₀ | 79.58 | 0.2701 | 0.5000 |
| Gold-SFT | 55.55 | 0.2995 | 0.4767 |
| Off-policy OD | 79.19 | 0.2842 | 0.4535 |
| Oracle-OPD | 79.77 | 0.3003 | 0.3915 |
| Oracle-OPD,8B 教师 | 80.45 | 0.3294 | 0.3411 |
三大迁移验证:
- 广泛函数调用能力保持:8B 教师蒸馏的 1.7B 学生在 BFCL v4 Non-Live 上达 80.45(甚至略高于未微调的 79.58),证明可靠状态特化没有以牺牲通用函数调用能力为代价。
- 调用控制跨基准迁移:When2Call Macro-F1 从 0.2701 提到 0.3294;支持工具幻觉率从 0.5000 降到 0.3411——这些改进发生在完全没有受控历史干扰的外部基准上。
- 噪声鲁棒性迁移到工具使用之外:在 HotpotQA-Distractor 验证集(7,405 例)上零样本评估,8B 教师蒸馏的 1.7B 学生在噪声上下文下达 0.5015 F1,比次优训练 checkpoint 高 2.97 F1 点,且 clean-to-noisy F1 差距是所有训练 1.7B 模型中最小的(0.1596)。
Prompt-only 对照组:直接用 prompt 指示模型"忽略失败或无关历史”,BTA 只从 0.4720 提到 0.4849(+0.013);Oracle-OPD 达 0.8703(+0.398)。这说明问题不是"提醒一下就行”——模型需要学会区分哪段历史仍然具有权威性,这是一个需要训练而非提示的能力。
六、效果优势的根源解释
为什么 Oracle-OPD 能在 BTA 上系统性超越所有 baseline?要从机制因果链上解释,而不是停留在"它用了 X 所以好"。
6.1 baseline 的根本局限在哪里?
Gold-SFT 家族的根本缺陷:训练分布与部署分布的结构性错配。 Gold-SFT 在源 gold 动作上做 SFT,本质上是前向 KL:让学生覆盖教师(这里是 gold)的模式。但工具使用是一个高度类别不平衡的任务——训练数据里 Call 与 Answer 的比例、不同工具的比例都严重不均。SFT 家族试图用重采样(Sampled-SFT 2:1)、序列归一化(SeqNorm-SFT)来补救,但这些都是在改变训练数据分布,而没有改变"学生看到的 prefix 来自 gold 而非自己"这一根本错配。结果就是:它们学到了"高非调用召回"(因为 Answer 例子被放大),却丧失了"完整调用召回"(因为 Call 的执行没被在学生真实状态下纠正)。这不是"没做 X",而是"前向 KL + 离策略 prefix 这个组合结构上无法同时优化两端"。
Oracle-SeqKD 的局限:硬序列丢失了相对偏好。
序列级蒸馏只迁移教师解码出的"一个"序列,丢掉了教师在每个 token 位置上的完整分布。工具使用的关键决策点(调用还是回答?选哪个工具?填什么参数?)恰恰需要的是相对偏好信息——“调用比回答更可能、工具 A 比工具 B 更可能、参数 payment_id 比 paymentId 更可能”。这些相对偏好一旦塌缩成硬序列,就只剩"标准答案",学生无法学到"为什么是这个答案而不是那个"。
Off-policy OD 的局限:训练状态与部署状态不匹配。 Off-policy OD 虽然用了软 token 分布,但它的前缀来自 gold(或教师),而不是学生自己在污染历史下会到达的状态。部署时,学生在污染历史下会生成一个"被污染影响过的 prefix",而这个 prefix 在 Off-policy OD 训练中从未出现过——教师从未在这个被带偏的状态上给过纠偏信号。这就是经典的 exposure bias:训练看的是干净世界的轨迹,部署看的是污染世界的轨迹。
6.2 Oracle-OPD 的根本性改变
Oracle-OPD 的三个组件各自针对上述一个根本局限,组合起来改变了信息流与约束:
改变 1:Oracle 视图把"可靠策略"作为迁移目标(+11.41 pp)。 把教师条件从 Original 换成 Oracle State,根本上是改变了"要迁移什么策略"这个问题的答案。Original 视图下的教师本身也会受到历史污染的影响——它在 Original 上诱导的策略已经不是"理想策略",而是"被原始历史稍微带偏的策略"。Oracle State 只包含可靠的、决策相关的状态,教师在它上面诱导的策略才是"没有历史污染的理想策略"。这一步把迁移目标从"一个被污染的策略"换成了"理想的可靠策略",是整个方法最大的单一增益来源。
改变 2:软 token 分布保留了相对偏好(+2.70 pp)。 软目标在每个 token 位置传递的不是"标准答案",而是"教师在 answer/call/tool/arg 上的完整偏好分布"。对于工具使用这种"在多个合理选项间做明确选择"的任务,相对偏好正是关键信息。硬序列蒸馏相当于把教师的知识有损压缩成一个序列,而软目标保留了完整的相对结构。
改变 3:学生前缀把纠偏信号精确送到学生真正会犯错的位置(+2.24 pp)。 这是"在策略"的核心价值。学生在污染历史下会到达一些"被带偏的状态"——比如它已经生成了一个模仿历史错误命名的 token,下一步它在这个错误基础上继续生成。教师在这个学生真实到达的错误状态上给软监督,相当于在"学生真正会跌倒的那个台阶"上贴了纠偏标签。Off-policy OD 的监督贴在 gold/教师 prefix 上,那些是干净世界的台阶,学生跌倒的污染台阶上没有标签。
6.3 因果链总结
把三个改变串起来:
Oracle 视图(定义了"什么是可靠策略")→ 软目标(保留了可靠策略的完整相对偏好)→ 学生前缀(把这些偏好精确地迁移到学生真实到达的状态)→ 学生在污染历史下也能保留可靠策略 → BTA 从 0.4720 提升到 0.8703,再到 0.9193。
6.4 反事实推理
如果去掉任何一个组件会怎样?消融实验已经给出了答案:
- 去掉 Oracle 视图(用 Original-OPD):BTA 从 0.8703 掉到 0.7562(-11.41 pp)。
- 去掉软目标(用 Oracle-SeqKD 硬序列):BTA 掉到 0.8229(-4.74 pp)。
- 去掉学生前缀(用 Teacher-prefix OD 或 Off-policy OD):BTA 掉到 0.8479 / 0.8499(-2.04 到 -2.24 pp)。
每一个组件的缺失都会导致可测量的退化,且 Oracle 视图的缺失退化最严重——这反证了三个设计的必要性,也定位了可靠状态条件化是整个方法最关键的支柱。
七、必要知识反推
假设找一个完全没有相关知识的人去做这项工作,他最少必须掌握哪些知识?
7.1 领域知识层:工具使用 Agent 的实际运作机制
必须知道:
- 工具调用型 Agent 如何在多轮历史中决策——不理解"模型在每个决策点看到的是累积历史 + 当前请求 + 可用工具"这个输入结构,就无法意识到"历史"是一个独立的、可干预的变量。
- 为什么历史会过期但仍然合法——不理解 API 的 schema、参数命名约定、实体标识符的概念,就无法构造"结构合法但非权威"的污染轨迹。航司/零售领域的实际业务逻辑(订单更新、退款、库存查询)是构造真实污染的前提。
- 工具使用的两种决策类型——Call 与 Answer 的区别,以及 Answer 的三个子类(Clarify / Answer-from-Evidence / Unsupported)。不理解这个分类,就无法设计覆盖"何时调用"与"如何调用"两端的 BTA 指标。
为什么必须:没有这些领域知识,就不知道要干预什么变量、怎么干预才"结构合法但非权威"、以及怎么评估"对"与"错"。
7.2 方法论知识层:蒸馏与鲁棒性的研究脉络
必须知道:
- 知识蒸馏的两个方向:前向 KL(mean-seeking,等价于 SFT)与反向 KL(mode-seeking,MiniLLM/GKD)。不理解这两个方向的性质差异,就无法解释为什么 Oracle-OPD 选择反向 KL——因为工具使用需要明确的决策,而不是在多个选项间摊薄。
- exposure bias 与在策略蒸馏:不理解"训练看教师轨迹、部署看自己轨迹"的分布错配,就无法解释为什么必须在学生自己采样的 prefix 上做监督。
- 特权信息学习(Learning from Privileged Information):不理解"训练时有特权、部署时无特权"这个范式,就无法理解"Oracle State 是教师的特权信息,部署时被移除"的设计。
- 上下文鲁棒性研究:不理解已有基准(BFCL、τ-bench、ReflecTool-Bench、InjecAgent 等)各自评估什么、不评估什么,就无法定位"历史权威性"这个空白。
为什么必须:没有这些方法论知识,就无法把"可靠状态策略迁移"这个直觉转化成一个有理论基础、可实现、可评估的方法。
7.3 工程知识层:基准构建与评估设计
必须知道:
- 如何做轨迹级数据划分——来自同一源轨迹的所有例子必须留在同一个 split,否则训练/测试泄漏会让指标虚高。
- 如何做确定性验证——污染轨迹必须经过"保持源消息顺序、最新请求在最后、工具调用配结果、实例化预期干扰、gold action 不变"这一连串程序化校验。这保证了 benchmark 的"gold-preservation"属性是可验证的,而不是靠人工目测。
- 如何做分层审计——200 例精细人工审计 + 1000 例分层交叉审计 + 与独立 LLM(Claude-Opus-4.7)的一致性校验。没有这套审计,benchmark 的质量就是空中楼阁。
- 如何设计平衡指标——BTA 之所以是主指标,是因为它同时惩罚"永远不调用"和"什么都调用"两种极端。不理解这个,就会设计出会被某一种极端"刷分"的指标。
为什么必须:没有这些工程知识,benchmark 的质量不可信,方法的效果也无法被可信地测量。
7.4 知识融合的关键节点
这些知识不是简单叠加,而是在三个创造性节点上产生了化学反应:
融合节点 1:三视图同步设计。把"工具使用评估"(领域知识)与"对照实验"(方法论知识)融合,创造出 Original/Polluted/Oracle 三视图——这是把"能力缺失"和"可靠性失败"分开的关键。没有领域知识不知道要控制什么,没有方法论知识不知道怎么控制。
融合节点 2:Oracle-OPD = 反向 KL + 在策略 + 特权信息。把"反向 KL 的 mode-seeking 性质"、“在策略蒸馏的 exposure bias 修复”、“特权信息学习的训练时有部署时无"三个本来独立的技术融合成一个统一方法。三者的必要性由因子化消融证实——任何一个去掉都会显著退化。
融合节点 3:十一类干扰算子的三维分类。把"工具使用的三个失败维度”(决策状态、实体绑定、接口执行)与"受控干预"(工程知识)融合,创造出一个既覆盖全面又每个算子都 gold-preserving 的算子体系。这保证了 benchmark 既能覆盖真实世界的多种历史污染模式,又每个例子都能做"gold 不变"的严格对照。
八、论文中可以提取的通用性灵感
8.1 灵感一:用"同步多视图对照"分离能力缺失与可靠性失败
核心思想:当一个系统的失败可能有多个原因时,构造一组"目标不变、只改变某一维度"的同步多视图,可以把不同原因的失败彻底分开。
论文证据:Original / Polluted / Oracle State 三视图共享系统策略、工具、请求、gold action,只改历史。32.1% 的翻转率直接证明了"可靠性失败"是独立于"能力缺失"的失败模式。
推广场景:
- 代码生成:同一题意,构造"干净 prompt / 带误导性注释的 prompt / 规范化 prompt"三视图,分离"模型不会写"与"模型被误导性注释带偏"。
- 检索增强生成(RAG):同一问题,构造"无检索 / 检索到相关文档 / 检索到看似相关实则干扰的文档"三视图,分离"模型不知道答案"与"模型被错误检索带偏"。
- 多语言理解:同一语义,构造"母语 / 字面翻译 / 文化适配"三视图,分离"语义能力缺失"与"语言形式导致的判断偏差"。
- 多智能体协作:同一任务,构造"无历史沟通 / 带误导性历史沟通 / 真实历史沟通"三视图,分离"Agent 不会协作"与"Agent 被错误历史沟通带偏"。
8.2 灵感二:特权信息蒸馏——训练时有特权、部署时无特权
核心思想:如果某种"理想信息"在部署时不可得但在训练时可构造,可以把它作为教师的特权条件,再通过蒸馏把"在特权下诱导的策略"迁移到无特权的学生。
论文证据:Oracle State 是教师的特权(只含可靠状态),学生在污染历史上自采样 prefix,教师在这些 prefix 上给软监督。部署时只有学生 + 普通历史,却保留了 Oracle 诱导的可靠策略——BTA 从 0.4720 提升到 0.8703,且不需要部署时 Oracle。
推广场景:
- 自动驾驶:训练时教师可访问"上帝视角的全局地图与所有车辆意图"(特权),学生只有车载传感器输入;把"上帝视角下的安全驾驶策略"蒸馏进只有局部感知的学生。
- 医疗诊断:训练时教师可访问"病理金标准"(特权),学生只有症状与问诊;把"金标准下的诊断策略"蒸馏进只有症状的学生。
- 对话系统:训练时教师可访问"用户真实意图标注"(特权),学生只有对话历史;把"知道真实意图后的应答策略"蒸馏进只能推测意图的学生。
- 代码 review:训练时教师可访问"作者的真实意图与后续 bug 历史"(特权),学生只有代码 diff;把"知道真实意图与后果后的 review 策略"蒸馏进只能看 diff 的学生。
8.3 灵感三:在策略蒸馏——把监督送到学生真正会跌倒的台阶
核心思想:训练时的监督应贴在"学生自己会到达的状态"上,而不是"标准答案预设的状态"上。这样才能修复部署时真正会发生的错误。
论文证据:学生前缀 vs 教师/gold 前缀的消融显示,学生前缀贡献 +2.24 pp BTA。Off-policy OD(在 gold 前缀上监督)只有 0.8499,Oracle-OPD(在学生前缀上监督)达 0.8703。
推广场景:
- 数学推理蒸馏:让强教师不再只在"标准解题步骤"上打分,而是在"弱学生自己的推理轨迹(包括错误尝试)“上逐 token 评分,把纠偏信号精确送到学生真正会卡住的步骤。
- 代码补全:让强教师不再只在"正确代码"上训练弱模型,而是在"弱模型自己生成的(可能有 bug 的)代码"上逐 token 评分,修复弱模型真正会写的错误模式。
- RLHF 的 reward model:不再只在"理想回答"上训练 reward model,而是在"策略自己生成的回答"上打分,让 reward 信号覆盖策略真实访问的状态分布。
- 多语言翻译:让强教师不再只在"参考译文"上训练,而是在"弱模型自己的(可能有偏的)译文"上逐 token 评分,修复弱模型真正会犯的翻译错误。
8.4 灵感四:平衡指标——同时惩罚两种对立的极端失败
核心思想:当一个任务有两种对立的失败模式(“该做不做"与"不该做乱做”)时,主指标应当是两者的平衡平均,而不是任一单端,否则会被某种极端策略刷分。
论文证据:BTA = ½·TCR + ½·(1-OCR)。Gold-SFT 家族在 1-OCR 上接近完美(0.98+),但 TCR 极低(0.34),BTA 只有 0.66。如果只看 TCR 或只看 OCR,都会被这类极端策略误导。BTA 把策略推向"既该出手时出手、又该收手时收手"的右上角。
推广场景:
- 搜索引擎的召回与精确:F1 是两者的调和平均,避免"全召回不精确"或"高精确不召回"两种极端。
- 欺诈检测的漏报与误报:主指标应是两者的平衡,而不是任一单端,否则会被"全标欺诈"或"全标正常"刷分。
- 推荐系统的探索与利用:主指标应平衡"推荐已知用户喜欢的"与"探索用户新兴趣”,而不是只优化点击率。
- 安全过滤的过度拦截与漏放:主指标应平衡"拦截有害内容"与"不误伤合法内容",而不是只优化任一端。
8.5 灵感五:提示不够时要靠训练——区分"提醒"与"能力"
核心思想:有些问题表面看是"模型不知道要注意",实际上是"模型没有学会区分的能力"。前者用 prompt 提醒即可,后者必须靠训练。
论文证据:Prompt-only 对照组(直接指示"忽略失败或无关历史")只把 BTA 从 0.4720 提到 0.4849(+0.013),而 Oracle-OPD 训练达到 0.8703(+0.398)。差距 30 倍。这说明"区分哪段历史仍具权威性"是一个需要训练的能力,不是一个提示能解决的注意事项。
推广场景:
- 对抗样本鲁棒性:提示模型"注意输入可能有扰动"几乎无效,必须靠对抗训练才能获得真正的鲁棒性。
- 幻觉控制:提示模型"不要编造"效果有限,必须靠基于事实监督的训练(如 RAG + grounded loss)才能系统性降低幻觉。
- 偏见纠正:提示模型"不要有偏见"效果有限,必须靠平衡训练数据与去偏损失才能系统性减少偏见。
- 长上下文遵循:提示模型"注意中间的内容"效果有限,必须靠"针在 haystack"式的训练才能提升长上下文中的指令遵循。
附录:论文核心贡献一览
ContextPollute-Bench 的核心属性:
- 首个隔离"历史诱导策略劫持"的基准。
- 三视图同步(Original / Polluted / Oracle State),gold action 完全一致。
- 11 个 gold-preserving 干扰算子,覆盖 Decision State / Entity Binding / Interface Execution 三维。
- 两层质量审计:200 例(97% gold 正确率)+ 1000 例(93.7% 人工接受率)。
Oracle-OPD 的核心属性:
- 教师条件化在 Oracle State(特权),学生在污染历史自采样 prefix。
- 反向 KL + 软目标 + 在策略三合一。
- 部署时仅需学生 + 普通历史,教师与 Oracle 完全移除。
- 1.7B 学生:BTA 47.20% → 87.03%;8B 教师蒸馏:91.93%;8B 学生:93.01%。
- 迁移到:干净历史、未见工具、独立再生的评估上下文、BFCL v4、When2Call、HotpotQA 噪声多跳 QA。
核心一句话:当历史在说谎时,模型需要的不是一句"别信历史"的提示,而是一个在"可靠状态"下被教师手把手纠偏过的策略——而这个策略,部署时自己就能站稳。