前天量出工具 schema 佔掉固定開銷的 63%,34,093 B、20 個工具。今天把它拆到可操作的層級:逐一停用 toolset,每停一組量一次,看數字怎麼動。以下依序釐清三個問題:開關是哪一個組態鍵、每一組停用之後省下多少、大量工具的成本由哪個機制承接。
hermes tools 有三個子指令與一個互動介面:
| 指令 | 行為 |
|---|---|
hermes tools list |
列出所有工具與啟用狀態 |
hermes tools disable <名稱> |
停用內建 toolset 或 MCP 工具 |
hermes tools enable <名稱> |
啟用 |
hermes tools --summary |
每個平台的啟用數摘要 |
兩種名稱格式各自對應一類工具:
web、memory、file
server:tool:github:create_issue 這種寫法這套組態目前的狀態是:
$ hermes tools --summary
CLI (17/27)
27 個 toolset 裡啟用 17 個。寫進檔案的是一份允許清單,config.yaml 的 platform_toolsets.cli 底下逐行列出這 17 個名字,另有 known_builtin_toolsets 與 known_plugin_toolsets 兩份完整目錄。
hermes prompt-size --json 的 toolsets_breakdown 是基準線:
| toolset | 工具數 | schema bytes |
|---|---|---|
| file | 4 | 5,404 |
| delegation | 1 | 3,751 |
| skills | 3 | 3,479 |
| terminal | 1 | 3,297 |
| memory | 1 | 3,178 |
| browser-use | 1 | 3,048 |
| code_execution | 1 | 2,955 |
| (unknown) | 3 | 2,653 |
| web | 2 | 1,910 |
| tts | 1 | 1,897 |
| clarify | 1 | 1,636 |
| vision | 1 | 845 |
十二列加總 34,053 B,報表的總數是 34,093 B,差額 40 B 是 JSON 陣列本身的括號與逗號。
17 個啟用的 toolset 對應 12 列明細,另有 3 個工具的歸屬標示為 (unknown)。
每停用一組就重跑一次 prompt-size --json,八次的結果:
| 停用的 toolset | 工具數 | schema bytes | 相對前一列 |
|---|---|---|---|
| (基準) | 20 | 34,093 | — |
| browser | 19 | 31,043 | -3,050 |
| computer_use | 19 | 31,043 | 0 |
| delegation | 18 | 27,290 | -3,753 |
| todo | 18 | 27,209 | -81 |
| cronjob | 18 | 27,209 | 0 |
| session_search | 18 | 27,107 | -102 |
| image_gen | 18 | 27,107 | 0 |
| kanban | 18 | 27,107 | 0 |
八組停完,工具數從 20 降到 18,schema 從 34,093 B 降到 27,107 B,省下 6,986 B,佔原本的 20.5%。
三種結果各自出現:
browser 與 delegation,各帶走一個完整的工具宣告todo 省下 81 B,session_search 省下 102 Bcomputer_use、cronjob、image_gen、kanban 四組在這個平台上對 schema 的貢獻是 0第二種結果的去處查得出來。停用前 (unknown) 那一組是 3 個工具、2,653 B,八次停用之後變成 3 個工具、2,470 B,少掉的 183 B 正好是 81 加 102。這兩個 toolset 的內容嵌在既有工具的參數裡,停用它們改寫的是那個工具的 schema 本身。
八次量測裡另外兩個欄位始終維持同一個值:
| 項目 | 八次量測的值 |
|---|---|
system_prompt.bytes |
20,012 |
skills_index.bytes |
5,076 |
停用 toolset 改動的範圍止於工具 schema,身分宣告、行為規則與技能索引全部維持原狀。前天的 --safe-mode 量測則同時動到兩邊,工具數 18、schema 31,720 B,system prompt 19,996 B,那個旗標改的是整套執行政策。
全部重新啟用之後,報表回到 20 個工具、34,093 B、17/27,與基準線完全相同。
工具是加減法,schema 增減多少就是多少,系統提示那一側由別的機制決定
裁剪能處理的是十幾個工具的量級。接上多個 MCP server 之後,工具數會跳到另一個量級,Hermes 對這種情況另有一套機制,hermes_cli/config_defaults.py 的 tools.tool_search 區段寫著它的設計:
當模型連上許多 MCP server 或非核心的 plugin 工具時,這些工具的 JSON schema 每一輪都會佔掉 context window 可觀的一部分。啟用之後,它們在模型看到的工具陣列裡被換成三個橋接工具,改為隨選揭露
三個橋接工具是 tool_search、tool_describe、tool_call。核心工具一律保持即時載入,註解逐一點名了 terminal、read_file、write_file、patch、search_files、todo、memory 與 browser_*。
揭露分三層,依目錄的大小決定用哪一層:
| 層級 | 條件 | 模型看到什麼 |
|---|---|---|
| Tier 0 | 可延後的 MCP 或 plugin 工具數為零 | 全部即時載入 |
| Tier 1 | 目錄清單放得進預算 | 橋接工具加上名稱與描述的清單 |
| Tier 2 | 只放名稱仍然超出預算 | 橋接工具加上每個 server 一行的摘要 |
註解為 Tier 2 舉的例子是 Cloudflare 那份約 3,300 個工具的扁平 API 介面。
預算的算法是兩個值取較低者:
threshold_pct 5%,131,072 × 5% = 6,553 tokenslisting_max_tokens 4,000 tokens這套組態目前在 Tier 0,hermes mcp list 回報的是 No MCP servers configured,20 個工具全部即時載入。模型主動查詢時,tool_search 每次預設回 5 筆,上限 25 筆。
原本預期每個 toolset 對應一組工具,停掉就整組消失。停用 todo 與 session_search 之後工具數維持 18,只有 byte 往下掉了 81 與 102,追到 (unknown) 那一組才對上,它們的內容嵌在別的工具的參數描述裡,停用改寫的是那個工具的 schema。
另外四組停掉之後兩個數字都維持原值,它們在 tools list 裡標著啟用,對模型看得到的那個工具陣列貢獻是 0。兩件事合起來指向同一點,tools list 呈現的是組態的狀態,prompt-size 呈現的是送進模型的內容。
裁掉工具之後模型選用工具的準確率怎麼變,這次沒有量,那需要在固定情境下重複呼叫並記錄每一次實際被呼叫的工具。
裁剪的效益量得出來,裁剪的代價要等到有人去量它
Agent Memory 在 2026 年的研究現況,以及 write–manage–read 這個迴圈的形式化定義。