指令微调为什么一接工具调用数据就开始 JSON 更稳却通用回复变硬:从 Schema Curriculum 到 Format Dropout 的工程实战
不少团队给通用模型补完工具调用数据后看到的是JSON合法率上升、函数参数抽取稳了。⚠️ 但一进真实对话模型就开始用又短又硬的句式回话。 明显的信号是开放问答胜率下降解释能力发空。 这不是模型变笨是格式学习挤占了表达学习。图 1工具调用数据带来的第一层收益通常很好看但副作用往往在开放对话里才暴露工具调用样本最容易把模型带偏到格式优先工具调用样本有个天然偏置大段schema、固定字段名和重复系统提示会让损失快速收敛到外层格式。 一旦再叠加长JSON和高频工具名模型最容易学到的不是何时该调用工具而是先把回答写成工具输出的样子。 结果就是结构化评测升得很快普通解释型回答却开始发紧。很多团队的错法也很一致把历史工具轨迹、普通问答和RAG解释样本一次性混在同一批里跑还让所有 token 等权学习。 问题在于schema前缀和字段壳子更长、更重复梯度会天然压过参数语义和自然语言转述。️ 如果再把工具调用占比堆到三成以上模型就会更偏向先排格式再想内容。⏱️图 2同样是补工具数据差别往往不在数据量而在梯度到底被谁主导一组 SFT 回放里真正拖垮体验的是配比和损失焦点这次回放使用7B指令模型做SFT训练集包含客服问答、代码解释和工具调用三类样本。 基线方案保持原始通用数据方案二直接把工具调用样本混到35%方案三把工具调用占比做成分阶段 curriculum并对schema壳子施加 format dropout。 结果很明确拖垮体验的不是工具样本存在而是它们以错误方式主导了损失。方案工具调用成功率开放问答胜率无效JSON比例人工主观感受原始通用 SFT61.8%68.4%6.9%回复自然但工具不稳直接混入35%工具样本82.7%54.1%2.8%JSON很稳语气发硬Curriculum format dropout80.9%66.2%3.1%工具稳定解释能力保住表里最关键的不是工具成功率而是开放问答没有被一起拖下去。 直接混入高比例工具数据后模型在函数调用评测上冲得很快可解释型问题的胜率却掉了十多个点。✅ 把训练改成先低占比热身、中期拉高、后期回落再给固定schema壳子做 dropout模型会把学习重心拉回何时调用、参数填什么和解释怎么说。deftoken_weight(token):iftoken.is_schema_wrapper:return0.35iftoken.is_argument_value:return1.15return1.0deftool_mix_ratio(step,total_steps):warmupstep/total_stepsifwarmup0.3:return0.18ifwarmup0.7:return0.32return0.22图 3把格式 token 降权之后模型更容易把容量留给语义决策而不是外层壳子真正有效的是控制格式学习节奏而不是继续堆工具轨迹更稳的工程顺序不是继续加数据而是先治理工具样本的形状。 经验上工具调用样本适合作为阶段性强化数据而不是长期占据高比例schema说明越冗长、字段顺序越固定越该在训练里打散外层壳子避免模型把像工具输出误学成最安全回答。 同时开放问答、解释型回复和工具后总结样本必须保留足够权重不然最先坏掉的一定是自然表达质量。笔者认为未来3到6个月AI agent训练的重点会从工具接得更多转到工具接得准同时还能解释为什么这样接。 结构化输出和工具调用重要但它们不该吃掉通用对话能力谁先把 schema curriculum、format dropout 和后置总结样本治理好谁的 agent 体验就更稳。 你们线上更常见的问题是工具调用不稳还是稳了以后通用回复开始发硬如果这篇文章对你有帮助欢迎点赞、收藏和关注。图 4工具调用训练真正要保住的不只是函数命中率还有模型解释问题时的自然度