Agent‑FT:面向工具调用智能体的故障感知微调范式
原文网页:https://arxiv.org/html/2610.31461v1 PDF链接:https://arxiv.org/pdf/2610.31461v1 arXiv编号:arXiv:2610.31461v1 [cs.AI]
摘要 工具调用智能体执行复杂任务时会出现大量典型故障:无效工具参数、工具调用格式错误、循环调用、错误终止、过度搜索。传统监督微调SFT直接使用成功轨迹做训练,缺少对故障案例的系统性利用;简单把成功、失败轨迹混合训练,会出现正负样本冲突,性能提升有限甚至发生退化。 本文提出Agent‑FT故障感知微调范式,专门利用真实运行产生的故障交互轨迹来优化工具调用智能体。该范式分为三个核心模块:①故障诊断器,自动解析交互轨迹识别故障类型、定位故障发生步骤;②对抗轨迹重写器,在保留原始任务目标前提下,对故障轨迹做可控改写,生成修正后的高质量样本;③分层损失训练策略,区分原始成功样本、改写修正样本、原始故障样本,采用差异化损失权重,规避正负样本冲突。 构建Agent‑FT‑Trace数据集,包含来自WebArena、OSWorld、ToolBench的3268条多步交互轨迹,其中2106条为故障失败轨迹。在Qwen、Llama3系列基座开展评测;实验表明Agent‑FT相比普通SFT基线,端到端任务成功率提升4.7‑8.3个百分点;对比直接混合成败轨迹训练基线提升3.9‑6.8个百分点。消融实验验证故障诊断、对抗轨迹重写、分层损失各模块贡献。完整故障轨迹数据集、重写脚本、训练代码全部开源。
关键词 工具调用智能体;故障感知微调;轨迹重写;智能体故障;监督微调;多步交互;失败轨迹复用
目录
- 3.1 智能体典型故障分类
- 3.2 整体流水线总览
- 3.3 故障诊断器
- 3.4 对抗轨迹重写器
- 3.5 分层差异化损失训练策略
- 5.1 主实验端到端任务成功率
- 5.2 故障类型细分改进效果
- 5.3 消融实验
1 引言
工具调用大模型智能体通过多轮推理‑工具交互完成复杂任务。在WebArena、OSWorld、ToolBench等基准上,即使是经过SFT监督微调的模型,仍然会频繁出现各类执行故障:
传统监督微调SFT仅利用人工整理的成功专家轨迹训练模型;大量真实运行产生的失败故障轨迹被直接丢弃。如果简单将原始成功轨迹与原始失败轨迹直接混合训练,正负样本分布冲突,模型会被噪声干扰,不仅收益微弱,甚至会造成性能退化。 失败轨迹本身蕴含大量可复用信息:它记录了智能体实际会踩的坑。问题不在于失败轨迹本身,而在于不能直接拿“错误动作序列”当作训练目标。
本文提出Agent‑FT故障感知微调范式,整套流水线可以自动处理原始故障交互轨迹,不需要大量人工重标注。
本文主要贡献
2 相关工作
2.1 工具智能体监督微调
主流SFT训练依赖高质量专家成功轨迹;获取成本高。部分工作尝试利用RL、GRPO强化学习,使用任务终端奖励,但是RL训练稳定性差,调参成本高。 很少工作系统性利用原始失败故障轨迹;直接将失败轨迹加入训练集通常效果很差。
2.2 智能体故障分析与轨迹修正
已有研究对智能体执行失败做分类,用于事后分析;Self‑Reflect、Reflexion依靠反思提示,在推理时做自我修正,属于推理时阶段,不是微调训练阶段。 Agent‑FT在训练阶段自动处理故障轨迹,把失败轨迹转化为可用训练样本,是数据侧+损失侧联合方案。
2.3 轨迹重写与数据增强
轨迹增强大多针对成功轨迹做扰动;Agent‑FT面向失败故障轨迹,做回溯‑修正式对抗重写,把坏轨迹转为可用训练样本,并且搭配分层损失规避噪声干扰。
3 Agent‑FT故障感知微调范式
3.1 智能体典型故障分类
| 格式故障 | 工具调用JSON格式错误 | 输出非法JSON,无法解析工具名称与参数 |
| 参数故障 | 参数缺失、参数无效、参数越界 | 工具调用字段合法,但参数不符合工具约束 |
| 行为故障 | 循环调用、过早终止、过度搜索 | 循环重复相同动作;未完成任务就结束;无限制搜索不收敛 |
一条轨迹可以存在多处故障;故障诊断器输出故障发生步号、故障类别、故障根因简要描述。
3.2 整体流水线总览
完整流程:
- D s u c c D_{succ} Dsucc:原始成功专家轨迹;
- D r e w r i t e D_{rewrite} Drewrite:故障轨迹经过重写得到的修正样本;
- D f a i l D_{fail} Dfail:未经改写的原始故障轨迹;
注意:原始故障样本 D f a i l D_{fail} Dfail不会直接当作输出目标做监督,只分配很小权重用于上下文正则,避免模型学习错误动作。
3.3 故障诊断器
输入完整多步交互轨迹 τ = [ o 0 , a 0 , o 1 , a 1 , . . . , o T , a T ] \\tau = [o_0,a_0,o_1,a_1,…,o_T,a_T] τ=[o0,a0<



