工具调用打分并列,严格测试 6/6 对 0/6:关键词评测放水

Keyword Harnesses Fail Open: A Cheap Diagnostic Ladder for Tool-Use Claims in Small Language Models

Juan S. Santillana

cs.CL

2026-10-02

一对西语安全小模型工具分并列,严格测试发现 1B 从不调用工具;3.3 GPU 小时定向 SFT 修好了 6B token 没教会的能力。

这篇在解决什么

VectraYX 是一套面向离线部署的西语安全小模型,卖点是输出 <|toolcall|> 包裹的 JSON,交给 MCP(Model Context Protocol,工具调用标准接口)服务器执行。系列里两个兄弟模型共享解码器实现、32K tokenizer 和特殊 token 布局:600M(661.6M 参数)实际吃到的预训练混合约 65% 是代码与技术文本,没有专门 SFT,训练在 64% 进度处永久冻结;1B(1,109M 参数)走网页文本为主的多阶段课程,外加约 6B token 的工具 SFT。

自动评测说它们是双胞胎:B4(系列自动评测里的工具调用项,关键词匹配打分)0.660 对 0.650。真实行为毫无交集:600M 自发吐出格式合法的 bashexec 调用,1B 从未产出过那个 JSON 结构。打分器看到散文里出现工具名就记功,流利却不会调用的 1B 正好刷分。关键词 harness 是 fail open 的:出错时朝「通过」方向倒。这是该系列第二次记录同类评测失效。论文沿这条裂缝追到底:坐实假阳性、定位失败、修复、再定位修复落在网络哪里。

方法

核心是一套逐级加严的诊断阶梯,每级只要几分钟 CPU:

贪心解码去掉采样运气,训练态前向去掉 serving 栈的格式偏差,泛化判据分开背诵与能力。便宜和严格不冲突,这是全文的方法论主张。

结果

检查600M1B 修复前1B 修复后
B4 关键词分0.6600.650—
逐字复现(训练样例)6/6,参数泛化0/4–64/4,逐字复述
首 token 概率贪心首选10⁻⁴–10⁻⁵0.996–0.998
269 行语料合法率0.9260.1000.959
238 条新提示通过率0.4280.0000.536(p=0.004)

放大到全语料,修复 1B 的 0.959 里 0.988 是逐字背诵;600M 的 0.926 里逐字只占 0.235。换到 238 条含训练中从未出现的 CVE 号、IP、域名的提示,排序反转:修复 1B 以 0.536 对 0.428 胜出(配对 McNemar 检验 p=0.0039)。分轴看,600M 选工具更准(0.776 对 0.717)、参数结构更完整(0.855 对 0.819);修复 1B 赢在新实体抽取(0.667 对 0.560)和命令质量(soft miss 0.484 对 0.767,越低越好)。在自己语料上背诵,和在陌生提示上填槽,是两种能力,这组实验把它们拆开了。

轨迹探针(38 个 checkpoint)补上因果:1B 在 phase-2 的 36K 步还有 0.432 的先验,12,000 步(约 3.1B token)以散文为主的混合把它冲掉近 6 个数量级;6B token 的专门 SFT 没救回来,B4 记录历史最高分的 checkpoint 上,严格探针恰在谷底。

embedding 漂移检查否掉「死 embedding」假说:触发 token 那一行 cosine 0.999996,与 20 个随机普通 token 行无差别,97.7% 的 bf16 表逐位未变。原因是学习率 1e-5 下单步 Adam 更新约为中位权重一个 ulp 的十二分之一,低于舍回阈值,配方里「解冻 embedding」从未数值生效。修复发生在周围网络:中晚层学会把隐藏状态路由到一个本来就放对的方向,注意力量投影有可测位移。

两个模型都过触发。提到 CVE 或 shell 命令的纯概念问题上,600M 只有 0.09、修复 1B 只有 0.17 能忍住不调用。

为什么重要

对训练小模型做结构化输出的人,三条直接可用。报任何关键词打分的工具 benchmark 前,先跑严格结构检查,几分钟成本,fail closed。SFT 体量不预测结果:6B token 失败,3.3 GPU 小时成功,差三个数量级,变量是先诊断再配药。首 token 概率是近乎免费的训练遥测,全程打日志就能在烧 SFT 算力前发现先验缺失。这对兄弟还把代码为主的预训练构成和结构化输出默认涌现挂上钩,虽是自然实验。bf16 那条单独记一笔:名义解冻的张量可以数值静止,做权重分析要报变化条目占比,不能只看配置。

局限与存疑

论文自己列得很全:配对是自然实验不是消融,参数量、token 数、课程形状都没对齐(所有未对齐变量都朝着不利于结论的方向跑);修复是单一配方,原始 checkpoint 与父节点一同丢失,全部数字来自端到端复现;泛化电池自建,不含未见工具、不含连续多次调用;harness 数字全部单种子。修复只修了工具调用:问「什么是钓鱼攻击」,模型正确地不调用,但回答是空的。另有两点存疑:0.536 对 0.428 的差距建立在作者自己出的题上,模板与实体池都非外部采样;过触发严重到不可部署,near-miss 提示上错误触发率 0.91 与 0.78,离能用的安全助手还远。

术语

原文与代码

相关论文

全部论文解读