Claude API: Sonnet 4.5 / Sonnet 4 の 1M context beta が 4/30 で終了 — 移行先と対応手順

Claude API の context-1m-2025-08-07 ベータヘッダが 2026-04-30 で Sonnet 4.5 / Sonnet 4 に対して無効化されました。標準 200K トークンを超えるリクエストはエラーになります。移行先は Sonnet 4.6 または Opus 4.6 で、こちらは 1M context が GA 済み(ベータヘッダ不要、標準価格)。具体的な書き換え手順と確認ポイントをまとめます。

Claude API の context-1m-2025-08-07 ベータヘッダ2026-04-30 で Sonnet 4.5 / Sonnet 4 に対して無効化されました。事前告知通りのリタイアで、これらのモデルで 200K トークンを超えるリクエストはエラーで弾かれます。本記事では、影響範囲・移行先・具体的な書き換え手順を整理します。

何が変わったか

モデル変更前変更後(2026-04-30 以降)
Claude Sonnet 4.5context-1m-2025-08-07 ベータヘッダで 1M tokens標準 200K のみ。1M context 不可
Claude Sonnet 4同上標準 200K のみ。1M context 不可
Claude Sonnet 4.61M tokens(ヘッダ不要、GA)変更なし
Claude Opus 4.6 / 4.71M tokens(ヘッダ不要、GA)変更なし

つまり、Sonnet 4.5 / 4 系で 1M context を使うルートが完全に閉じたということです。

影響を受ける典型ケース

  • ベータヘッダ context-1m-2025-08-07 を含むリクエストを Sonnet 4.5 や Sonnet 4 に送っているコード
  • 200K を超える input(長いログ・大量ドキュメント・ベクトルストアの全件)を Sonnet 4.5 で扱っていた既存統合
  • リファレンス実装をコピペで持ってきて、モデル ID だけ変えた古いサンプル

400 が返り始めて気付くケースが多いはずなので、本日以降にエラーが急増していたら最初に疑うのはここです。

移行先の選択

公式の推奨は Claude Sonnet 4.6 への切り替えです。1M context が GA(ベータヘッダ不要)、標準価格で利用できます。

候補context用途の目安
Claude Sonnet 4.6(claude-sonnet-4-6)1M tokens速度とコストを保ちつつ 1M を使いたい場合の第一選択
Claude Opus 4.7 / 4.6(claude-opus-4-7 / claude-opus-4-6)1M tokens知性最優先、エージェント的タスク
Claude Sonnet 4.5(claude-sonnet-4-5)200K1M が不要な既存ワークロードならそのまま

価格(2026-04 時点):

  • Sonnet 4.6: $3 / $15 per 1M input/output tokens
  • Sonnet 4.5: $3 / $15 per 1M input/output tokens(同じ)

つまり価格は据え置きで context だけ広がる形になるので、1M を実際に使っていたなら 4.6 への切り替えはそのまま得です。

書き換え手順

1. ベータヘッダを削除し、モデル ID を更新

// Before
const response = await client.messages.create({
  model: "claude-sonnet-4-5",
  // ↓ 4/30 から無効。送ると 1M リクエストはエラーで弾かれる
  betas: ["context-1m-2025-08-07"],
  max_tokens: 32_000,
  messages: [...],
});

// After
const response = await client.messages.create({
  model: "claude-sonnet-4-6", // ← GA、ヘッダ不要で 1M
  max_tokens: 32_000,
  messages: [...],
});

betas を完全に外します。client.beta.messages.create ではなく client.messages.create を使う点に注意(他の beta 機能と併用していないなら)。Compaction や Task Budgets など他の beta が必要な場合は client.beta.messages.create を維持し、betas 配列から context-1m-2025-08-07 だけ取り除きます。

2. リクエスト調整 — 200K 超のときだけ 4.6 にルート

短いリクエストまで強制的に 4.6 に寄せる必要はありません。input 推定で分岐するハイブリッド構成が経済的です。

async function ask(messages: Anthropic.MessageParam[]) {
  // input トークンの粗い見積もり (本番なら client.messages.countTokens を使う)
  const approxInput = JSON.stringify(messages).length / 4;

  const model =
    approxInput > 180_000 ? "claude-sonnet-4-6" : "claude-sonnet-4-5";

  return client.messages.create({
    model,
    max_tokens: 8_000,
    messages,
  });
}

価格が同じであれば常時 4.6 でも構いません。ただし 4.6 はメモリ常駐の挙動が 4.5 と微妙に違うので、乗り換え後は eval を 1 回通すのが定石です。

3. プロンプトキャッシュへの影響

モデル ID が変わると プロンプトキャッシュは別エントリになります(キャッシュはモデル単位)。本ブログ #8「プロンプトキャッシュ」でも触れたとおり、4.5 と 4.6 を同じ会話内で混ぜるとキャッシュが割れるので、長尺セッションは全体を 4.6 に統一するか、サブエージェントだけ 4.5 のままにする等の設計にします。

確認チェックリスト

  • コードベース全体で context-1m-2025-08-07 を grep。残っていれば削除
  • claude-sonnet-4-5(claude-sonnet-4-5-20250929)と claude-sonnet-4(claude-sonnet-4-20250514)で 200K を超えるリクエストを送る分岐を洗い出し、Sonnet 4.6 へ振り替え
  • CI / fixture / テストにもベータヘッダが残っていないか
  • ダッシュボードのエラーレートを 1〜2 日見る(リタイア後の 400 急増は今回ヘッダが原因の可能性大)
  • Sonnet 4.6 ベースで一度プロンプトキャッシュ・eval を回し直す

落とし穴

  • 「うちは 200K 超えてないから関係ない」と決めつける — 添付ドキュメントが大きい日(月次レポートを丸ごと食わせる等)にピンポイントで弾かれるケースがある。リトライ含めて 400 をログから定期確認
  • Sonnet 4.5 と 4.6 を混在運用 — 同セッションで両モデルを呼び分けると、プロンプトキャッシュが割れて inputトークンが想定外に積み上がる
  • モデル ID をエイリアスで書く運用が無い — 本番投入の SaaS では MODEL_ID を環境変数化しておくと、今回のような切り替えがデプロイなしで済む
  • 1M context が要らないのに 4.6 に乗り換える — 切り替え自体は無害だが、4.6 の挙動と 4.5 の挙動の差で eval スコアが変わるケースがある。移行後の品質確認は短くてもやる

まとめ

今回の変更は「ベータの卒業」というより「ベータの撤去」で、4/30 以降に既存統合がエラーを返し始める可能性のある実利的なリリースです。context-1m-2025-08-07 ヘッダを削り、モデル ID を claude-sonnet-4-6 に書き換える——基本的にはこれだけで対応が済みます。release notes タグで Anthropic のリリース情報を継続フォローしていきます。

参考