OpenClaw 省 Token 實操手冊:八個維度,節省 60–90%
整理版優先睇
OpenClaw省Token實操:八個維度幫你節省60-90%,從模型分級到Heartbeat Bug繞過全面降低API成本
呢篇文章係由技術博主嬌姐整理,基於OpenClaw官方文檔同GitHub多個Issue(#21999、#23254等)同埋多位工程師嘅實測經驗。文章主要係針對OpenClaw用戶常見嘅Token費用過高問題,提供八個維度嘅優化方法。
整體結論係,大部分Token浪費喺系統提示注入同歷史對話累積,而唔係實際工作,最高可以優化93.5%嘅開支。作者建議先搞清楚錢燒喺邊,再對症下藥,並提供優先級速查表,幫你按部就班慳錢。
文章涵蓋模型分級、配置文件瘦身、Skills精簡、會話管理、Heartbeat/Cron改造、多Agent分級配置、Prompt Cache最大化同工具調用控制,每個維度都有具體配置範例同操作步驟。重點係繞過Heartbeat嘅模型覆蓋Bug,改用隔離Cron加便宜模型,可以即時慳50-80%。
- 大部分Token花費喺系統提示同歷史上下文,而非實際工作,運用文章方法可節省60-90%。
- 模型分級係最高槓桿:將簡單任務用Haiku或Gemini Flash代替Opus,可節省60-80%費用。
- Heartbeat存在Bug:heartbeat.model設定無效,實際使用主模型,必須改用隔離Cron繞過。
- Prompt Cache最大化:保持配置文件前綴穩定並開啟cacheControlTtl,後續調用只需約10%費用。
- 即時行動:關閉原生Heartbeat、按Agent類型分級配置、每日重置會話,雙保險防止歷史膨脹。
理解成本結構同模型分級
每次API調用嘅成本唔止你講嘅說話,大部分錢係燒喺系統提示、工具列表同歷史上下文。GitHub Issue #21999拆解咗一份150k+ Token嘅系統提示,證實浪費咗93.5%嘅Token預算。
- 1 Claude Opus (~$15/M Token):複雜深度推理先用,要刻意限制調用。
- 2 Claude Sonnet (~$3/M Token):代碼、寫作、日常推理,大多數Agent嘅主力。
- 3 Claude Haiku (~$0.6/M Token):簡單問答、格式化、狀態檢查,性價比之王。
- 4 Gemini 2.5 Flash (~$0.30/M Token):Heartbeat/Cron專用,每次調用成本極低。
模型分級係最高槓桿:將簡單任務用Haiku或Gemini Flash代替Opus,即時節省60-80%費用。
配置文件瘦身同Skills精簡
SOUL.md、AGENTS.md等文件每次調用全量注入,包括Heartbeat同Cron。目標係將SOUL.md壓縮到500 Token以內,AGENTS.md 800 Token以內,並把操作細節移到按需加載嘅Skills或者MEMORY.md。
- 移除唔常用嘅Skills,或者設定disable-model-invocation: true,等佢哋唔自動注入。
- 精簡Skill描述,只留觸發條件,詳細內容放SKILL.md body(Tier 2按需加載)。
- 合併TOKEN-RULES.md入AGENTS.md,減少文件數量,避免重複注入。
頻繁改配置文件會令Prompt Cache失效,變動內容應放memory/YYYY-MM-DD.md,核心文件保持穩定。
會話管理同Heartbeat改造
歷史對話累積可佔58%嘅上下文窗口,35條消息會話session文件可達2.9MB。要堵住呢個黑洞,需要雙管齊下。
- 執行/compact前先切換到Haiku模型,避免用Opus做壓縮浪費錢。
- 設定softThresholdTokens同session.reset.mode: daily,每日凌晨自動清零歷史。
- 大輸出任務用/subagents spawn隔離,中間輸出唔會污染主會話。
/compact前一定要先/model haiku,否則compact本身都會好貴。
多Agent分級配置同Prompt Cache
唔同Agent工作性質差好遠,全局一刀切係浪費。監控Agent只需要細窗口,開發Agent就需要大窗口。按類型分三檔配置。
- 1 監控類(sysmon/intel):Haiku + contextTokens 20000 + aggressive壓縮。
- 2 內容類(wechat-writer):Sonnet + contextTokens 40000 + safeguard壓縮。
- 3 開發類(agent-creator):Sonnet + contextTokens 100000 + safeguard壓縮。
{
"agents": {
"defaults": {
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 50000
},
"list": [
{ "id": "sysmon", "model": { "primary": "anthropic/claude-haiku-3.5" }, "contextTokens": 20000 },
{ "id": "wechat-writer", "model": { "primary": "anthropic/claude-sonnet-4-6" }, "contextTokens": 40000 },
{ "id": "agent-creator", "model": { "primary": "anthropic/claude-sonnet-4-6" }, "contextTokens": 100000 }
]
}
}
開啟cacheControlTtl: 1h,保持配置文件前綴穩定,後續調用只收約10%費用。
工具調用控制同消費保險
工具調用嘅併發數同大輸出會直接增加Token消耗。要控制成本,除咗限制maxConcurrent,仲要喺AGENTS.md加入工具調用原則。
- maxConcurrent設為1,subagents.maxConcurrent設為3,避免併發成本疊加。
- 讀取文件優先精確檢索,唔好讀曬成個文件。
- 多個獨立查詢任務合併成一次批量工具調用。
- 喺Anthropic控制枱設API Key每日消費上限,防止意外超支。
imageMaxDimensionPx設為800,可以喺截圖密集場景大量減少視覺Token。
先關注後閲讀,嬌姐怕失去上進嘅你
技術博主 Federico Viticci 一個月燒咗 180 萬 Token,帳單係 $3,600。GitHub Issue #23254 計得更細:一個默認配置嘅 Heartbeat,30 分鐘一次,每日 38 次 API 調用,每次 8,000–15,000 Token,淨係 Heartbeat 一項每日就要 $10–20。
一位工程師追蹤 API 日誌之後發現:90% 嘅 Token 花費同實際叫 Agent 做嘅工作冇關係。三個配置改動,每週帳單由 $50 壓到唔夠 $10。
呢篇文章係基於官方文檔、GitHub Issue #21999 / #22133 / #23254 / #30983 / #9742 / #30894 同埋多位工程師嘅實測整理。每個技巧都有標註來源。
目錄
先搞清楚:錢燒喺邊度
維度一:模型分級
維度二:配置文件瘦身
維度三:Skills 精簡
維度四:會話管理
維度五:Heartbeat 和 Cron(含 Bug 警告)
維度六:多 Agent 體系的分級配置
維度七:Prompt Cache 最大化
維度八:工具調用與併發控制
消費保險 + 優先級速查表
先搞清楚:每次 API 調用你係為咩付錢
Token 消耗 ≠ 你講嘅說話 + AI 回嘅說話。GitHub Issue #21999(一份 150k+ Token 系統提示嘅完整拆解)畀咗呢張成本圖:
| 配置文件注入(SOUL / AGENTS / USER / TOOLS + Skills 描述列表) | 最高優先級 | |
Issue #9157 嘅總結一針見血:"浪費咗 93.5% 嘅 Token 預算"——大部分錢花喺上下文注入同歷史積累上,唔喺實際工作上。
先用呢幾條命令睇清楚自己嘅情況,再針對性優化:
/status # 當前會話 Token 消耗和費用估算
/usage full # 每次回覆後顯示消耗明細
/context detail # 查各注入文件各佔多少 Token
# 查看 session 文件大小,超過 500KB 需要警惕
du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h維度一:模型分級 — 槓桿最高,立竿見影
Haiku 約係 Sonnet 嘅 1/5 價格,約係 Opus 嘅 1/25。用 Opus 回答"今日日曆上有咩",係喺用外科手術刀切菜。
| Claude Haiku | ||
| Gemini 2.5 Flash | ||
| DeepSeek V4 |
{
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-sonnet-4-6", // 日常默認主力
"fallbacks": ["anthropic/claude-haiku-3.5"]
},
"subagents": {
"model": "anthropic/claude-haiku-3.5" // 子 Agent 自動用便宜模型
}
}
}
}會話中途隨時切換,唔使重啓:
/model anthropic/claude-haiku-3.5 # 切到便宜模型
/model anthropic/claude-opus-4-6 # 切到旗艦兩個特殊陷阱:
Gemini 2.5 Pro 係已知嘅 Token 黑洞,幾十次調用燒咗 190 萬 Token,務必用 Flash 替代。
Thinking / Reasoning 模式消耗暴增 10–50 倍,喺 config 裏面明確關閉:"thinking": {"type": "disabled"}
維度二:配置文件瘦身 — 每次調用都喺度慳
SOUL.md、AGENTS.md、USER.md、TOOLS.md 喺每次 API 調用時全量注入,包括每次 Heartbeat 同 Cron。MEMORY.md 只喺主會話加載,memory/ 子目錄嘅日期文件通過 memory 工具顯式調用先加載——呢兩類比較慳,優先往嗰度寫。
一個容易踩嘅坑:TOKEN-RULES.md 本身都喺度消耗 Token。如果你為每個 Agent 創建咗獨立嘅 TOKEN-RULES.md 放喺 workspace 根目錄下,佢會同 SOUL.md 一齊每次注入。建議將規則內容直接合併入 AGENTS.md——少一個文件,少一次文件元數據注入。或者用 $include 引用一份全局共享規則,七個 Agent 嘅共同規則只維護一份(官方文檔支持 $include),各 Agent 嘅本地文件只保留差異部分。
頻繁改配置文件會令 Prompt Cache 反覆失效。每次改動之後第一次調用要重新按全價寫入緩存。將頻繁變動嘅內容放進 memory/YYYY-MM-DD.md,核心配置文件保持少改。
# 讓 OpenClaw 自己分析並執行優化
分析我當前的配置文件,找出哪些內容可以提取成按需加載的 Skill,
估算優化後能節省多少 Token,然後幫我執行維度三:Skills 精簡 — 隱性成本,好多人唔知道
官方 Skills 文檔畀咗精確公式:每個 Skill 每次調用嘅固定注入 = 97 字符 + 名稱同描述嘅長度(字符數除以 4 約等於 Token 數)。一個描述 200 字符嘅 Skill,每次注入約 75 Token。好消息係 Skill 嘅完整指令內容只有 Agent 決定使用佢時先加載(Tier 2),每次都注入嘅只係描述摘要(Tier 1)。
10 個 Skill 嘅描述注入約 400–500 Token,每日 100 次 Opus 調用 = 每月額外 $180。三個優化方法:
方法一:只保留真正常用嘅 Skills,移除唔常用嘅。唔係每個可以用到嘅 Skill 都要掛喺 Agent 上,按需手動調用一樣生效。
方法二:用 disable-model-invocation 令 Skill 徹底唔注入系統提示。官方支持呢個字段,設為 true 之後 Skill 從系統提示裏面消失,只能通過用戶手動調用:
---
name: my-heavy-skill
description: 這個 skill 很少用,不要自動注入
disable-model-invocation: true
---方法三:精簡 Skill 嘅描述字段。描述只寫觸發條件,完整說明放喺 SKILL.md body 裏面——body 係 Tier 2,按需加載,唔影響基礎成本。
維度四:會話管理 — 堵住歷史積累嘅黑洞
35 條消息嘅會話,session 文件已達 2.9MB(GitHub Issue #21999 實測)。歷史積累最終可佔 58% 嘅上下文窗口,每次調用都喺度拖住呢個包袱。
/compact 前先切便宜模型
/compact 本身係一次完整 API 調用,用當前會話嘅模型做總結。用 Opus 嘅話 compact 本身就好貴。正確做法:
/model anthropic/claude-haiku-3.5 # 先切便宜模型
/compact # 用便宜模型做總結
/model anthropic/claude-sonnet-4-6 # 再切回主力softThresholdTokens + 每日重置:雙保險
softThresholdTokens 係被動防禦(達到閾值時寫 memory 再刷新),每日重置係主動清零,兩個一齊用先穩:
{
"session": {
"softThresholdTokens": 40000,
"flushPrompt": "記錄關鍵決策、狀態變更和教訓,跳過日常例行對話。若沒有值得記錄的內容,回覆 NO_FLUSH。",
"reset": {
"mode": "daily",
"atHour": 4, // 凌晨 4 點自動重置,不影響白天使用
"idleMinutes": 120 // 或者閒置 2 小時後重置
}
}
}大輸出任務用子 Agent 隔離
子 Agent 嘅中間輸出唔會進入主會話歷史,只有最終結論返回。同時子 Agent 自動使用 promptMode: "minimal",唔注入 Skills 同 Docs 區塊,本身就比主會話慳:
/subagents spawn main "掃描 ~/projects,列出超過 100MB 的文件"
/subagents spawn main "總結過去 24 小時 Discord 消息,給我關鍵要點"直接清理膨脹嘅 session 文件
du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h
rm ~/.openclaw/agents/main/sessions/main.jsonl # 清理主會話(不影響配置文件裏的長期記憶)維度五:Heartbeat 和 Cron — 含一個正在坑人嘅 Bug
Bug 警告(Issue #9742 / #13009 / #14279 / #21144 / #30894,跨越成個 2026 年 2–3 月):
heartbeat.model覆蓋喺當前版本不可靠——Heartbeat 實際運行時會忽略呢個字段,使用agents.defaults.model嘅主模型。你以為喺用 Haiku,實際冇。Issue #30894 嘅結論:繞過方案係將 Heartbeat 邏輯移到 Cron + isolated session,Cron 嘅 model override 係正常嘅。
除咗 Bug,原生 Heartbeat 仲有兩個問題:實際觸發頻率比設置值高(設咗 30 分鐘,觀測到 10–20 秒觸發一次),每次攜帶全部會話上下文(170k–210k Token/次係真實觀測值)。
推薦方案:熄咗原生 Heartbeat,改用隔離 Cron
// 第一步:關掉原生 Heartbeat
{
"agents": {
"defaults": {
"heartbeat": { "every": "0m" }
}
}
}
// 第二步:改用隔離會話 + 便宜模型的 Cron 替代
openclaw cron add --every 55m --session isolated \
--model google/gemini-2.5-flash-preview \
"讀取 HEARTBEAT.md;若一切正常回復 HEARTBEAT_OK,發現異常才通知我"Cron 嘅 sessionRetention — 磁盤清理嘅小事都唔好忘記
每次 isolated 會話結束之後文件默認保留,多個 Agent 跑時間長咗會積累大量廢棄文件拖慢 Gateway。加上呢兩行:
{
"cron": {
"sessionRetention": "24h", // 自動清理 24 小時前的 Cron session 文件
"runLog": { "maxBytes": "2mb", "keepLines": 2000 } // 限制日誌大小
}
}多任務合併成一次 Cron 調用。5 個獨立檢查任務變 1 次批量調用,節省 75% 嘅上下文注入成本——工作量冇變,API 調用次數變少咗。
維度六:多 Agent 體系嘅分級配置 — 一刀切係浪費
如果你有多個 Agent,agents.defaults 嘅全局配置係底線,唔係終點。唔同 Agent 嘅工作性質差好大:sysmon 只需要睇 10 條日誌,agent-creator 喺寫代碼時需要更大窗口,wechat-writer 需要保留更多寫作上下文。全局 contextTokens: 50000 對監控類 Agent 係浪費,對開發類 Agent 又唔夠用。
官方文檔確認 model、contextTokens、compaction 都可以喺 agents.list[] 級別單獨覆蓋。按 Agent 類型分三檔:
{
"agents": {
"defaults": {
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 50000
},
"list": [
// 監控類:最便宜,窗口最小,激進壓縮
{
"id": "sysmon",
"model": { "primary": "anthropic/claude-haiku-3.5" },
"contextTokens": 20000,
"compaction": { "mode": "aggressive" }
},
{
"id": "intel",
"model": { "primary": "anthropic/claude-haiku-3.5" },
"contextTokens": 30000,
"compaction": { "mode": "aggressive" }
},
// 內容類:Sonnet,保守壓縮(不能隨意丟失寫作上下文)
{
"id": "wechat-writer",
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 40000,
"compaction": { "mode": "safeguard" }
},
// 開發類:需要更大窗口(代碼上下文)
{
"id": "agent-creator",
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 100000,
"compaction": { "mode": "safeguard" }
}
]
}
}compaction.mode 說明:aggressive 更激進咁丟棄歷史細節,適合監控類呢種"結論重要、過程唔重要"嘅 Agent;safeguard 更保守,適合寫作同開發呢種"上下文連貫性好重要"嘅 Agent。
維度七:Prompt Cache 最大化 — 將固定成本變折扣
配置文件內容被緩存之後,後續調用只收約 10% 費用讀取緩存。關鍵係保持配置文件前綴穩定——"每條消息裏面嘅元數據注入會破壞穩定性"(Issue #21999)。
{
"agents": {
"defaults": {
"models": {
"anthropic/claude-sonnet-4-6": {
"params": { "cacheControlTtl": "1h" } // 啓用 1 小時長窗口緩存
}
},
"contextPruning": {
"mode": "cache-ttl", // TTL 到期時先剪枝再重緩存
"ttl": "1h"
}
}
}
}如果保留咗原生 Heartbeat(等 Bug 修復之後),將間隔設為略小於 TTL 嘅值,可以保持緩存熱度避免冷啓動費用——55m Heartbeat 刷新 1h 緩存,緩存唔會到期失效。
維度八:工具調用與併發控制
{
"agents": {
"defaults": {
"contextTokens": 50000, // 全局底線,各 Agent 可單獨覆蓋
"imageMaxDimensionPx": 800, // 截圖密集場景降低視覺 Token
"maxConcurrent": 1, // 日常用 1,併發請求 = 併發倍的注入成本
"subagents": { "maxConcurrent": 3 }
}
}
}將呢幾條寫入 AGENTS.md(或合併入嚟嘅 TOKEN-RULES 內容):
## 工具調用成本控制
- 讀取文件前優先使用精確檢索,不讀整個文件
- 多個獨立查詢任務合併成一次批量工具調用
- 目錄掃描、日誌彙總等大輸出任務用 /subagents spawn 隔離額外一項:消費保險,杜絕意外失控
"subagents": {"maxConcurrent": 3} | |
寫喺最後
你已經做咗全局配置優化同每個 Agent 嘅 TOKEN-RULES,呢個係正確嘅基礎。未做嘅三件事按優先級排:
第一,將所有 Heartbeat 換成 Cron——heartbeat.model 嘅 Bug 意味着你以為喺度慳錢但實際冇,呢個係而家最緊急嘅一件事。
第二,畀每個 Agent 配獨立嘅 model 同 contextTokens——sysmon 用 Haiku + 20k,agent-creator 用 Sonnet + 100k,唔好全部用全局嘅 50k。
第三,加 session.reset.mode: "daily",同已有嘅 softThresholdTokens 形成雙保險,每日凌晨自動清零歷史。
其他嘅優化都係喺呢三個基礎上嘅遞進,按需疊加即可。
先關注後閲讀,嬌姐怕失去上進的你
技術博主 Federico Viticci 一個月燒掉 180 萬 Token,賬單 $3,600。GitHub Issue #23254 算得更細:一個默認配置的 Heartbeat,30 分鐘一次,每天 38 次 API 調用,每次 8,000–15,000 Token,光 Heartbeat 一項每天就要 $10–20。
一位工程師追蹤 API 日誌後發現:90% 的 Token 花銷與實際讓 Agent 做的工作沒有關係。三個配置改動,每週賬單從 $50 壓到不到 $10。
這篇文章基於官方文檔、GitHub Issue #21999 / #22133 / #23254 / #30983 / #9742 / #30894 以及多位工程師的實測整理。每個技巧都標註來源。
目錄
先搞清楚:錢燒在哪裏
維度一:模型分級
維度二:配置文件瘦身
維度三:Skills 精簡
維度四:會話管理
維度五:Heartbeat 和 Cron(含 Bug 警告)
維度六:多 Agent 體系的分級配置
維度七:Prompt Cache 最大化
維度八:工具調用與併發控制
消費保險 + 優先級速查表
先搞清楚:每次 API 調用你在為什麼付錢
Token 消耗 ≠ 你說的話 + AI 回的話。GitHub Issue #21999(一份 150k+ Token 系統提示的完整拆解)給出了這張成本圖:
| 配置文件注入(SOUL / AGENTS / USER / TOOLS + Skills 描述列表) | 最高優先級 | |
Issue #9157 的總結一針見血:"浪費了 93.5% 的 Token 預算"——大部分錢花在上下文注入和歷史積累上,不在實際工作上。
先用這幾條命令看清楚自己的情況,再針對性優化:
/status # 當前會話 Token 消耗和費用估算
/usage full # 每次回覆後顯示消耗明細
/context detail # 查各注入文件各佔多少 Token
# 查看 session 文件大小,超過 500KB 需要警惕
du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h維度一:模型分級 — 槓桿最高,立竿見影
Haiku 約是 Sonnet 的 1/5 價格,約是 Opus 的 1/25。用 Opus 回答"今天日曆上有什麼",是在用外科手術刀切菜。
| Claude Haiku | ||
| Gemini 2.5 Flash | ||
| DeepSeek V4 |
{
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-sonnet-4-6", // 日常默認主力
"fallbacks": ["anthropic/claude-haiku-3.5"]
},
"subagents": {
"model": "anthropic/claude-haiku-3.5" // 子 Agent 自動用便宜模型
}
}
}
}會話中途隨時切換,不需要重啓:
/model anthropic/claude-haiku-3.5 # 切到便宜模型
/model anthropic/claude-opus-4-6 # 切到旗艦兩個特殊陷阱:
Gemini 2.5 Pro 是已知的 Token 黑洞,幾十次調用燒掉 190 萬 Token,務必用 Flash 替代。
Thinking / Reasoning 模式消耗暴增 10–50 倍,在 config 裏明確關閉:"thinking": {"type": "disabled"}
維度二:配置文件瘦身 — 每次調用都在省
SOUL.md、AGENTS.md、USER.md、TOOLS.md 在每次 API 調用時全量注入,包括每次 Heartbeat 和 Cron。MEMORY.md 只在主會話加載,memory/ 子目錄的日期文件通過 memory 工具顯式調用才加載——這兩類比較省,優先往那裏寫。
一個容易踩的坑:TOKEN-RULES.md 本身也在消耗 Token。如果你為每個 Agent 創建了獨立的 TOKEN-RULES.md 放在 workspace 根目錄下,它會和 SOUL.md 一起每次注入。建議把規則內容直接合並進 AGENTS.md——少一個文件,少一次文件元數據注入。或者用 $include 引用一份全局共享規則,七個 Agent 的共同規則只維護一份(官方文檔支持 $include),各 Agent 的本地文件只保留差異部分。
頻繁改配置文件會讓 Prompt Cache 反覆失效。每次改動後第一次調用要重新按全價寫入緩存。把頻繁變動的內容放進 memory/YYYY-MM-DD.md,核心配置文件保持少改。
# 讓 OpenClaw 自己分析並執行優化
分析我當前的配置文件,找出哪些內容可以提取成按需加載的 Skill,
估算優化後能節省多少 Token,然後幫我執行維度三:Skills 精簡 — 隱性成本,很多人不知道
官方 Skills 文檔給出了精確公式:每個 Skill 每次調用的固定注入 = 97 字符 + 名稱和描述的長度(字符數除以 4 約等於 Token 數)。一個描述 200 字符的 Skill,每次注入約 75 Token。好消息是 Skill 的完整指令內容只有 Agent 決定使用它時才加載(Tier 2),每次都注入的只是描述摘要(Tier 1)。
10 個 Skill 的描述注入約 400–500 Token,每天 100 次 Opus 調用 = 每月額外 $180。三個優化方法:
方法一:只保留真正常用的 Skills,移除不常用的。不是每個能用上的 Skill 都要掛在 Agent 上,按需手動調用一樣生效。
方法二:用 disable-model-invocation 讓 Skill 徹底不注入系統提示。官方支持這個字段,設為 true 後 Skill 從系統提示裏消失,只能通過用戶手動調用:
---
name: my-heavy-skill
description: 這個 skill 很少用,不要自動注入
disable-model-invocation: true
---方法三:精簡 Skill 的描述字段。描述只寫觸發條件,完整說明放在 SKILL.md body 裏——body 是 Tier 2,按需加載,不影響基礎成本。
維度四:會話管理 — 堵住歷史積累的黑洞
35 條消息的會話,session 文件已達 2.9MB(GitHub Issue #21999 實測)。歷史積累最終可佔 58% 的上下文窗口,每次調用都在拖着這個包袱。
/compact 前先切便宜模型
/compact 本身是一次完整 API 調用,用當前會話的模型做總結。用 Opus 的話 compact 本身就很貴。正確做法:
/model anthropic/claude-haiku-3.5 # 先切便宜模型
/compact # 用便宜模型做總結
/model anthropic/claude-sonnet-4-6 # 再切回主力softThresholdTokens + 每日重置:雙保險
softThresholdTokens 是被動防禦(達到閾值時寫 memory 再刷新),每日重置是主動清零,兩個一起用才穩:
{
"session": {
"softThresholdTokens": 40000,
"flushPrompt": "記錄關鍵決策、狀態變更和教訓,跳過日常例行對話。若沒有值得記錄的內容,回覆 NO_FLUSH。",
"reset": {
"mode": "daily",
"atHour": 4, // 凌晨 4 點自動重置,不影響白天使用
"idleMinutes": 120 // 或者閒置 2 小時後重置
}
}
}大輸出任務用子 Agent 隔離
子 Agent 的中間輸出不會進入主會話歷史,只有最終結論返回。同時子 Agent 自動使用 promptMode: "minimal",不注入 Skills 和 Docs 區塊,本身就比主會話省:
/subagents spawn main "掃描 ~/projects,列出超過 100MB 的文件"
/subagents spawn main "總結過去 24 小時 Discord 消息,給我關鍵要點"直接清理膨脹的 session 文件
du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h
rm ~/.openclaw/agents/main/sessions/main.jsonl # 清理主會話(不影響配置文件裏的長期記憶)維度五:Heartbeat 和 Cron — 含一個正在坑人的 Bug
Bug 警告(Issue #9742 / #13009 / #14279 / #21144 / #30894,跨越整個 2026 年 2–3 月):
heartbeat.model覆蓋在當前版本不可靠——Heartbeat 實際運行時會忽略這個字段,使用agents.defaults.model的主模型。你以為在用 Haiku,實際沒有。Issue #30894 的結論:繞過方案是把 Heartbeat 邏輯移到 Cron + isolated session,Cron 的 model override 是正常的。
除了 Bug,原生 Heartbeat 還有兩個問題:實際觸發頻率比設置值高(設了 30 分鐘,觀測到 10–20 秒觸發一次),每次攜帶全部會話上下文(170k–210k Token/次是真實觀測值)。
推薦方案:關掉原生 Heartbeat,改用隔離 Cron
// 第一步:關掉原生 Heartbeat
{
"agents": {
"defaults": {
"heartbeat": { "every": "0m" }
}
}
}
// 第二步:改用隔離會話 + 便宜模型的 Cron 替代
openclaw cron add --every 55m --session isolated \
--model google/gemini-2.5-flash-preview \
"讀取 HEARTBEAT.md;若一切正常回復 HEARTBEAT_OK,發現異常才通知我"Cron 的 sessionRetention — 磁盤清理的小事也別忘
每次 isolated 會話結束後文件默認保留,多個 Agent 跑時間長了會積累大量廢棄文件拖慢 Gateway。加上這兩行:
{
"cron": {
"sessionRetention": "24h", // 自動清理 24 小時前的 Cron session 文件
"runLog": { "maxBytes": "2mb", "keepLines": 2000 } // 限制日誌大小
}
}多任務合併成一次 Cron 調用。5 個獨立檢查任務變 1 次批量調用,節省 75% 的上下文注入成本——工作量沒變,API 調用次數變少了。
維度六:多 Agent 體系的分級配置 — 一刀切是浪費
如果你有多個 Agent,agents.defaults 的全局配置是底線,不是終點。不同 Agent 的工作性質差很大:sysmon 只需要看 10 條日誌,agent-creator 在寫代碼時需要更大窗口,wechat-writer 需要保留更多寫作上下文。全局 contextTokens: 50000 對監控類 Agent 是浪費,對開發類 Agent 又不夠用。
官方文檔確認 model、contextTokens、compaction 都可以在 agents.list[] 級別單獨覆蓋。按 Agent 類型分三檔:
{
"agents": {
"defaults": {
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 50000
},
"list": [
// 監控類:最便宜,窗口最小,激進壓縮
{
"id": "sysmon",
"model": { "primary": "anthropic/claude-haiku-3.5" },
"contextTokens": 20000,
"compaction": { "mode": "aggressive" }
},
{
"id": "intel",
"model": { "primary": "anthropic/claude-haiku-3.5" },
"contextTokens": 30000,
"compaction": { "mode": "aggressive" }
},
// 內容類:Sonnet,保守壓縮(不能隨意丟失寫作上下文)
{
"id": "wechat-writer",
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 40000,
"compaction": { "mode": "safeguard" }
},
// 開發類:需要更大窗口(代碼上下文)
{
"id": "agent-creator",
"model": { "primary": "anthropic/claude-sonnet-4-6" },
"contextTokens": 100000,
"compaction": { "mode": "safeguard" }
}
]
}
}compaction.mode 說明:aggressive 更激進地丟棄歷史細節,適合監控類這種"結論重要、過程不重要"的 Agent;safeguard 更保守,適合寫作和開發這種"上下文連貫性很重要"的 Agent。
維度七:Prompt Cache 最大化 — 把固定成本變折扣
配置文件內容被緩存後,後續調用只收約 10% 費用讀取緩存。關鍵是保持配置文件前綴穩定——"每條消息裏的元數據注入會破壞穩定性"(Issue #21999)。
{
"agents": {
"defaults": {
"models": {
"anthropic/claude-sonnet-4-6": {
"params": { "cacheControlTtl": "1h" } // 啓用 1 小時長窗口緩存
}
},
"contextPruning": {
"mode": "cache-ttl", // TTL 到期時先剪枝再重緩存
"ttl": "1h"
}
}
}
}如果保留了原生 Heartbeat(等 Bug 修復後),把間隔設為略小於 TTL 的值,可以保持緩存熱度避免冷啓動費用——55m Heartbeat 刷新 1h 緩存,緩存不會到期失效。
維度八:工具調用與併發控制
{
"agents": {
"defaults": {
"contextTokens": 50000, // 全局底線,各 Agent 可單獨覆蓋
"imageMaxDimensionPx": 800, // 截圖密集場景降低視覺 Token
"maxConcurrent": 1, // 日常用 1,併發請求 = 併發倍的注入成本
"subagents": { "maxConcurrent": 3 }
}
}
}把這幾條寫進 AGENTS.md(或合併進來的 TOKEN-RULES 內容):
## 工具調用成本控制
- 讀取文件前優先使用精確檢索,不讀整個文件
- 多個獨立查詢任務合併成一次批量工具調用
- 目錄掃描、日誌彙總等大輸出任務用 /subagents spawn 隔離額外一項:消費保險,杜絕意外失控
"subagents": {"maxConcurrent": 3} | |
寫在最後
你已經做了全局配置優化和每個 Agent 的 TOKEN-RULES,這是對的基礎。還沒做的三件事按優先級排:
第一,把所有 Heartbeat 換成 Cron——heartbeat.model 的 Bug 意味着你以為在省錢但實際沒有,這是現在最緊急的一件事。
第二,給每個 Agent 配獨立的 model 和 contextTokens——sysmon 用 Haiku + 20k,agent-creator 用 Sonnet + 100k,不要全部用全局的 50k。
第三,加 session.reset.mode: "daily",和已有的 softThresholdTokens 形成雙保險,每天凌晨自動清零歷史。
其他的優化都是在這三個基礎上的遞進,按需疊加即可。
