AIエージェントに長い作業を任せていると、会話の履歴はターンごとに積み上がっていきます。
読んだファイルの中身もコマンドの出力も、すべてが同じコンテキストウィンドウに溜まっていく作りです。
上限に近づいたとき、Claude Code のようなツールは作業を止める代わりに、それまでのやり取りを要約へ置き換えて先へ進みます。
この仕組みがコンパクション(compaction)です。
何が要約に残り、何が消えるのかを知っておくと、長いセッションの途中でAIが前提を取り違える理由にも見当が付きます。
コンパクションとは何か
言葉の定義は、Anthropic のエンジニアリングブログ(2025年9月29日公開)に書かれています。
上限に近づいた会話を要約し、その要約を持って新しいコンテキストウィンドウで作業を始め直す操作のことです。
Effective context engineering for AI agents は、長く動くエージェントを支える手筋の一つ目にこのコンパクションを挙げています。
要約に置き換える理由は二つあります。
一つは、会話を上限の内側に収めて、作業を打ち切らずに続けるためです。
もう一つは、実際に使う文脈を小さく保つためで、Claude API のドキュメントは会話が長くなるほど応答の質が落ちることを理由に挙げていました。
古い発言から順に押し出すだけのやり方だと、序盤で決めた方針がまるごと消えてしまいます。
コンパクションは消す代わりに要点を書き残すので、上限を気にせず続けながら、決めたことの筋は失わないところに価値があります。
ウィンドウの上限がどう決まり、なぜ長い文脈で精度が落ちるのかは、コンテキストウィンドウの記事で基礎から説明しています。
どう動くのか
仕組みは、どのツールでもおおむね「いつ要約するか」「何を残すか」「要約をどう差し込むか」の三段で説明できます。
ここでの仕様は2026年10月時点の各社ドキュメントに基づいていて、ベータの機能は今後変わる可能性があります。
いつ要約するか
きっかけには、トークン数のしきい値で自動的に走るものと、利用者やアプリが明示的に頼むものの二種類があります。
Claude API のしきい値型では、既定のしきい値が入力 15万トークンで、5万トークン未満には設定できません(ベータ版)。
アプリ側が好きなタイミングで要約を頼むオンデマンド型も、別のベータとして用意されています。
どちらの場合も要約の処理は会話全体を読むので、ウィンドウからはみ出してしまう前に走らせる必要があります。
何を残すか
要約を書くのはモデル自身です。
Claude API のしきい値型では、次のウィンドウで作業を続けるのに必要な情報を <summary> タグの中にまとめさせるのが既定の指示だと説明されています。
Claude Code の実装について、先のブログは設計上の決定・未解決のバグ・実装の細部を残し、重複したツール出力やメッセージを捨てると書いていました。
残す内容は指示で変えられ、Claude API では独自の指示を渡すと既定の指示がまるごと置き換わります。
要約をどう差し込むか
できた要約は、もとになった古い発言の代わりに履歴へ入ります。
Claude API のしきい値型では要約が compaction ブロックとして返り、次のリクエストからはこのブロックより前の内容が落とされた状態で会話が続きます。
オンデマンド型で返るブロックには人が読める要約の文章と署名が入っていて、受け取ったまま送り返す決まりです。
Compaction overview(Claude API ドキュメント) は、オンデマンド型としきい値型の違いを、誰が実行のタイミングを決めるかなどの観点で表にまとめています。
しきい値型を Python から使う最小形は、公式ドキュメントの例を縮めると次のようになります。
# Claude API のしきい値型コンパクション(2026年10月時点はベータ)
response = client.beta.messages.create(
betas=["compact-2026-01-12"],
model="claude-opus-5-5",
max_tokens=4096,
messages=messages,
context_management={
"edits": [{"type": "compact_20260112",
"trigger": {"type": "input_tokens", "value": 150000}}]
},
)
# 返ってきた response.content(compaction ブロックを含む)を履歴へ足して続ける
OpenAI の Responses API にも同じ名前の機能があり、こちらの要約は暗号化されていて、人が読むことは想定されていません。
Compaction(OpenAI API ドキュメント) によると、しきい値を超えたときにサーバー側で自動実行する方式と、/responses/compact を呼んで明示的に実行する方式の二つが用意されています。
どこで使われているか
いちばん身近なのは、コーディングエージェントの長いセッションです。
自分でエージェントを組む場合は、要約しない選択肢と比べて選ぶことになります。
Claude Code の長いセッション
Claude Code は上限に近づくと自動でコンパクションを走らせるので、ウィンドウが埋まってもセッションは終わりません。
自分で走らせたいときは /compact を使い、/compact focus on the auth bug fix のように何を残すかを添えられます。
自動で走る位置は /autocompact 500k のように指定でき、100K〜1M トークンの範囲で選べます。
1M トークンのウィンドウを持つモデルでは、既定で約96万7千トークンに達したところで自動の要約が走る設定です。
要約のあとに何が戻ってくるかも、公式ドキュメントに一覧があります。
- プロジェクト直下の CLAUDE.md と自動メモリは、ディスクから読み直される
- 読んだり編集したりしたファイルは、更新の新しい順に最大5つまで読み直される(5,000トークンを超えるファイルはパスだけ)
- 呼び出したスキルの本文は、1つあたり5,000トークン・合計25,000トークンまで戻される
paths:付きのルールやサブディレクトリの CLAUDE.md は要約に巻き込まれ、対象のファイルをもう一度読んだときに読み込み直される
Explore the context window(Claude Code ドキュメント) には、セッションの開始からコンパクションまでの流れを再生できる図も載っています。
自作のエージェント
Claude API には、古いツール結果だけをルールで消すコンテキスト編集という機能もあります。
既定では入力が10万トークンを超えると古いツール結果から消し始め、直近3回分は残す設定です。
Anthropic のブログも、ツール結果の消去をいちばん安全で軽い形のコンパクションとして紹介していました。
ツールの出力が履歴の大半を占めるなら、要約に頼る前にこちらで足りるかを試す価値があります。
要約・外部メモ・サブエージェントをどう組み合わせるかという全体像は、コンテキストエンジニアリングの記事にまとめています。
落とし穴
便利な反面、要約である以上は失われるものがあります。
細部が落ちる
Anthropic のブログは、削りすぎた要約では、後になって初めて重要だと分かる細かな文脈が失われうると注意しています。
そのため要約用の指示は、まず漏れなく拾うことを優先し、そのあとで不要な部分を削って精度を上げる順で調整するよう勧めていました。
Claude Code なら、大きな作業に入る前に /compact で残す焦点を指定しておくと、自動の要約に任せるより狙った内容が残ります。
途中で足した指示が効かなくなる
会話の途中で追加した指示も、要約の範囲に入れば要約の一部になります。
Claude API のドキュメントは、途中で送った system メッセージの指示は要約に置き換わった時点で効かなくなるので、必要なら送り直すよう書いています。
Claude Code でも、要約をまたいで守らせたいルールはプロジェクト直下の CLAUDE.md に置くよう案内されています。
画像や文書は持ち越せない
要約は文章なので、要約された範囲にあった画像・文書・取得した URL の中身は、ブロックに置き換わった時点で消えます。
あとのターンで必要なら、もう一度渡し直すしかありません。
要約にもトークン代がかかる
要約を書く処理は追加の呼び出しとして動き、料金とレート制限の対象になります。
Claude API ではこの分がレスポンスの usage.iterations に別枠で記録されます。
最上位の input_tokens と output_tokens には、要約の分が含まれません。
コストを集計するときに最上位の数字だけを見ていると、要約の分を数え漏らします。
最後に
コンパクションは、上限に近づいた会話を要約に置き換え、その要約から作業を続けるための仕組みです。
要約に残るのは決定事項の筋で、細部や途中の指示、画像は落ちうると知っておくと、長いセッションでAIが前提を取り違えたときに原因を探しやすくなります。
残したいものは要約の前に焦点として伝えるか、CLAUDE.md のように要約のあとで読み直される場所へ置いておくのが近道です。
以上です。













コメントを残す