原文(日本語に翻訳)
コンテキストウィンドウのブロック制限が、最大出力トークンのための領域を確保する実効コンテキストウィンドウではなく、フルコンテキストウィンドウを使用して計算されていた問題を修正しました。
原文(英語)
Fixed context window blocking limit being calculated using the full context window instead of the effective context window (which reserves space for max output tokens)
概要
Claude Codeがコンテキストウィンドウの制限を判定する際、出力トークン用の予約領域を考慮せず、フルサイズのコンテキストウィンドウで計算していた問題が修正されました。この問題により、実際にはコンテキストが不足しているにもかかわらず、ツール実行が許可され、その結果エラーが発生していました。
問題の詳細
コンテキストウィンドウの構造
Claude APIのコンテキストウィンドウ(例:200K tokens)は以下のように分割されます:
┌─────────────────────────────────────┐
│ フルコンテキストウィンドウ: 200K │
├─────────────────────────────────────┤
│ 入力用領域: 196K │ ← 会話履歴、コード、ツール説明
├─────────────────────────────────────┤
│ 出力用予約領域: 4K │ ← Claudeの応答用に予約
└─────────────────────────────────────┘修正前の動作(バグ)
ブロック制限の判定に200K(フルサイズ)を使用していたため:
現在の入力: 198K tokens
フルコンテキスト: 200K
判定: 198K < 200K → ✓ ツール実行を許可
実際の動作:
入力: 198K
出力予約: 4K
合計: 202K > 200K → ❌ エラー発生修正後の動作
実効コンテキストウィンドウ(196K)を使用して正しく判定:
現在の入力: 198K tokens
実効コンテキスト: 196K
判定: 198K > 196K → ❌ ブロック(要約を促す)
ユーザーは適切に通知を受け、エラーが発生しない実践例
大規模ファイルの読み込み
巨大なログファイルやコードベースを読み込む際の動作。
修正前:
# 現在のコンテキスト: 195K tokens
# 大きなファイルを読み込もうとする (3K tokens)
Claude: "Reading the file..."
# ツール実行が許可される(195K + 3K = 198K < 200K)
❌ Error: Context window exceeded
# 実際は出力予約4Kを含めると202K > 200K修正後(v2.1.7):
# 現在のコンテキスト: 195K tokens
# 大きなファイルを読み込もうとする (3K tokens)
⚠️ Warning: Context approaching limit
Would you like to:
1. Summarize the conversation
2. Start a new session
3. Proceed with reduced context
# 事前に警告され、適切な対処が可能長い会話セッション
長時間の会話でコンテキストが蓄積する場合。
修正前:
# コンテキスト使用量: 197K / 200K (98.5%)
# 表示: "コンテキストに余裕あり"
次のツール実行でクラッシュ修正後(v2.1.7):
# コンテキスト使用量: 197K / 196K (100.5%)
⚠️ Context limit reached
# 適切なタイミングで要約を提案複数の大きなツール結果
並列で複数のツールを実行する場合。
# 現在: 194K tokens (実効196K中)
# 3つのツールを並列実行しようとする
Read large_file.json (2K)
Grep pattern in codebase (1K)
Bash git log (1K)
合計追加: 4K
修正前: 194 + 4 = 198K < 200K → 実行許可 → エラー
修正後: 194 + 4 = 198K > 196K → ブロック → 要約提案技術的な改善点
- 正確な制限計算: 出力トークン予約を考慮した実効コンテキストウィンドウで判定
- 早期警告: コンテキスト超過が発生する前に警告を表示
- 安定性向上: 予期しないコンテキストエラーが大幅に減少
- 透明性: ユーザーに正確なコンテキスト使用状況を表示
モデル別の実効コンテキストウィンドウ
| モデル | フルウィンドウ | 最大出力 | 実効ウィンドウ |
|---|---|---|---|
| Claude 3.5 Sonnet | 200K | 4K | 196K |
| Claude 3 Opus | 200K | 4K | 196K |
| Claude 3 Haiku | 200K | 4K | 196K |
注意点
- 出力予約: 長い応答を生成する場合、さらに多くの出力トークンが使用される可能性があります
- 安全マージン: 実際には実効ウィンドウよりも少し早めに警告が表示される場合があります
- 要約の重要性: コンテキスト制限に近づいたら、積極的に要約機能を使用することを推奨します
- パフォーマンス: コンテキストが大きいほど、応答が遅くなる傾向があります
ベストプラクティス
コンテキスト管理
# 定期的なコンテキストチェック
/context # 現在のコンテキスト使用量を確認
# 90%を超えたら要約を検討
# 長期セッションでは定期的に要約大きなファイルの扱い
# ファイル全体ではなく、必要な部分のみを読み込む
Read file.txt offset=1000 limit=100
# 検索を使用して関連部分を特定
Grep "specific function" file.txt