Skip to content

自動コンパクションの無限リトライ防止:サーキットブレーカーの導入

原文(日本語に翻訳)

自動コンパクションが連続失敗後に無限にリトライし続ける問題を修正 — サーキットブレーカーにより3回の試行後に停止するようになった

原文(英語)

Fixed auto-compaction retrying indefinitely after consecutive failures — a circuit breaker now stops after 3 attempts

概要

Claude Codeの自動コンパクション機能が失敗した際に、無限にリトライを繰り返してセッションがフリーズしてしまう問題が修正されました。サーキットブレーカーパターンが導入され、3回連続で失敗した場合にリトライを停止するようになりました。これにより、コンパクション失敗時にセッションが数分間応答不能になる深刻な問題が解消されました。

基本的な使い方

自動コンパクションはコンテキストウィンドウが約95%に達すると自動的にトリガーされます。通常はユーザーが意識する必要はありませんが、修正後のv2.1.76では以下のように動作します:

コンテキスト使用量が95%に到達
  → 自動コンパクション試行(1回目)
    → 失敗した場合、リトライ(2回目)
      → 再度失敗した場合、リトライ(3回目)
        → 3回目も失敗した場合、サーキットブレーカーが発動し停止

実践例

長時間セッションでのコンパクション失敗

大規模なコードベースで長時間作業している場合、コンテキストウィンドウが満杯になりコンパクションが発生します:

# 修正前の挙動
セッション開始 → 大量のファイル読み込み → コンテキスト95%到達
  → コンパクション試行 → 失敗
  → リトライ → 失敗
  → リトライ → 失敗
  → リトライ → 失敗
  → ... (無限に繰り返し、5分以上セッションがフリーズ)

# 修正後の挙動(v2.1.76)
セッション開始 → 大量のファイル読み込み → コンテキスト95%到達
  → コンパクション試行 → 失敗
  → リトライ → 失敗
  → リトライ → 失敗
  → サーキットブレーカー発動、リトライ停止
  → ユーザーに通知、手動で対応可能

コンパクションデススパイラルの防止

修正前はシステムコンテキストがウィンドウの大部分を占める場合、コンパクションが急速に繰り返される「デススパイラル」が報告されていました:

# 修正前:コンパクションデススパイラル
3.5分間で6回のコンパクション発生
  → 各回でトークンを消費
  → コンテキストが圧縮されてもすぐに再度95%に到達
  → 再びコンパクション → 無限ループ

# 修正後:3回で停止
3回の試行後にサーキットブレーカーが発動
  → セッションの応答性を維持
  → ユーザーが /compact を手動実行するか、新しいセッションを開始可能

対処法

コンパクションが3回失敗してサーキットブレーカーが発動した場合の対処法:

bash
# 方法1:手動でコンパクションを実行
/compact

# 方法2:カスタムの要約プロンプトでコンパクション
/compact 現在のタスクの状態と重要なコンテキストを保持してください

# 方法3:新しいセッションを開始
claude --resume  # 既存セッションの一覧から選択
claude           # 新規セッション開始

注意点

  • 3回で停止: サーキットブレーカーは3回連続の失敗後にリトライを停止します。回数はカスタマイズできません
  • 手動コンパクションは可能: サーキットブレーカーが発動しても、/compact コマンドによる手動コンパクションは引き続き実行できます
  • 根本原因の確認: コンパクションが頻繁に失敗する場合、ネットワーク接続やAPI状態を確認してください
  • 予防策: 非常に大きなファイルを一度に読み込まないようにすることで、コンパクションの頻度を減らせます
  • 1Mコンテキスト: Opus 4.6の1Mコンテキストウィンドウを使用している場合、コンパクションの発生頻度自体が大幅に減少します

関連情報