上下文視窗與壓縮

每個模型都有上下文視窗(能看到的最大 token 數)。長時間的聊天會不斷累積訊息和工具結果;一旦視窗空間吃緊,OpenClaw 就會壓縮較舊的歷史記錄,確保不超出限制。

壓縮是什麼

壓縮會將較舊的對話摘要成一個精簡的摘要條目,同時保留近期訊息不動。摘要會存進 session 歷史中,後續請求使用的是:

  • 壓縮摘要
  • 壓縮點之後的近期訊息

壓縮會持久化到 session 的 JSONL 歷史中。

設定

openclaw.json 中使用 agents.defaults.compaction 設定壓縮行為(模式、目標 token 數等)。 壓縮摘要預設會保留不透明的識別碼(identifierPolicy: "strict")。你可以用 identifierPolicy: "off" 關閉,或用 identifierPolicy: "custom" 搭配 identifierInstructions 提供自訂文字。

你也可以透過 agents.defaults.compaction.model 指定不同的模型來產生壓縮摘要。當你的主要模型是本地或小型模型,想讓壓縮摘要由更強的模型生成時,這很有用。此設定接受任何 provider/model-id 字串:

{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-5"
      }
    }
  }
}

也適用於本地模型,例如專門做摘要的第二個 Ollama 模型,或經過微調的壓縮專用模型:

{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}

未設定時,壓縮使用 agent 的主要模型。

自動壓縮(預設開啟)

當 session 接近或超過模型的上下文視窗時,OpenClaw 會觸發自動壓縮,並可能使用壓縮後的上下文重試原始請求。

你會看到:

  • verbose 模式下顯示 🧹 Auto-compaction complete
  • /status 顯示 🧹 Compactions: <count>

在壓縮之前,OpenClaw 可以執行一次靜默記憶刷寫回合,將持久性的筆記寫到磁碟。請參閱 Memory 瞭解細節和設定。

手動壓縮

使用 /compact(可選附帶指示)強制執行一次壓縮:

/compact Focus on decisions and open questions

上下文視窗來源

上下文視窗是模型專屬的。OpenClaw 使用已設定 provider 目錄中的模型定義來決定限制值。

壓縮 vs 修剪

  • 壓縮:摘要化並持久化到 JSONL。
  • Session 修剪:僅在記憶體中、以每次請求為單位修剪舊的工具結果

請參閱 /concepts/session-pruning 瞭解修剪細節。

OpenAI 伺服器端壓縮

OpenClaw 也支援 OpenAI Responses 伺服器端壓縮提示,適用於相容的 OpenAI 直連模型。這和 OpenClaw 本地壓縮是分開的,兩者可以並行運作。

  • 本地壓縮:OpenClaw 做摘要並持久化到 session JSONL。
  • 伺服器端壓縮:當啟用 store + context_management 時,OpenAI 在 provider 端壓縮上下文。

請參閱 OpenAI provider 瞭解模型參數與覆寫選項。

使用建議

  • 當 session 感覺遲鈍或上下文臃腫時,用 /compact
  • 大型工具輸出已經會被截斷;修剪能進一步減少工具結果的累積。
  • 如果需要全新開始,/new/reset 會啟動一個新的 session。