運作方式
- 較舊的對話輪次會被摘要成一個精簡項目。
- 摘要會儲存在工作階段逐字稿中。
- 近期訊息會保持完整。
toolResult 項目保持成對。如果該點落在工具區塊內,OpenClaw 會移動邊界,讓配對保持在一起,並保留目前未摘要的尾端。
完整對話歷史仍會保留在磁碟上。壓縮只會改變模型在下一輪看到的內容。
新設定預設會將
agents.defaults.compaction.mode 設為 "safeguard"(更嚴格的防護機制、摘要品質稽核)。若要退出,請明確設定 mode: "default"。自動壓縮
自動壓縮預設開啟。當工作階段接近上下文限制,或模型回傳上下文溢位錯誤時(此時 OpenClaw 會壓縮並重試),它會執行。 你會看到:- 一般閘道記錄中的
embedded run auto-compaction start/complete。 - 詳細模式中的
🧹 Auto-compaction complete。 /status顯示🧹 Compactions: <count>。
壓縮前,OpenClaw 會自動提醒代理程式將重要筆記儲存到 記憶 檔案。這可防止上下文遺失。
OpenClaw 可辨識的溢位錯誤模式
OpenClaw 可辨識的溢位錯誤模式
OpenClaw 會比對數十種供應商特定的溢位錯誤字串(Anthropic、OpenAI、Bedrock、Gemini、Ollama、OpenRouter 等)。常見範例:
request_too_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokens(Bedrock)input is too long for the modelollama error: context length exceeded
手動壓縮
在任何聊天中輸入/compact 以強制壓縮。加入指示來引導摘要:
agents.defaults.compaction.keepRecentTokens(預設:20,000)時,手動壓縮會遵循該切分點,並在重建的上下文中保留近期尾端。若沒有明確的保留預算,手動壓縮會作為硬性檢查點,並僅從新的摘要繼續。
設定
請在openclaw.json 的 agents.defaults.compaction 下設定壓縮。最常見的調整項如下;完整參考請見工作階段管理深入解析。
使用不同模型
預設情況下,壓縮會使用代理程式的主要模型。設定agents.defaults.compaction.model,即可將摘要工作委派給能力更強或更專門的模型。覆寫值可接受 provider/model-id 字串,或在 agents.defaults.models 下設定的裸別名:
agents.defaults.compaction.model 覆寫會保持精確,不會繼承工作階段備援鏈。
識別碼保留
壓縮摘要預設會保留不透明識別碼(identifierPolicy: "strict")。使用 identifierPolicy: "off" 覆寫可停用,或使用 identifierPolicy: "custom" 搭配 identifierInstructions 提供自訂指引。
作用中逐字稿位元組防護
設定agents.defaults.compaction.maxActiveTranscriptBytes 時,如果作用中的 JSONL 達到該大小,OpenClaw 會在執行前觸發一般本機壓縮。這對長時間執行的工作階段很有用,因為供應商端上下文管理可能會讓模型上下文保持健康,但本機逐字稿仍會持續成長。它不會分割原始 JSONL 位元組;它會要求一般壓縮管線建立語意摘要。
後續逐字稿
啟用agents.defaults.compaction.truncateAfterCompaction 時,OpenClaw 不會就地重寫現有逐字稿。它會從壓縮摘要、保留狀態和未摘要尾端建立新的作用中後續逐字稿,然後記錄檢查點中繼資料,將分支/還原流程指向該已壓縮的後續逐字稿。
後續逐字稿也會捨棄在短重試視窗內抵達的完全重複長使用者輪次,因此通道重試風暴不會在壓縮後被帶入下一個作用中逐字稿。
OpenClaw 不再為新的壓縮寫入個別 .checkpoint.*.jsonl 副本。既有舊版檢查點檔案在被參照時仍可使用,並會由一般工作階段清理修剪。
壓縮通知
壓縮預設會靜默執行。設定notifyUser 可在壓縮開始和完成時顯示簡短狀態訊息,並在壓縮前記憶排清耗盡但回覆仍繼續時顯示降級通知:
記憶排清
壓縮前,OpenClaw 可以執行一輪靜默記憶排清,將持久筆記儲存到磁碟。當這個整理輪次應使用本機模型而非作用中的對話模型時,請設定agents.defaults.compaction.memoryFlush.model:
可插拔壓縮供應商
外掛可以透過外掛 API 上的registerCompactionProvider() 註冊自訂壓縮供應商。註冊並設定供應商後,OpenClaw 會將摘要工作委派給它,而不是使用內建 LLM 管線。
若要使用已註冊的供應商,請在設定中設定其 ID:
provider 會自動強制 mode: "safeguard"。供應商會收到與內建路徑相同的壓縮指示和識別碼保留政策,且 OpenClaw 仍會在供應商輸出後保留近期輪次與分割輪次尾碼上下文。
如果供應商失敗或回傳空結果,OpenClaw 會退回使用內建 LLM 摘要。
壓縮與修剪
| 壓縮 | 修剪 | |
|---|---|---|
| 作用 | 摘要較舊的對話 | 修剪舊工具結果 |
| 已儲存? | 是(在工作階段逐字稿中) | 否(僅記憶體中,依每次請求) |
| 範圍 | 整個對話 | 僅工具結果 |
疑難排解
壓縮太頻繁? 模型的上下文視窗可能較小,或工具輸出可能很大。請嘗試啟用工作階段修剪。 壓縮後上下文感覺過時? 使用/compact Focus on <topic> 引導摘要,或啟用記憶排清,讓筆記得以保留。
需要乾淨的起點? /new 會開始新的工作階段,不進行壓縮。
進階設定(保留 Token、識別碼保留、自訂上下文引擎、OpenAI 伺服器端壓縮)請見工作階段管理深入解析。