iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
AI Engineering

打造具備記憶與執行能力的常駐 AI Agent:Hermes Agent × Gemini × MCP 的 Harness 設計系列 第 14 篇

【Day 14】工具 schema 的裁剪:停用一組工具實際省下多少

  • 分享至 

  • xImage
  •  

前天量出工具 schema 佔掉固定開銷的 63%,34,093 B、20 個工具。今天把它拆到可操作的層級:逐一停用 toolset,每停一組量一次,看數字怎麼動。以下依序釐清三個問題:開關是哪一個組態鍵、每一組停用之後省下多少、大量工具的成本由哪個機制承接。


開關的位置

hermes tools 有三個子指令與一個互動介面:

指令 行為
hermes tools list 列出所有工具與啟用狀態
hermes tools disable <名稱> 停用內建 toolset 或 MCP 工具
hermes tools enable <名稱> 啟用
hermes tools --summary 每個平台的啟用數摘要

兩種名稱格式各自對應一類工具:

  • 內建 toolset 用短名:web、memory、file
  • MCP 工具用 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 兩份完整目錄。


進入 schema 的只有其中 12 組

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%。

三種結果各自出現:

  • 工具數與 byte 同時下降:browser 與 delegation,各帶走一個完整的工具宣告
  • byte 下降、工具數維持:todo 省下 81 B,session_search 省下 102 B
  • 兩者都維持:computer_use、cronjob、image_gen、kanban 四組在這個平台上對 schema 的貢獻是 0

第二種結果的去處查得出來。停用前 (unknown) 那一組是 3 個工具、2,653 B,八次停用之後變成 3 個工具、2,470 B,少掉的 183 B 正好是 81 加 102。這兩個 toolset 的內容嵌在既有工具的參數裡,停用它們改寫的是那個工具的 schema 本身。


system prompt 全程維持同一個值

八次量測裡另外兩個欄位始終維持同一個值:

項目 八次量測的值
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 增減多少就是多少,系統提示那一側由別的機制決定


大量工具的成本由 Tool Search 承接

裁剪能處理的是十幾個工具的量級。接上多個 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 tokens
  • 絕對上限:listing_max_tokens 4,000 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 這個迴圈的形式化定義。


上一篇
【Day 13】Session 生命週期:壓縮的觸發點與狀態回復
下一篇
【Day 15】Agent Memory 的研究現況:write–manage–read 與三個維度
系列文
打造具備記憶與執行能力的常駐 AI Agent:Hermes Agent × Gemini × MCP 的 Harness 設計 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言