第一次训练 Agent 时,团队很容易被一个明显变化鼓舞:模型终于能稳定输出结构化 tool call,JSON 也不再频繁报错。
但把问题换成“什么是人工智能”,它仍然先调 Search;遇到简单计算,也不一定选择合适工具;即使工具调用成功,最终答案还可能不完整。
这不是一个矛盾结果。
格式学习、工具策略和答案能力本来就是不同层次。SFT 可以很快让模型模仿外壳,却未必已经学会在不同情境下做选择,更不能保证它能从工具结果中组织完整答案。
现有首次训练记录正好提供了一个可以诚实分析的小样本案例。
所以面试官真正想问的是:
首次 SFT 应该如何限定实验结论,为什么格式比策略更容易学,怎样把工具选择、答案准确与完整度拆开评测,以及下一批数据应该按什么缺口补,而不是盲目加量?
先把这次实验的边界说清楚
可以确认的首次训练使用 data/train_v3_200_clean.jsonl,清洗后实际是 187 条样本,训练 1 个 epoch。
评测使用 10 个通用测试用例,对比基线与训练后模型的格式、工具调用、工具准确性、答案准确性和完整度。
模型是 qwen3_0.6b 配合 LoRA。训练记录还给出了当次最大长度和梯度累积参数,但这篇文章不把单次配置解释成通用最优配方。
样本文件名里的 200 不能替代实际清洗后条数。10 个用例也不足以表示所有研究场景、行业分布和异常环境。
因此这次实验能回答的是:训练链路是否跑通,模型是否开始学习目标格式,哪些能力缺口已经暴露。
它不能回答生产环境是否稳定、总体准确率提升多少、某种工具策略是否已经泛化,更不能据此承诺业务效果。

小样本实验适合发现问题和验证链路,不适合外推生产能力。
这次训练实际观察到了什么?
训练记录的第一个观察是格式能力改善。
训练后模型更稳定地输出约定结构,能够给出符合模式的 tool call。这说明 SFT 数据向模型传递了输出规范。
第二个观察是工具选择仍偏弱。
面对简单常识问题,模型仍倾向调用 Search,而不是直接完成。材料将其归因于样本量有限和训练数据中 Search、Visit 轨迹偏多。
第三个观察是部分计算题的工具选择有所改善。
记录中的教学用例“50×20 等于多少”展示了模型能选择 calculator,但答案完整性仍一般。这个单例只能说明出现了正确选择,不能写成计算工具准确率已经稳定提升。
第四个观察是部分事实题答案更规范。
“水的化学式是什么”这类用例中出现了正确答案与稳定结构,但材料也明确说明这不是稳定现象。
综合起来,最稳妥的结论是:格式学习先出现,策略与内容能力仍需要更多有针对性的数据和评测。
为什么格式比工具策略更容易学?
格式规则通常稳定、局部而且重复。
同一种 tool call 有固定字段、角色和括号结构。模型只要在许多样本中反复看到相同模式,就可能快速降低格式错误。
工具策略却依赖上下文。
同一个问题是直接回答、Search、Visit 还是 calculator,不只看关键词,还要判断知识是否稳定、是否需要原文、是否存在计算、证据风险和用户要求。
格式是“怎样表达一个决定”,策略是“应该做什么决定”。前者更接近序列模仿,后者要求在多个可行动作中结合状态作选择。
答案能力又是第三层。即使工具选择正确,模型还要读取 observation、筛选证据、覆盖所有子问题、组织结构并在证据不足时保持边界。
这三层可以相互影响,但不能用一个指标替代。JSON 合法率高,只能说明调用更容易被解析。
一个工具调用成功,至少要过几道门?
第一道是格式合法。工具名、字段、JSON 与角色能被控制器解析。
第二道是工具选择正确。当前信息缺口确实适合这个工具,而不是习惯性调用。
第三道是参数正确。查询保留对象、时间和约束,计算输入与任务一致。
第四道是环境执行成功。工具没有超时、权限失败或返回空结果。
第五道是结果被正确利用。模型理解了 observation,没有把搜索摘要当原文,也没有忽略冲突。
第六道是后续决策合理。证据不足时继续查,完成后及时停止。
第七道是最终答案完整。用户要求的对象、维度、来源和边界都得到回应。
首次 SFT 可能主要改善第一道门,不能据此默认后六道也随之改善。
评测为什么必须拆开?
如果只统计“是否成功调用工具”,一个不需要搜索的常识题调用 Search 并得到结果,可能被判为成功。
如果只统计最终答案对不对,模型可能用错误工具碰巧答对,长期却形成昂贵且不稳定的行为。
因此可以把一次完整运行拆成格式、决策、执行、证据与答案五层。
格式层检查协议可解析、角色闭合和最终出口。
决策层检查是否需要工具、选择是否合适、参数是否保留任务条件。
执行层检查工具真实状态、错误恢复和返回血缘。
证据层检查关键主张是否来自 observation,引用是否对齐。
答案层检查准确、完整、边界和用户交付。
每层都保留具体错误标签。这样训练后即使总分不变,也能看出究竟是格式进步被策略退化抵消,还是某一能力完全没有变化。

把一次运行拆成多层,才能知道 SFT 真正改变了什么。
为什么小数据特别容易学到“默认 Search”?
当训练样本较少时,高频模式更容易主导模型行为。
若许多轨迹都以 Search 开头,模型会把“收到问题”与“输出 Search 调用”强关联。它可能没有学到判断,只学到最常见动作。
常识直接回答、计算器、访问原文和证据不足样本如果覆盖不足,模型没有足够对比去学习动作边界。
还要注意一个表面均衡陷阱。即使工具调用次数看似平均,若任务类型与动作始终一一固定,模型仍可能依赖关键词捷径。
高质量数据需要同一主题下存在不同决策:稳定常识可以直接答,需要最新事实才搜索,需要原文细节才 Visit,需要确定运算才 calculator。
相反,同一种工具也要覆盖不同领域、参数和失败分支。这样模型学习的是条件与动作关系,而不是记住问题词表。
下一批数据应该怎样补?
先从错误日志生成能力缺口表,不从目标总条数倒推。
针对默认 Search,补充能够直接完成的稳定常识题,并明确为什么不需要外部工具。
针对计算选择,补充需要 calculator 的样本,也要加入可以直接心算但不必调用工具的简单问题,让边界有对照。
针对 Search 与 Visit 混淆,补充“摘要足够”和“必须进入原文”的成对任务。
针对答案不完整,补充多子问题覆盖、证据引用、无答案说明和明确结束的轨迹。
针对格式偶发重复,回查训练样本是否存在多次输出、缺失 finish 或角色串位,先清洗再扩量。
针对异常环境,增加超时、空结果、权限受限后的重试、换源与降级,但 observation 必须来自可验证环境。
每个缺口都要有对应评测题。只补训练数据而不增加独立测试,无法判断改动是否有效。
为什么不能只把同类正确轨迹复制更多遍?
复制会增加某种格式出现次数,却不会增加决策边界。
如果模型已经能稳定输出 Search JSON,再加入大量相似 Search 轨迹,最可能进一步强化默认 Search,而不是改善工具选择。
同义改写也不一定增加信息。问题文本变了,但工具序列、证据路径和答案结构完全相同,仍然属于同一行为模式。
更有价值的是补反例和相邻边界。例如同一主题分别设计直接回答、搜索最新信息、访问官方细节和承认证据不足的任务。
这些样本还要按问题族与来源组去重切分,避免同一母题的改写跨入训练和测试。
数量是结果,不是目标。先定义要改变的行为,再判断需要多少合格样本覆盖它。
怎样判断一次改进值得继续扩量?
先看格式是否保持,不要修工具选择时又破坏协议稳定性。
再看目标错误类型是否下降。例如直接回答场景是否减少无谓 Search,Visit 场景是否更愿意进入原文。
同时检查相邻能力是否退化。减少搜索不能变成所有问题都直接答,增加完整答案不能变成证据不足时硬补结论。
还要检查真实工具环境。离线模板题改善,不代表面对超时、空结果和动态网页仍能正确恢复。
最后看结果是否跨不同问题族、表述和领域出现,而不是只在刚补的近重复题上提升。
首次训练后的下一步应是小批迭代、错误归因与独立复测。只有具体能力稳定改善,才考虑扩大数据和训练规模。

每类错误都要对应数据、评测与回归检查,不能只追总量。
工具选择应该怎样做成混淆矩阵?
一句“工具选择准确率不高”不够指导补数。
可以先为每道评测题标注期望动作:直接完成、Search、Visit、calculator 或其他工具。模型实际选择作为另一维,形成工具混淆矩阵。
若大量直接完成题被预测成 Search,说明存在默认检索偏好。若 Visit 被预测成 Search,说明模型没有区分摘要和原文证据。若 calculator 被预测成直接回答,则要继续判断问题是否确实需要精确计算,不能机械地把所有算术都判错。
矩阵之外还要保存“为什么”。同一个错误格子里,可能有人是关键词误导,有人是知识时效判断错,也有人是工具描述不清。只有回到样本和状态,才能决定是补训练数据、改工具说明还是修控制器。
对于允许多个合理动作的任务,不要强行只有一个标签。例如先 Search 再 Visit 与直接访问已知官方页面都可能成立。可以用允许动作集合、必要约束和最终证据质量共同判断。
工具混淆矩阵的价值,是把“模型不太会选工具”变成可定位的方向。它本身仍不能证明答案正确,因为正确动作也可能带着错误参数。
基线和训练后模型怎样公平比较?
两边必须使用同一批问题、同一工具版本、同一最大运行预算、同一 Prompt 和同一停止策略。
如果训练后模型使用了更宽松解析器,格式成功率会被基础设施差异抬高。若网页内容在两次运行之间变化,事实题的结果也不能直接比较。
动态来源可以保存时间快照或在同一时间窗交错运行。工具失败要单独记录,不能把环境超时算成某个模型的策略错误。
采样参数也要一致,并保留随机种子或多次运行。单次输出容易被随机性影响,尤其是同一问题存在多个可行路径时。
人工评审应尽量不知道答案来自基线还是训练后模型,减少期待偏差。自动裁判则要固定版本,并对关键事实保留可追溯证据。
比较结果不仅要看平均分,还要看每类能力的配对变化。某些题格式修好,另一些题答案退化,平均数可能掩盖真实问题。
10 个用例之后,评测集应该怎样扩展?
首次 10 个通用用例适合做冒烟测试。下一步要按目标能力建立评测矩阵,继续增加相似常识题无法定位策略缺口。
直接完成类检查模型是否知道何时不调用工具。
精确计算类检查 calculator 与参数。
时效事实类检查 Search 与日期范围。
原文细节类检查 Visit、来源定位与引用。
多步研究类检查计划、状态变化、证据覆盖和停止。
异常类检查超时、空结果、权限受限、冲突与降级。
无答案类检查模型能否说明证据不足,而不是硬补结论。
每一类还要跨不同主题和表述,避免训练数据中的关键词直接泄漏。母题、改写和共享来源的问题应放在同一个数据集合,防止训练测试近重复。
评测题需要版本化。工具协议、来源内容和判定规则更新时,不能静默覆盖旧结果。否则团队看到曲线变化,却不知道是模型变化还是考题变化。
怎样从一次失败回查到具体数据?
给每条训练轨迹保存问题族、工具序列、答案状态、来源组和数据版本。
评测失败后,先确认它属于哪类决策。比如稳定常识被错误 Search,就查训练集中同类问题有多少直接完成轨迹,又有多少以 Search 开头。
接着看这些轨迹是否真的合格。直接完成样本可能答案不完整,Search 样本可能只是因为 Teacher 习惯搜索。数量对比只有在质量通过后才有意义。
再检查工具说明与 Prompt。若工具边界描述含糊,单纯补数据可能让模型学习另一套临时关键词规则。
然后设计少量边界样本和独立回归题,做一次可追踪的数据版本修改。训练后只判断目标错误是否改善,同时检查相邻动作是否退化。
如果失败不能关联到数据族和评测标签,就很难形成训练闭环。团队最终只能反复调学习率或扩大样本,却不知道究竟在修什么。
为什么这时不该先大范围调超参数?
首次记录已经暴露了明确的数据与能力缺口:格式开始稳定,默认 Search、工具策略和答案完整仍有问题。
在这些问题没有拆清前,同时改学习率、epoch、LoRA 配置、数据分布和 Prompt,会让因果更难判断。
可以先冻结大部分训练配置,用一小批针对性数据检验“缺少动作边界样本”这个假设。若工具混淆矩阵按预期变化,再逐步扩大。
若格式都无法稳定复现,优先检查模板、Loss Mask、数据角色和训练链路。若训练 loss 正常但行为完全不变,再检查有效监督 token、样本多样性和模型容量。
超参数当然重要,但它不能修复错误标签、虚构 observation 和严重偏斜的数据分布。诊断顺序应从可证伪的错误原因开始,而不是把所有问题归给“训练不够”。
规划数字为什么不能当成训练结果?
首次记录里还写了从当前阶段继续扩展到更大样本量的建议,并给出工具比例、完整率和行业评测等目标。
这些内容用于说明下一步方向,不代表相关数据已经生成、清洗、训练或验收。
同一训练资料体系中还存在不同阶段的数量口径。若不区分“目标”“文件名”“清洗后实际条数”和“正式发布数据”,很容易把计划表写成成绩单。
网站内容和面试回答都应采用同一规则:只把运行记录中明确发生的事实写成事实,规划数字标注为建议,冲突口径不合并。
对于首次 SFT,目前能确认的就是 187 条清洗样本、1 个 epoch 和 10 个通用用例,以及材料记录的定性观察。
不要据此计算没有来源支持的提升百分比,也不要把个别教学用例描述为稳定泛化。
面试官继续追问,怎么接?
追问一:格式稳定为什么不算 Agent 已经会用工具?
格式只说明调用可解析。是否该调用、选什么工具、参数是否正确、结果怎样利用和何时停止仍是策略问题。
追问二:10 个用例能得出什么结论?
能验证链路、发现典型错误并形成下一轮假设,不能代表总体准确率、行业覆盖或生产稳定性。
追问三:为什么模型学会了默认 Search?
材料记录指出样本量有限且 Search、Visit 轨迹偏多。高频动作可能被模型学成收到问题后的默认模式。
追问四:下一批应该优先补多少条?
不先报固定数量。先按直接答、计算、Search、Visit、异常恢复和完整答案定义缺口,小批生成清洗并复测,再决定扩量。
追问五:怎样防止减少搜索后模型开始乱答?
用成对边界题和回归集同时检查直接答与必须检索场景,奖励证据边界,不把少调用工具本身当目标。
怎样复盘第一次 SFT,既说结果也说边界
首次 SFT 先学会格式而没有学会稳定策略是合理现象。格式是重复、局部的序列规则,工具选择却依赖知识稳定性、证据需求、任务条件和环境状态,答案还要完成证据综合。
我会先限定实验边界。现有记录只确认清洗后 187 条样本、1 个 epoch 和 10 个通用用例。可以说格式更稳定,也观察到简单题仍偏 Search、工具选择改善有限、答案准确与完整度不足;不能外推生产效果或总体提升。
评测要拆成格式、选择、参数、执行、证据利用和答案完整。再按错误类型补数据:直接回答与 Search 做边界对照,Search 与 Visit 做证据深度对照,加入计算、异常恢复、无答案和完整结束轨迹。每批小规模训练后用独立问题族复测,同时守住格式和相邻能力。规划数量只代表下一步设想,只有实际生成、清洗、训练和验收的记录才能写成结果。

这次 SFT 到底验证了什么
把已经观察到的变化、尚未解决的能力和下一步实验拆开说,避免把一次小样本训练包装成完整策略学习。
- 是否明确首次运行是 187 条清洗样本、1 个 epoch 和 10 个通用用例?
- 是否把文件名 200 与实际清洗条数分开?
- 是否只报告材料记录的定性观察,不虚构准确率提升?
- 是否分别评测格式、工具选择、参数、证据和答案完整度?
- 是否按能力缺口补数据,而不是复制高频 Search 轨迹?
- 是否把后续目标数量和比例明确标为规划,而不是完成结果?