コンテキスト圧縮とは
コンテキスト圧縮(context compaction)とは、長くなった会話や作業履歴から、今後も必要な状態を取り出して小さな表現へ置き換える仕組みです。コンテキストウィンドウの空きを作りながら、同じタスクを続けることが目的です。
ここでいう圧縮は、ZIPのような可逆圧縮とは限りません。多くの場合は要約、古いツール出力の削除、重要状態の抽出を組み合わせるため、細部が失われる可能性があります。
何を小さくするのか
長いエージェント作業には、現在も有効な情報と、すでに役目を終えた情報が混在します。
長い履歴
├─ 目標・制約・決定事項 ─────────┐
├─ 現在のファイル状態・未解決事項 ─┼→ 圧縮された作業状態
├─ 次に行うこと ─────────────────┘
├─ 解決済みエラーの詳細ログ ───────→ 削除または短い要点へ
└─ 却下済み案の長い試行錯誤 ───────→ 削除または結論だけ残す圧縮後は、その作業状態と直近の会話を新しいコンテキストとして使います。OpenAIのResponses APIでは、コンテキスト管理による自動圧縮と、専用エンドポイントによる明示的な圧縮が提供されています。[1]
残すべき作業状態
よい圧縮は、文章を短くするだけではなく、次の判断に必要な状態を保存します。
| 優先して残す情報 | 理由 |
|---|---|
| 現在の目標と完了条件 | 何を終えればよいかを見失わないため |
| 守るべき制約と権限 | 禁止事項や安全条件を維持するため |
| 採用した決定と却下した案 | 古い案へ戻ることを防ぐため |
| 編集したファイルや外部状態 | 作業の現在地を合わせるため |
| 検証結果と未解決の問題 | 同じ失敗を繰り返さないため |
| 次の一手 | 再開直後の行動を明確にするため |
一方、検索結果やログの全文、すでに反映済みの下書き、結論に影響しない雑談は短くする候補です。ただし、後で監査や再検証が必要な情報は、会話から落としても別の記録へ残す必要があります。
Claude Codeでの例
Claude Codeはコンテキスト上限へ近づくと、古いツール出力を先に整理し、その後に会話を要約して自動的に圧縮します。/compactを使うと、何を重視するかという指示を添えて手動で圧縮できます。[2][3]
この仕組みでは、初期の細かな指示が要約から漏れる可能性があります。継続して守るルールは会話だけに置かず、CLAUDE.mdのような永続的な指示ファイルへ記録することが推奨されています。[3]
Codexでの例
Codexには、会話履歴の自動圧縮を開始するトークンしきい値の設定があります。設定リファレンスでは、全体のトークン数を基準にする方法と、安定した前半部分より後ろの本文を基準にする方法が示されています。[4]
OpenAI APIを使うエージェントでは、圧縮結果が人間向けの要約文ではなく、後続リクエストへそのまま渡す不透明な項目になる場合もあります。[1] したがって、人が読む引き継ぎメモとモデルが処理する圧縮状態は別物として設計します。
ChatGPTではどう考えるか
公開されているChatGPTのプロジェクト資料では、関連するチャット、ファイル、指示、情報源をプロジェクトへまとめ、成果物ごとに会話を分ける使い方が説明されています。[5] メモリは会話をまたいで役立つ情報を利用する機能です。[6]
これらは長い作業を整理する助けになりますが、APIやClaude Codeで公開されているコンテキスト圧縮と同じ実装だとは限りません。ChatGPTで長い作業を分けるときは、次の会話へ渡す引き継ぎ要約を明示的に作ると安全です。
目的:
確定したこと:
守る制約:
未解決のこと:
参照する資料:
次に行うこと:似た仕組みとの違い
| 仕組み | 主な操作 | コンテキスト量を減らすか | 主なリスク |
|---|---|---|---|
| コンテキスト圧縮 | 履歴を要約・整理・置換する | 減らす | 必要な細部の脱落 |
| 単純な切り捨て | 古い履歴を削除する | 減らす | 重要情報も一緒に消える |
| プロンプトキャッシュ | 同じ前半入力の計算を再利用する | 減らさない | 入力変更によるキャッシュミス |
| メモリ | 後の会話へ有用な情報を供給する | 必ずしも減らさない | 古い・不要な記憶の混入 |
| RAG | 外部資料から必要部分を検索する | 選び方次第 | 検索漏れや誤った根拠 |
プロンプトキャッシュと圧縮は併用できますが、圧縮で会話の前半が書き換わると、以前のキャッシュを再利用できなくなる場合があります。[7] キャッシュ効率を優先して古い履歴を残し続けるのではなく、作業品質とコンテキスト容量を基準に圧縮時点を決めます。
圧縮の限界
圧縮では「将来、何が必要になるか」を事前に完全には判断できません。特に次の情報は失われやすくなります。
- エラーが起きた正確な順序
- 文章の微妙な表現やユーザーの意図
- 一度だけ登場した例外条件
- ツール出力に含まれる細かな数値
- 採用案に至った比較過程
重要な判断では、圧縮状態だけを根拠にせず、元資料、ソースコード、議事録、監査ログへ戻って確認します。圧縮後に同じ誤解が続く場合や、目的そのものが変わった場合は、古い状態を引き継ぐより新しい会話を始めるほうが安全です。
まとめ
- コンテキスト圧縮は、長い履歴を今後必要な作業状態へ縮約する
- 要約、古いツール出力の削除、重要状態の抽出などが使われる
- Claude CodeとCodexには自動圧縮の仕組みがあり、OpenAI APIでは圧縮状態を後続リクエストへ渡せる
- ChatGPTのプロジェクトやメモリは作業整理に役立つが、公開された圧縮APIと同じものではない
- 圧縮は情報を失う可能性があるため、永続ルールと検証用記録は会話の外にも残す
参考文献
- OpenAI, Compaction
- Anthropic, Best practices for Claude Code
- Anthropic, How Claude Code works
- OpenAI, Configuration Reference
- OpenAI, Projects and chats
- OpenAI, Memories
- OpenAI, Prompt caching
情報の鮮度について: 自動圧縮の開始条件、コマンド、設定項目、APIの形式は変更される可能性があります。利用時は各製品の最新仕様を確認してください。