開一個新 session,第一句話之前 context window 已經被佔掉一塊。這塊有多大、由哪幾項組成、哪一項裁掉最有效,要量過才知道。Hermes 有一個離線指令可以直接把它拆開,以下是量測方法與實際數字。
hermes prompt-size 報的是一個全新 session 的固定開銷,官方說明列出的欄位是 system prompt 總量、技能索引、記憶、使用者檔案與工具 schema JSON,並且明講離線執行,量測本身的配額用量為零。
它只有兩個旗標:
--platform:模擬 cli、telegram、discord 等通道--json:輸出可重複比對的結構化結果以下所有數字的量測條件如下,換一組條件數字就會不同:
gemini-3.5-flash-lite
報表的單位是 UTF-8 byte,hermes_cli/prompt_size.py 的 _bytes() 算的是 len(s.encode("utf-8")),指令輸出的只有這一種單位,而 context window 的上限以 token 計,token 數又取決於各家模型自己的 tokenizer,因此以下的 byte 數用於同一組條件之間的差分比較,不換算成剩餘的 token 額度。
在 cli 通道、專案目錄下執行的結果:
$ hermes prompt-size
Prompt-size breakdown (platform=cli, model=gemini-3.5-flash-lite)
System prompt total : 20,010 B (19.5 KB, 19,556 chars)
Major blocks:
skills index : 5,076 B (5.0 KB)
memory : 0 B (0.0 KB)
user profile : 0 B (0.0 KB)
Tool schemas : 34,093 B (33.3 KB, 20 tools)
兩大項相加是 54,103 B:
| 項目 | byte | 佔固定開銷 |
|---|---|---|
| 工具 schema | 34,093 | 63% |
| system prompt | 20,010 | 37% |
工具 schema 比整個 system prompt 還大七成。 要縮固定開銷,改 system prompt 的效益低於裁工具。
記憶與使用者檔案目前都是 0 B,這是空 profile 的狀態,兩者會隨使用增長。
同一份報表把 system prompt 依變動頻率拆開:
| 層 | 報表印的標籤 | byte |
|---|---|---|
| stable | 身分、行為指引、技能 | 11,748 |
| context | AGENTS.md 與執行目錄的檔案 | 1,902 |
| volatile | 記憶、使用者檔案、時間戳 | 6,356 |
技能索引 5,076 B 計在 volatile 這一層,佔 system prompt 總量的四分之一。hermes_cli/prompt_size.py 的註解寫明它從 stable 移了出來,理由是技能改動不要作廢已快取的身分前綴,stable 那一列的標籤保留了舊的歸屬。
工具 schema 依 toolset 拆開之後,數量與 byte 各自獨立:
| toolset | 工具數 | schema byte | 平均每個工具 |
|---|---|---|---|
| file | 4 | 5,404 | 1,351 |
| delegation | 1 | 3,751 | 3,751 |
| skills | 3 | 3,479 | 1,160 |
| terminal | 1 | 3,297 | 3,297 |
| memory | 1 | 3,178 | 3,178 |
| browser-use | 1 | 3,048 | 3,048 |
| code_execution | 1 | 2,955 | 2,955 |
| web | 2 | 1,910 | 955 |
| tts | 1 | 1,897 | 1,897 |
| clarify | 1 | 1,636 | 1,636 |
| vision | 1 | 845 | 845 |
工具的裁減效益由 schema 的 byte 決定
技能的常駐成本與它的完整內容差三個數量級:
| 技能 | SKILL.md 磁碟大小 |
索引常駐成本 |
|---|---|---|
| humanizer | 34,463 B | 65 B |
| claude-code | 34,281 B | 70 B |
| p5js | 27,534 B | 62 B |
| claude-design | 25,117 B | 78 B |
| hermes-agent-skill-authoring | 14,432 B | 93 B |
58 個技能全部索引進去共 5,076 B,平均每個約 87 B。完整的 SKILL.md 只有在模型判定該技能相關、真的要用時才會被讀進來。
掛技能與掛工具的成本結構不同。 技能是每個約 87 B 的常駐加上用到時才付的讀取成本,工具 schema 則是從第一個 token 就全額計入。
同一個 profile 換三種通道量測:
| 通道 | system prompt | stable | context | volatile | 工具 schema |
|---|---|---|---|---|---|
| cli | 20,010 | 11,748 | 1,902 | 6,356 | 34,093 |
| telegram | 16,478 | 10,115 | 0 | 6,361 | 34,093 |
| discord | 16,350 | 9,988 | 0 | 6,360 | 34,093 |
同樣是 cli 通道,換一個目錄執行:
| 執行目錄 | system prompt | 其中 context 層 |
|---|---|---|
| 專案目錄 | 20,010 | 1,902 |
| 空目錄 | 16,820 | 0 |
差距 3,190 B。那個專案目錄裡查無 AGENTS.md、CLAUDE.md 與 .cursorrules,這 1.9 KB 來自目錄本身的其他內容。
用來做決策的數字,只有在實際會執行的目錄下量才成立。 在空目錄量一次然後套用到所有情境,會低估將近兩成。
--ignore-rules 與 --safe-mode 各量一次,結果不對稱:
| 執行方式 | system prompt | 工具 schema | 工具數 |
|---|---|---|---|
| 一般執行 | 20,010 | 34,093 | 20 |
--ignore-rules |
20,010 | 34,093 | 20 |
--safe-mode |
19,996 | 31,720 | 18 |
--ignore-rules 之後報表的每一個數字維持原值,context 那一層仍然是 1,902 B--safe-mode 動到的主要是工具:web 這一組兩個工具整組消失,code_execution 的 schema 從 2,955 B 縮到 2,496 B,system prompt 只少了 14 B要確認 --ignore-rules 對執行期注入的抑制效果,要從實際執行的行為去看,這份報表的範圍止於固定開銷。
| 決策 | 量測前的預期 | 量測後 |
|---|---|---|
| 從哪裡省 context | 精簡 system prompt 與身分宣告 | 先裁工具,它佔 63% |
| 技能要不要少掛 | 掛太多會佔掉 context | 每個約 87 B,數十個技能的常駐成本約 5 KB |
| 通道要不要分別調整 | 不同通道成本差很多 | 差 3.6 KB,維護成本高於節省 |
固定開銷的量測結果直接決定裁減的順序,順序反了就是花力氣在 37% 的那一半
system prompt 是唯一看得到全文的那一份,身分宣告、行為規則、技能索引都寫在裡面,讀起來就很長,工具 schema 則是程式產生的 JSON,平常只會看到工具的名字。量出來是 34 KB 對 20 KB,看得見的那一份是小的那一個。
大的那一份還隨操作習慣成長,每接一個 MCP server 就多一批工具,參數描述寫得越詳細佔得越多,工具描述的品質與 context 的開銷互相拉扯。
佔最多的那一項,平常只以工具名稱的形式出現在眼前
Session 的生命週期、context 壓縮的觸發點,以及狀態怎麼回復。