工具调用进了训练主体:小参数编程模型的评测集要跟着换

一、跑分更高测不到真正改变的东西
有一款编程模型做了更新。据公开报道,它继续采用 12B 总参数、2.5B 活跃参数的混合专家结构,以宽松许可证开放,并把强化学习从短期收尾环节扩展到训练主体,训练数据里加入了数学、算法竞赛、工具调用和软件工程等任务;同一条报道还写明它可以探索代码库、编辑文件并检查执行结果。这里的参数量与许可证信息只是背景转述,不是本文的判断依据。本文要处理的是它牵出的一个工程问题:当改动落在训练主体、改变的是模型做事的过程时,我们手上那套以结果打分的评测,还能不能测到变化。
结果型基准掩盖问题有四条常见路径。其一是一题多解:同一道改bug的题,测试通过可以有正当路径,也可以是把断言改松、把用例注释掉、把范围收窄到只覆盖输入样例,结果记分上这几条完全一样。其二是蒙对:小参数模型在长输出里枚举候选,只要有一次通过就记为通过,过程里没有一个字是可靠证据。其三是靠背题:公开基准的题目在语料里出现的概率不低,答对不能区分”会做”和”见过”。其四是过程错但结果对:没有读相关就开始改、改完从不运行、报错了靠重新生成碰运气,这种轨迹在人类评审眼里是失败的,在结果记分板上是满分。
把这四条合并起来看,一个结论很清楚:训练目标里出现工具调用与软件工程任务以后,被改变的正是”过程”这一层,而结果型基准对这一层几乎不敏感。评测要跟着换,不是加几道题,是换测法。
二、过程型评测要断言的四类动作
我们把过程型评测收敛成四类动作,每一类都必须能从执行轨迹里取到事件,而不是从最终答案里推断。
第一类是探索。模型有没有真正看过这个仓库。可判定的形式是:任务开始前是否发生过列目录、按符号检索、读取入口文件这一类只读动作;检索词是否与任务描述里的实体相关;是否在缺少关键上下文时就发出了第一次写操作。探索这一步最容易伪装,因为模型可以调一次工具做个样子,所以断言要落在”检索结果是否被后续引用”上——它读过的文件路径,是否出现在它的推理与编辑位置选择里。
第二类是读取的充分性。改动一处通常要读接口定义、调用方、类型约定与相关测试。断言方式是给每道题维护一份”必要文件集合”,由出题人在建题时标注,评测时判断实际读取集合是否覆盖它。必要文件集合不要求全读,只要求覆盖关键定义与至少一处调用方。
第三类是编辑后的执行验证。这是训练里加了”检查执行结果”之后最该盯的一项。断言是:任何一次写操作之后,是否出现了与之相关的执行动作;执行的对象是否就是被改动的那部分;执行输出的返回码与错误文本是否被下一次动作引用。只在最后统一跑一次全量测试不算合格的验证习惯,因为它把定位能力丢掉了。
第四类是失败后的重试与回退。报错之后正确的做法是读错误、定位、做最小修改;常见的坏做法是原样重试、把整段重写、或者删除断言让它过。断言形式是:两次相同工具调用与相同参数的重复次数上限;回退是否发生在改动引入失败之后;被删除或被跳过的测试是否在终态里留下说明。凡是”修改测试文件让结果变好”的动作,一律记为独立事件供人工看。
这四类的记分要与结果记分并行呈现,不能合成一个数。合成之后又变回结果型评测。
三、把断言写成可判定的形式
让裁判模型自由心证是过程评测最常见的塌方方式:理由写得长,分数漂得厉害,两次跑还不一样。我们的做法是把每一条断言限定在四种可判定谓词上,裁判模型只负责抽取,不负责打分。
- 存在性:轨迹中是否出现过满足条件的事件,例如”写操作之前存在读取操作”。
- 覆盖性:实际读取集合是否覆盖必要文件集合;执行动作是否覆盖被改动模块。
- 次序性:事件对的先后关系,例如”最后一次编辑之后必须有一次执行”。
- 禁止性:绝对不允许的动作,例如删除测试断言、修改用例期望值、伪造执行结果。
事件来源要固定在同一份轨迹记录上,字段至少包含动作类型、目标对象、参数摘要、返回状态与时刻。轨迹本身是评测资产,格式变更要版本化,否则同一次改动会让历史断言全部失效。
| 断言类别 | 判定的事件来源 | 写法示例 | 常见误判 |
|---|---|---|---|
| 探索 | 只读工具调用与其参数 | 首次写前存在文件读取且路径被引用 | 调一次列目录就算探索 |
| 读取充分性 | 读取路径集合 | 覆盖标注的必要文件集合 | 读了很多无关文件算通过 |
| 执行验证 | 执行调用与返回状态 | 末次编辑之后存在针对该模块的执行 | 全量测试一次算逐处验证 |
| 重试与回退 | 重复调用计数与顺序 | 同参数重复次数在上限内 | 原样重试被当作修复 |
出题成本是这件事绕不开的部分。一条经验是把题目分成两档:高价值题配完整标注(必要文件集合、禁止动作、终态判据),走全部四类断言;长尾题只标必要文件集合和禁止动作,靠自动化检查跑。全量标注撑不住,就会被悄悄退回结果打分。
四、小参数与混合专家:显存账要单独测
据公开报道的这组数字里,值得单独拎出来的是”总参数与活跃参数不同量级”这一结构。对部署来说,总参数决定权重是否装得进显存、要不要 offload、加载与切换的代价;活跃参数决定每个 token 实际算多少,直接影响吞吐与并发上限。这两个量分开以后,评测就不能只报一个”能不能跑”,要分开看权重驻留方式、上下文长度、并发数与工具往返次数这四者的组合。我们内部的口径是:同一份评测在候选部署配置上至少跑一次完整链路,因为工具调用型任务里上下文会被检索结果反复撑大,评测通过的配置未必是线上可用的配置。
混合专家还多出一个不稳定源:路由。同题多次运行时,命中的专家可能不同,输出风格与工具选择也会跟着漂。测法是固定输入做重复采样,看三件事:专家命中的一致程度、路由在低置信样本上的比例、以及换硬件换批量后路由是否漂移。路由漂移意味着一次评测的方差里混进了非模型能力的成分,报告时要把重复运行的离散程度和均值一起给出来。这一节只是提醒口径,不重复展开显存计算本身。
五、许可证与部署责任,以及工具调用格式的回归
宽松许可证落到交付上有三个不同的落点:权重文件的使用与再分发、商标与署名的约束、商用与服务化条款的边界。三者的责任主体不同,法务确认要走这三条线分别确认,不能笼统写成”许可证宽松所以可用”。本地部署以后,更新通道从厂商侧转移到了我们自己手上:模型文件来源校验、完整性核验、版本留档、上一版权重的保留期,都是交付清单里的条目,任何一项缺失都会在出问题时变成说不清。
工具调用能力还带来一类专有的回归风险。训练主体里加了工具调用数据,意味着调用格式是学来的,一次改动可能让原有的调用格式约定失效:参数类型漂移、必填字段被省略、结束标记位置改变、并行调用被拆成串行。应对方式是建一套最小工具集回归:把工具模式做快照,逐字段断言可解析性与必填项覆盖,把并行调用、空参数、超长参数这三类边界固定成必测项。这套回归要跑得比评测集更频繁,它是发布门禁,不是季度报表。
六、私有评测集怎么换题,怎么防污染
公开榜单的题目一旦被模型见过,就失去分辨力。私有评测集的价值来自三件事:题目新、题目不在公开语料里、题目会换。我们的规则是按季度换题,且新题优先取自真实交付里出现过的问题形态——脱敏后的仓库、真实的需求描述、真实的失败轨迹。这类题不会被榜单收录,也更能反映工具调用型任务的实际形状。
- 题目池分三份:校准集用来定标与断言调试,回归集锁版本不允许改动,留档集只用于事后对比。
- 回归集一旦冻结,题目、标注、判据三者一起冻结,改动就等于换测法,必须走变更评审。
- 泄漏检测靠题干指纹与稀有标识探针:在题目里嵌一个不参与解题的罕见串,看输出里是否出现原样片段。
- 换题时保留一段重叠期,新旧题并行跑,把分数变化拆成”题目难度变化”和”模型能力变化”两部分。
- 每题的断言与必要文件集合随题存档,出题人和评审人不同时签字不入集。
评测集自身也需要一份”生效记录”:本季度用了哪一版、哪些题被替换、替换理由、谁批准。没有这条记录,季度之间的分数差异只能靠猜。
对洹拓这边承接的模型评测与智能体交付来说,训练目标的变化最终都会转成验收条款的变化。结果分数当然还要看,但它只该占验收表里的一栏;探索是否真实、验证是否闭环、失败后如何回退,这三栏补上以后,一个声称把工具调用放进训练主体的模型才算是被测过。评测方法的改动比模型版本更值得写进合同附件,因为它决定了后面所有对比数据是否可比。