メインコンテンツへスキップ

コンパクション

すべてのモデルにはコンテキストウィンドウがあります。これは、処理できるトークン数の上限です。 会話がその上限に近づくと、OpenClawは古いメッセージを要約してコンパクト化し、 チャットを継続できるようにします。

仕組み

  1. 古い会話ターンはコンパクトなエントリに要約されます。
  2. 要約はセッショントランスクリプトに保存されます。
  3. 最近のメッセージはそのまま保持されます。
OpenClawが履歴をコンパクションチャンクに分割するとき、assistantのツール呼び出しは 対応する toolResult エントリと組み合わせたまま保持されます。分割点が ツールブロックの途中に来る場合、OpenClawはそのペアが一緒に保たれ、 現在の未要約の末尾が維持されるように境界を移動します。 会話履歴全体はディスク上に残ります。コンパクションで変わるのは、 次のターンでモデルが見る内容だけです。

自動コンパクション

自動コンパクションはデフォルトでオンです。セッションがコンテキスト制限に近づくと実行されるか、 モデルがコンテキスト超過エラーを返したときに実行されます(この場合、 OpenClawはコンパクト化して再試行します)。一般的な超過シグネチャには request_too_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokensinput is too long for the modelollama error: context length exceeded があります。
コンパクト化の前に、OpenClawは重要なメモを memory ファイルに保存するよう エージェントに自動で通知します。これにより、コンテキストの喪失を防ぎます。
openclaw.jsonagents.defaults.compaction 設定を使用して、コンパクションの動作(モード、目標トークン数など)を設定します。 コンパクション要約では、デフォルトで不透明な識別子が保持されます(identifierPolicy: "strict")。これは identifierPolicy: "off" で上書きするか、identifierPolicy: "custom"identifierInstructions を使ってカスタムテキストを指定できます。 必要に応じて、agents.defaults.compaction.model でコンパクション要約用に別のモデルを指定することもできます。これは、プライマリモデルがローカルモデルまたは小規模モデルで、より高性能なモデルにコンパクション要約を生成させたい場合に便利です。この上書きは任意の provider/model-id 文字列を受け付けます。
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
これはローカルモデルでも機能します。たとえば、要約専用の2つ目のOllamaモデルや、コンパクション専用にファインチューニングされたモデルを指定できます。
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
未設定の場合、コンパクションはエージェントのプライマリモデルを使用します。

プラガブルなコンパクションプロバイダー

プラグインは、プラグインAPIの registerCompactionProvider() を介してカスタムのコンパクションプロバイダーを登録できます。プロバイダーが登録されて設定されている場合、OpenClawは組み込みのLLMパイプラインの代わりにそのプロバイダーへ要約を委譲します。 登録済みプロバイダーを使用するには、設定でプロバイダーIDを指定します。
{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}
provider を設定すると、自動的に mode: "safeguard" が強制されます。プロバイダーは、組み込み経路と同じコンパクション命令および識別子保持ポリシーを受け取り、OpenClawはプロバイダー出力の後でも最近のターンおよび分割ターンのサフィックスコンテキストを保持します。プロバイダーが失敗するか空の結果を返した場合、OpenClawは組み込みのLLM要約にフォールバックします。

自動コンパクション(デフォルトでオン)

セッションがモデルのコンテキストウィンドウに近づくか、それを超えると、OpenClawは自動コンパクションをトリガーし、コンパクト化されたコンテキストを使って元のリクエストを再試行することがあります。 表示される内容:
  • 詳細モードでは 🧹 Auto-compaction complete
  • /status🧹 Compactions: <count> が表示されます
コンパクションの前に、OpenClawはサイレントメモリフラッシュターンを実行して、 永続的なメモをディスクに保存できます。詳細と設定については Memory を参照してください。

手動コンパクション

任意のチャットで /compact と入力すると、コンパクションを強制実行できます。要約を 誘導するための指示を追加することもできます。
/compact Focus on the API design decisions

別のモデルを使う

デフォルトでは、コンパクションはエージェントのプライマリモデルを使用します。より高性能な モデルを使って、より良い要約を得ることができます。
{
  agents: {
    defaults: {
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
      },
    },
  },
}

コンパクション開始通知

デフォルトでは、コンパクションは通知なしで実行されます。コンパクション開始時に短い通知を 表示するには、notifyUser を有効にします。
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}
有効にすると、ユーザーには各コンパクション実行の開始時に短いメッセージ(たとえば「Compacting context…」)が表示されます。

コンパクションと剪定の違い

コンパクション剪定
何をするか古い会話を要約する古いツール結果を削減する
保存されるかはい(セッショントランスクリプト内)いいえ(メモリ内のみ、リクエストごと)
対象範囲会話全体ツール結果のみ
Session pruning は、要約せずにツール出力を 削減する、より軽量な補完機能です。

トラブルシューティング

コンパクト化が多すぎる? モデルのコンテキストウィンドウが小さいか、ツール出力が 大きい可能性があります。session pruning を 有効にしてみてください。 コンパクション後にコンテキストが古く感じる? /compact Focus on <topic> を使って 要約を誘導するか、memory flush を有効にしてメモが 保持されるようにしてください。 まっさらな状態から始めたい? /new はコンパクト化せずに新しいセッションを開始します。 高度な設定(予約トークン数、識別子保持、カスタムコンテキストエンジン、 OpenAIのサーバー側コンパクション)については、 Session Management Deep Dive を参照してください。

関連

  • Session — セッション管理とライフサイクル
  • Session Pruning — ツール結果の削減
  • Context — エージェントターン用のコンテキストがどのように構築されるか
  • Hooks — コンパクションライフサイクルフック(before_compaction, after_compaction)