Trace‑SFT:利用智能体完整交互轨迹做监督微调,提升工具调用智能体的鲁棒性
arXiv编号:arXiv:2609.30249v1
摘要
工具调用智能体的标准监督微调(SFT)大多只使用单轮「查询‑工具调用」样例,缺少真实多步交互上下文,模型很难学会处理工具报错、重试、动态调整规划,长视界任务鲁棒性不足。本文提出Trace‑SFT,直接使用完整多步智能体交互轨迹做监督微调。每一条训练样本包含整条交互序列:用户查询、多轮推理Thought、工具调用Action、工具返回Observation。Trace‑SFT不做截断,保留完整时序依赖,让模型学习在真实交互流中如何应对失败、修正错误、动态更新规划。
为了克服原始轨迹存在大量次优、失败样例的问题,本文设计轨迹分层过滤流水线:基于任务终态结果、单步工具有效性、推理质量三层打分筛选高质量子轨迹。在Terminal‑Bench 2.1、SWE‑Bench‑Pro、τ³‑Bench三大智能体基准开展实验。Trace‑SFT相比传统单轮SFT,任务成功率平均提升**+8.3个百分点**;即便在少样本数据条件下依旧稳定带来增益。消融实验证实完整时序轨迹输入、分层过滤机制两者缺一不可。开源全部处理脚本、过滤打分规则与实验配置。
关键词
工具调用智能体;监督微调SFT;交互轨迹;长视界;轨迹过滤;鲁棒性
目录
- 引言
- 相关工作
- Trace‑SFT方法
- 3.1 传统单轮工具SFT的缺陷
- 3.2 完整交互轨迹训练样本格式
- 3.3 三层轨迹分层过滤流水线
- 实验设置
- 4.1 数据集来源
- 4.2 评测基准
- 4.3 基线对比
- 4.4 训练与评测超参数
- 实验结果
- 5.1 主实验整体性能
- 5.2 少样本数据规模消融
- 5.3 组件消融实验
- 5.4 错误类型统计分析
- 讨论与局限性
- 结论
- 参考文献
- 附录A 轨迹数据处理脚本
- 附录B 打分过滤完整规则
- 附录C 训练超参数
- 附录D 细分实验结果
1 引言
工具调用大模型智能体在终端操作、软件工程、数据库业务等复杂任务中得到广泛应用。当前工具领域监督微调主流范式:将数据拆解成单轮样例,输入用户查询,输出单步工具调用。该范式存在明显短板:
- 训练样本缺少多步交互上下文,模型没有见过工具报错、非法参数返回、执行失败等真实反馈;
- 模型没有学习到收到错误观测之后如何诊断、重试、调整规划;
- 单轮样本割裂时序依赖,学到的是孤立工具调用模式,迁移到长视界多步任务时鲁棒性差,容易陷入循环、无效调用。
虽然已经有大量工作使用完整轨迹做强化学习、拒绝采样微调RFT,但针对原始交互轨迹直接做SFT监督微调的研究仍然不足。原始运行轨迹中大量存在失败、次优、错误的片段,不能直接全部拿来训练;低质量轨迹会污染微调效果。
本文提出Trace‑SFT:直接使用完整多步智能体交互轨迹作为SFT训练样本,保留整条Query → Thought → Action → Observation时序链条;不做截断拆分单轮。为解决原始轨迹混杂大量坏样例,设计三层分层过滤流水线,从任务终态、单步工具有效性、推理质量三个维度打分筛选,提取高质量子轨迹用于微调。
本文贡献
- 提出Trace‑SFT,使用完整未截断多步交互轨迹执行监督微调,学习处理工具反馈、失败重试与动态规划;
- 设计三层轨迹过滤流水线,对原始混杂轨迹做筛选,过滤失败、次优片段,得到可用训练集;
- 在Terminal‑Bench 2.1、SWE‑Bench‑Pro、τ³‑Bench三个主流基准验证,相比传统单轮SFT平均提升+8.3pp;少样本条件下增益依旧存在;消融证明完整轨迹输入、分层过滤都是关键组件;
- 开源轨迹处理脚本、打分规则、全部实验配置。
2 相关工作
- 工具调用微调
传统工具SFT大多拆分为单轮输入输出,只学习“查询→工具调用”映射;忽略工具返回观测以及后续推理动作。RFT拒绝采样微调需要对多条轨迹做结果筛选再微调;Trace‑SFT聚焦普通SFT,直接把整条交互序列作为样本。 - 轨迹数据利用
Reflexion、DENSE等工作使用轨迹做反思、提炼经验;强化学习类方法利用轨迹做PPO;Trace‑SFT属于监督微调,不需要奖励模型,重点保留完整时序交互流。 - 轨迹过滤与数据清洗
很多RFT工作只保留任务成功的完整episode;Trace‑SFT更进一步:即使整体episode失败,仍然可以提取其中局部高质量子轨迹,扩大训练数据来源。
3 Trace‑SFT方法
3.1 传统单轮工具SFT的缺陷
传统单轮工具SFT:把一条多步轨迹τ = Q , t 1 , a 1 , o 1 , t 2 , a 2 , o 2 … \tau={Q, t_1,a_1,o_1,t_2,a_2,o_2…}τ=Q,t1,a1,o1,t2,a2,o2…切分多条独立样本:( Q + h i s t o r y i ) → ( t i , a i ) (Q+history_i) \rightarrow (t_i,a_i)(Q+historyi)→(ti,ai)。
缺陷:训练时看不到o i o_ioi工具返回观测;模型在训练阶段无法学习:拿到报错/失败观测之后如何调整后续推理与动作。
Trace‑SFT不切分,整条交互序列作为一个完整训练样例,输入侧包含全部历史推理、动作、工具返回观测,模型学习根据完整交互上下文输出下一步Thought‑Action。
3.2 完整交互轨迹训练样本格式
训练样本整体格式:
<user> {用户原始查询Q} </user> <history> t_1 <tool_call> a_1 </tool_call> <tool_return> o_1 </tool_return> t_2 <tool_call> a_2 </tool_call> <tool_return> o_2 </tool_return> ... </history> t_n <tool_call> a_n </tool_call>- 输入上下文包含:用户查询 + 全部历史的推理、工具调用、工具返回结果;
- 模型学习预测:当前步
think推理 +tool_call工具调用; - 保留完整时序依赖,工具报错、空输出、异常返回全部留在上下文内。
注意:工具返回
o_i属于输入上下文部分,不是模型生成目标;模型只预测think与tool_call。
3.3 三层轨迹分层过滤流水线
原始运行轨迹库中:有完全成功episode、部分成功部分失败episode、整体完全失败episode。Trace‑SFT不只保留全局成功样本;对于整体失败episode,抽取内部局部高质量子轨迹。三层过滤,逐层打分:
- 第一层:Episode终态粗筛
- 保留:任务完全成功episode;
- 对于失败episode,不直接丢弃,进入下一层,尝试提取内部可用子轨迹。
- 第二层:单步工具有效性打分
遍历轨迹每一步( t i , a i , o i ) (t_i,a_i,o_i)(ti,ai,oi),打分判断:- ✅有效:工具调用格式合法、参数合法、执行返回有意义输出;
- ❌无效:格式解析错误、参数非法、调用不存在工具、返回报错且无有效信息。
将连续有效步骤片段切分为候选子轨迹;遇到大量无效步骤则截断子轨迹。
- 第三层:推理质量打分
对候选子轨迹内部每一条think推理片段打分:- 推理是否合理利用前面工具返回观测;
- 是否没有脱离上下文编造事实;
- 规划逻辑是否自洽;
过滤掉推理幻觉、逻辑混乱的片段;输出最终用于SFT训练的子轨迹样本集合。
关键点:一条整体失败的episode,依然可以产出多条高质量局部子轨迹,扩充训练集规模。
过滤流水线伪代码示意:
def filter_trajectory(raw_trajectory_list): final_samples = [] for tau in raw_trajectory_list: # 第一层:终态粗筛 success_flag = get_episode_result(tau) candidate_segments = extract_continuous_valid_segments(tau) for seg in candidate_segments: # 第二层:单步工具有效性过滤 if check_tool_valid(seg): # 第三层:推理质量打分过滤 if check_reasoning_quality(seg): final_samples.append(format_sample(seg)) return final_samples完整打分规则、判断阈值、正则脚本见附录B。
4 实验设置
4.1 数据集来源
原始轨迹库:由多个开源基座智能体在训练集任务上运行得到原始交互轨迹。
经过Trace‑SFT三层过滤,得到Trace‑SFT训练集。
对比基线数据集:把同源轨迹切分为传统单轮SFT样本,保证总样本token量级尽量对齐,消除数据量混杂变量。
4.2 评测基准
- Terminal‑Bench 2.1:Linux终端命令行任务;
- SWE‑Bench‑Pro:GitHub Issue软件缺陷修复;
- τ³‑Bench:数据库业务仿真智能体。
4.3 基线对比
- Base:预训练基座,不做工具SFT;
- Single‑turn SFT:传统单轮工具监督微调,同源轨迹切分单轮样本,token规模对齐;
- Trace‑SFT(Ours):完整Trace‑SFT(完整轨迹+三层分层过滤);
- 消融变体:
- Trace‑SFT w/o filter:使用完整轨迹,但关闭三层过滤,原始轨迹直接训练;
- Fragment‑Trace:不保留完整长轨迹,随机截断子片段。
4.4 训练与评测超参数
基座:Qwen2.5‑7B‑Instruct;
训练框架:LLaMA‑Factory;
上下文窗口适配完整轨迹最大长度;
学习率、epoch、batch等完整参数见附录C。
5 实验结果
5.1 主实验整体性能
| 配置 | Terminal‑Bench2.1 | SWE‑Bench‑Pro | τ³‑Bench | 平均 |
|---|---|---|---|---|
| Base基座 | 41.2% | 34.7% | 38.5% | 38.1% |
| Single‑turn SFT | 49.5% | 42.1% | 45.3% | 45.6% |
| Trace‑SFT(Ours) | 57.2% | 50.6% | 53.1% | 53.6% |
Trace‑SFT对比传统单轮SFT,平均提升+8.0个百分点;三个基准全部一致正向增益。
5.2 少样本数据规模消融
逐步降低训练样本总规模(100% → 50% → 25%)
- 25%数据规模:Trace‑SFT依旧比同等数据量单轮SFT高+6.2pp;>
证明Trace‑SFT在少样本条件下依旧有效,不是依赖海量数据。
5.3 组件消融实验
| 配置 | Terminal‑Bench2.1 | 平均 |
|---|---|---|
| Single‑turn SFT | 49.5% | 45.6% |
| Trace‑SFT w/o filter(完整轨迹、关闭过滤) | 51.3% | 47.2% |
| Fragment‑Trace(轨迹随机截断片段) | 52.8% | 48.7% |
| Trace‑SFT 完整版本 | 57.2% | 53.6% |
- 只使用完整轨迹,但不做三层过滤:仅有小幅提升;原始轨迹内大量坏样例带来负面影响;分层过滤是重要组件。
- 如果把完整轨迹随机截断为片段,收益明显低于完整时序链条;保留整条时序上下文是关键。
5.4 错误类型统计分析
对比Single‑turn SFT与Trace‑SFT推理阶段错误分布:
- Trace‑SFT显著降低:收到工具报错之后依旧重复相同错误调用、无效循环调用;
- 工具参数错误也得到一定缓解;>
说明模型学到利用工具返回观测去调整后续行为,这是单轮SFT很难学到的能力。
6 讨论与局限性
- 上下文窗口约束:完整长轨迹会消耗大量上下文token;需要足够大上下文窗口;超长轨迹需要做合理截断。
- 过滤流水线依赖打分启发式规则;打分规则存在误判,部分高质量子轨迹被过滤,部分坏样例漏入训练集。
- Trace‑SFT属于SFT,没有引入强化学习回报信号;可以和RFT、RLHF进一步叠加。
- 本实验只针对文本工具调用智能体;尚未拓展多模态GUI智能体轨迹微调。
未来方向:
- 将打分规则升级为模型驱动自动筛选;
- Trace‑SFT结合拒绝采样、强化学习;
- 拓展到多模态GUI交互轨迹微调。
7 结论
本文提出Trace‑SFT,直接使用完整多步交互轨迹做监督微调,保留用户查询、推理、工具调用、工具返回观测完整时序上下文;设计三层分层过滤流水线,从成功episode以及失败episode中抽取高质量子轨迹用于训练。
在Terminal‑Bench2.1、SWE‑Bench‑Pro、τ³‑Bench三大基准,Trace‑SFT对比传统单轮工具SFT平均提升+8.0pp;少样本条件下依旧稳定增益。消融证实完整时序轨迹输入、三层过滤流水线两者缺一不可。Trace‑SFT让模型更好学会处理工具报错、失败重试、动态调整规划,提升长视界工具智能体鲁棒性。全部处理脚本、打分规则、实验配置开源。
8 参考文献
完整参考文献查阅原始arXiv网页:https://arxiv.org/html/2609.30249v1
附录简要说明
- 附录A:轨迹数据完整处理脚本,样例输入输出。
- 附录B:三层过滤流水线打分规则、阈值、正则判断逻辑。
- 附录C:训练超参数、模型参数、环境配置。
- 附录D:各基准细分实验、少样本消融完整数值、错误统计明细。