一场悄无声息的"工具瘦身":官方连改 6 个工具定义,每个调用省下 17%–44% token


你有没有算过一笔账:每次让 Hermes 调用一个工具,模型其实要先把“这个工具长什么样”从头读一遍——参数、格式、注意事项,全写在一份 JSON 定义里,跟着每个请求一起发出去。会话跑得越久、工具调得越频繁,这份“固定开销”就越可观。8 月 27 日到 28 日,官方连续合并了 6 个 PR,干的都是同一件事:给工具的 JSON 定义瘦身。process 从 306 token 降到 228(−25%),todo 从 323 降到 232(−28%),read_file 从 426 降到 244–269,skill_manage 从 517 降到 427(−17%),video_generate 从约 814 降到 458/377,browser_exec 从 803 降到 663(−17%)——而所有工具的行为一点没变

为什么工具定义值得减肥

先建立一个直观模型。Hermes 调用工具时,请求里必须包含该工具的 JSON schema:description(干什么用)、parameters(每个参数叫什么、什么类型、有什么限制)、枚举值、注意事项。这份定义每个请求都要完整带上——它不是一次性的,而是跟着你的每一轮对话反复发送。

如果工具 A 的定义占 300 token,你在一个会话里调用它 50 次,光这份定义就烧掉 15,000 token。Hermes 有几十个内置工具,其中几个大块头的定义(比如 browser_exec 的 800+ token)就是潜藏在每轮请求里的“隐形税”。官方这次动的正是这些税源——而且是在一个代号 #95681 的 campaign(战役)下系统性推进的。

减肥的原则:每条知识只教一次

这波改动的核心思路可以用一句话概括:删除重复教学,保留真正会踩的坑。拆开看:

1. 枚举即动词表(#97279 process,306→228,−25%)

process 工具的描述里原本把 8 个动作(list、kill、submit……)逐一重述了一遍,每个动词还配一句解释。现在:显而易见的动词(list、kill)一个字都不写,机械性的操作各留一句话;真正容易踩的坑反而加粗强调了——比如 write-vs-submit 的区别:“submit 会追加回车(用于回答程序提问);write 发送原始字节、不带换行。在 Windows PTY 上,单独的 \n 不是行终止符,prompt 会永远等不到响应。”

2. 参数 schema 已经教过的事,描述里不再重复(#97257 todo,323→232,−28%)

todo 工具的 description 原本把 items 的结构({id, content, status})用文字又写了一遍——四行之下就是同样的 JSON schema。删掉文字重复,让 schema 成为唯一结构来源;merge 语义、必须列全所有条目的规则、一次只能有一个 in_progress、完成必须是“已验证”而非“打算做”——这些“承重墙”全部保留,一个不少。

3. 能力按需展示(#97195 read_file,426→244–269;#97095 video_generate,~814→458/377)

read_file 的格式列表改为按能力动态生成:你的安装里有没有 anydoc 扩展,决定了描述里展示哪些格式;没装的格式直接不宣传,报错时再教你怎么装。video_generate 更彻底:以前 10 个静态参数对所有会话全量展示,其中四个还自带“此参数会被某些供应商忽略”的道歉式说明——现在只展示当前后端真正支持的参数,negative_promptaudioseedupscale 这些仅在对应后端声明支持时才出现。

4. 跨工具去重(#97152 skill_manage,517→427,−17%)

skill_manage 的 patch 机制和 patch 工具用的是同一套模糊匹配语义(唯一性、上下文、must-differ),以前各教一遍。现在 skill_manage 直接说“与 patch 工具相同的匹配语义”,只保留技能专属的事实(空 new_string = 删除)。顺带修了一个真实歧义:file_path 现在明确是“相对技能目录的路径,如 references/api.md,不带前导斜杠”。

5. 用数据说话(#96300 browser_exec,803→663,−17%)

此前 browser_exec 的 schema 减肥还做了 A/B 验证:减肥后的 schema 在准确率与原来持平(accuracy parity),但每调用省 140 token。

为什么这件事对你重要

  • 省钱:省的是每次调用的固定开销,会话越长、工具调用越频繁,省得越多;
  • 更稳:schema 越小,模型理解成本越低,参数拼错的概率越小;
  • 无感升级:所有改动“零行为变化”,测试里用契约测试钉死了每一条保留的教学内容——不会出现“升级后工具变笨了”。

注意:这批改动 8 月 27–28 日合并,目前在上游 main 上,尚未进入发布 tag。hermes update 到包含这些改动的版本后自动生效,你什么都不用配。

延伸阅读