Compaction
すべてのモデルにはコンテキストウィンドウ、つまり処理できるトークン数の上限があります。 会話がその制限に近づくと、OpenClawは古いメッセージを要約して チャットを継続できるようにcompactsします。仕組み
- 古い会話ターンはcompactエントリーに要約されます。
- 要約はセッショントランスクリプトに保存されます。
- 最近のメッセージはそのまま保持されます。
toolResult エントリーとペアのまま保持されます。分割位置が
toolブロックの途中に来た場合、OpenClawはそのペアが一緒に保たれ、
現在の未要約の末尾が保持されるように境界を移動します。
会話の完全な履歴はディスク上に残ります。compactionは、次のターンで
モデルが見る内容だけを変更します。
自動compaction
自動compactionはデフォルトで有効です。セッションがコンテキスト制限に 近づいたとき、またはモデルがコンテキストオーバーフローエラーを返したときに 実行されます(この場合、OpenClawはcompactionして再試行します)。典型的な オーバーフローシグネチャにはrequest_too_large、context length exceeded、input exceeds the maximum number of tokens、input token count exceeds the maximum number of input tokens、input is too long for the model、ollama error: context length exceeded があります。
compactionの前に、OpenClawは重要なメモをmemoryファイルに保存するよう
エージェントへ自動的にリマインドします。これによりコンテキストの喪失を防ぎます。
手動compaction
任意のチャットで/compact と入力すると、compactionを強制できます。要約を導くための
指示を追加することもできます。
別のモデルを使う
デフォルトでは、compactionはエージェントのプライマリモデルを使用します。より良い要約のために、 より高性能なモデルを使うこともできます。compaction開始通知
デフォルトでは、compactionは静かに実行されます。compactionが 開始されたときに短い通知を表示するには、notifyUser を有効にします。
compaction と pruning の違い
| Compaction | Pruning | |
|---|---|---|
| 何をするか | 古い会話を要約する | 古いtool resultを削る |
| 保存されるか | はい(セッショントランスクリプト内) | いいえ(メモリ内のみ、リクエストごと) |
| 対象範囲 | 会話全体 | tool resultのみ |
トラブルシューティング
compactionの頻度が高すぎますか? モデルのコンテキストウィンドウが小さいか、 tool出力が大きい可能性があります。 session pruningを有効にしてみてください。 compaction後にコンテキストが古く感じますか?/compact Focus on <topic> を使って
要約を導くか、メモが残るようにmemory flushを有効にしてください。
まっさらな状態から始めたいですか? /new はcompactionせずに新しいセッションを開始します。
高度な設定(予約トークン、識別子の保持、カスタムコンテキストエンジン、
OpenAIのサーバーサイドcompaction)については、
Session Management Deep Diveを参照してください。
関連
- Session — セッション管理とライフサイクル
- Session Pruning — tool resultの削減
- Context — エージェントターン用のコンテキストがどのように構築されるか
- Hooks — compactionライフサイクルフック(before_compaction、after_compaction)