広告

Claude Codeのコンパクションエンジン:ソースコードが実際に明かすもの

Dev.to / 2026/4/1

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • Claude Codeのコンパクションエンジンは、軽量な事前呼び出しクリーンアップ、サーバー側でのトークンしきい値処理、そして最後の手段としてLLMベースの9セクション要約という3段階のシーケンスを使用する。
  • 分析ではまず、決定論的なキュレーション(直近のツール出力を消す/残すこと)が「本当の作業」であると主張し、その後それを確認する。無邪気な要約はコストが高く、情報の損失(ロッシー)も大きいためだ。
  • 重要な複雑さとして、プロンプトキャッシュが挙げられる。単純なメッセージ削除はキャッシュされたプレフィックスを無効化し、実効コストを押し上げうるため、Claude Codeはこれを避ける。
  • Claude Codeの手法では、cache_editsという仕組みを用いて、キャッシュされたプレフィックスを壊すことなくツール結果を外科的に削除する。また、要約呼び出しでのcache-key再利用と、コンパクション後にセッション状態を再構築する再構成ステップにより対応している。

数か月前、私は コンテキスト・エンジニアリング について書きました。長時間のセッション中にAIエージェントが正気を失わないように保つ、目に見えないロジックです。私は外から見える形で、そのパターンを説明しました。最新のファイルバージョンを維持する、ターミナル出力を削る、古いツール結果を要約する、システムプロンプトをガードする、といったことです。

また私は予測もしました。素朴なLLMによる要約はバンドエイドである、と。実際に必要だったのは決定的なキュレーション(選別)作業でした。要約は最後の手段であるべきです。

そしてClaude Codeのリポジトリが公開されました。私はClaudeに、自分自身のコンパクション(圧縮)ソースコードを分析してもらいました。

予測は当たりました。そして実装は、私が期待していたよりもずっと思慮深いものでした。

Three Tiers, Not One

Claude Codeのコンパクションシステムは単一の仕組みではありません。3つのティアを、最後まで順番に適用していくのです。いずれも前のものより重い仕組みです。

Tier 1 は、毎回のAPI呼び出しの前に実行されます。軽量なクリーンアップです。古いツール結果をクリアし、最新の5つだけを残し、残りを [Old tool result content cleared] に置き換えます。高速で安価で、モデルは一切関与しません。

Tier 2 はAPIレベルで動作します。サーバー側の戦略で、トークン閾値に基づいて思考ブロックとツール結果のクリアを処理します。

Tier 3 は、完全なLLM要約です。意図、技術的概念、触れたファイル、エラーと修正、すべてのユーザーメッセージ、保留タスク、現在の作業、という構造化された9セクションの要約。モデルは、要約をコミットする前に会話全体を推論します。つまり、要約後に削除されるチェーン・オブ・ソート(思考過程)のためのスクラッチパッドです。これは洗練されています。しかし、最後の手段です。

このアーキテクチャは、最初の記事で主張したことをまさに裏づけています。要約は高価で情報を失いやすい(ロッシー)ということです。要約に頼るのは、ほかのすべてがすでに実行された後だけです。

But Here's the Problem

Tier 1 に関する記事を読んだとき、私の最初の直感はこうでした。会話がキャッシュされているなら、古いメッセージを削除することはキャッシュを無効化してしまうのではないか、と。キャッシュ無効化は非常にコストが高い。トークンに対して90%の割引が効くどころか、キャッシュへの書き込みに対して1.25倍を支払うことになります。つまり、コンパクションのコストが、節約できたトークン以上になってしまう。そういうことです。

ではClaude Codeはどうやって解決しているのでしょう?答えには cache_edits という仕組みが関わっています。これはキャッシュ済みのプレフィックスに触れずに、ツール結果だけを手術のように取り除くものです。さらに、要約の呼び出しがメインの会話のキャッシュキーに便乗します(代替案では98%のミス率だった)。そして、コンパクション後にセッション全体の状態を再構築するプロセスがあります。

ブログで完全な分析を読む →

完全な投稿では次の内容を扱っています:

  • cache_edits が、クリーンアップ中にプロンプトキャッシュをどのように保持するか
  • なぜ要約の呼び出しがあなた自身のキャッシュキーを再利用するのか(そして再利用できない場合に何が起きるか)
  • コンパクション後の完全な再構築プロセス
  • キャッシュ経済(キャッシュのコストと効果)が、システム内のあらゆる設計上の判断にどう影響したか
返却形式: {"translated": "翻訳されたHTML"}

広告