コンテキストウィンドウとコンパクション
すべてのモデルにはコンテキストウィンドウ(モデルが一度に見られる最大トークン数)があります。長時間のチャットではメッセージやツール結果が蓄積されるため、ウィンドウが逼迫してくるとOpenClawは古い履歴をコンパクションして制限内に収めます。
コンパクションとは
コンパクションは古い会話をコンパクトなサマリーエントリに要約し、最近のメッセージはそのまま保持します。サマリーはセッション履歴に保存されるため、以降のリクエストでは以下が使用されます:
- コンパクションサマリー
- コンパクションポイント以降の最近のメッセージ
コンパクションはセッションのJSONL履歴に永続化されます。
設定
openclaw.json の agents.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-5"
}
}
}
}
ローカルモデルでも動作します。例えば、要約専用の2つ目のOllamaモデルやファインチューニングされたコンパクション特化モデルなど:
{
"agents": {
"defaults": {
"compaction": {
"model": "ollama/llama3.1:8b"
}
}
}
}
未設定の場合、コンパクションにはエージェントのプライマリモデルが使用されます。
自動コンパクション(デフォルトで有効)
セッションがモデルのコンテキストウィンドウに近づいたり超えたりすると、OpenClawは自動コンパクションをトリガーし、コンパクトされたコンテキストで元のリクエストをリトライする場合があります。
以下のように表示されます:
- verboseモードで
🧹 Auto-compaction complete /statusで🧹 Compactions: <count>
コンパクション前に、OpenClawはサイレントメモリフラッシュターンを実行して永続的なメモをディスクに保存できます。詳細と設定についてはMemoryを参照してください。
手動コンパクション
/compact(オプションで指示を添えて)を使ってコンパクションパスを強制実行できます:
/compact Focus on decisions and open questions
コンテキストウィンドウのソース
コンテキストウィンドウはモデル固有です。OpenClawは設定されたプロバイダーカタログのモデル定義を使って制限を決定します。
コンパクション vs プルーニング
- コンパクション: 要約してJSONLに永続化。
- セッションプルーニング: 古いツール結果のみを、リクエストごとにインメモリでトリミング。
プルーニングの詳細は/concepts/session-pruningを参照してください。
OpenAIサーバーサイドコンパクション
OpenClawは互換性のあるOpenAI直接モデルに対して、OpenAI Responsesのサーバーサイドコンパクションヒントもサポートしています。これはOpenClawのローカルコンパクションとは別であり、並行して実行できます。
- ローカルコンパクション: OpenClawが要約してセッションJSONLに永続化。
- サーバーサイドコンパクション:
store+context_managementが有効な場合、OpenAIがプロバイダー側でコンテキストをコンパクト。
モデルパラメータとオーバーライドについてはOpenAIプロバイダーを参照してください。
ヒント
- セッションが古く感じたりコンテキストが膨張したりしたら
/compactを使いましょう。 - 大きなツール出力はすでに切り詰められていますが、プルーニングでツール結果の蓄積をさらに削減できます。
- 完全にリセットしたい場合は、
/newまたは/resetで新しいセッションIDを開始できます。