CLAUDE LABEN
MODEL — Claude Sonnet 5が全プランの既定モデルになりました。計画・ツール利用・自律実行を強化した最もエージェント的なSonnetですPRICE — Sonnet 5は導入価格が100万トークンあたり入力$2・出力$10で、8月31日まで適用されますCODE — Claude CodeがSonnet 5を既定化し、ネイティブ1Mトークンのコンテキストに対応しましたGATEWAY — Amazon BedrockとGoogle Cloud向けにセルフホスト型のClaude apps gatewayが登場しました(SSO・ポリシー・コスト管理)CHROME — Claude in Chromeが正式提供となり、背景通知やドラフトPRの引き継ぎが加わりましたENTERPRISE — Enterprise向けに管理分析・モデル単位の権限・支出アラートが強化されましたMODEL — Claude Sonnet 5が全プランの既定モデルになりました。計画・ツール利用・自律実行を強化した最もエージェント的なSonnetですPRICE — Sonnet 5は導入価格が100万トークンあたり入力$2・出力$10で、8月31日まで適用されますCODE — Claude CodeがSonnet 5を既定化し、ネイティブ1Mトークンのコンテキストに対応しましたGATEWAY — Amazon BedrockとGoogle Cloud向けにセルフホスト型のClaude apps gatewayが登場しました(SSO・ポリシー・コスト管理)CHROME — Claude in Chromeが正式提供となり、背景通知やドラフトPRの引き継ぎが加わりましたENTERPRISE — Enterprise向けに管理分析・モデル単位の権限・支出アラートが強化されました
記事一覧/Claude Code
Claude Code/2026-07-04上級

1M が既定になっても、全部は詰めない — コンテキスト枠を審査する admission policy と劣化曲線の実測

Sonnet 5 が Claude Code の既定になりネイティブ1Mコンテキストが標準化しました。ハードエラーは消えた代わりに現れた静かな劣化を probe で可視化し、詰め込みを審査する admission policy と有効トークン単価での監視を、動くコードと実測値で共有します。

Claude Code179Sonnet 54コンテキスト設計1M context自動運用8

プレミアム記事

夜間バッチのログを眺めていて、あるとき妙な静けさに気づきました。数週間前まで一番重い記事生成ジョブでは、1日に2〜3回「context window exceeded」でセッションが落ちていたのです。それが、ぱたりと止まっていました。

Claude Code の既定が Sonnet 5 になり、ネイティブで1Mトークンのコンテキストが標準になった直後のことです。最初は素直に喜びました。もう窓のサイズを気にしてリポジトリの一部を削る必要はない、と。けれども数日運用して、落ちなくなった代わりに別の壊れ方が始まっていることに気づきました。エラーは出ない。ただ、出力の質が時々ぶれて、入力トークンの請求が静かに膨らんでいたのです。

この記事は、その「静かな劣化」を私がどう可視化し、どう手を打ったかの記録です。動く probe と admission policy のコード、そして自分のパイプラインで測った劣化曲線の数字を添えます。

「落ちる」から「にじむ」へ、失敗の形が反転した

窓が狭かった頃、コンテキストの問題は必ず例外として顔を出しました。上限を超えればセッションは止まる。痛いですが、少なくとも気づけます。ログに context window exceeded と残り、その日のうちに詰め込みすぎを削るという対処に迷いはありませんでした。

1M が既定になると、この安全弁が外れます。手元の重いジョブ(4サイト分のリポジトリ抜粋・参照データ・当日ログをまとめて渡すもの)でも、実測で15万〜20万トークンほど。1Mには遠く届きません。だから二度と落ちない。ここまでは良い話です。

問題は、落ちなくなったことで「入るなら入れておこう」という判断が無意識に増えたことでした。以前は窓に収めるために削っていた素材を、削らずに全部渡すようになる。その結果として現れたのが、次の2種類のにじみです。

失敗の型窓が狭かった頃1M 既定のあと
検知のしやすさ例外で即座に気づくエラーなし。出力を読んで初めて気づく
症状セッション停止中盤に埋めた事実の取りこぼし・言い換え誤り
コスト失敗分は無駄だが総量は抑制的入力トークンが静かに増え、請求が膨らむ
対処の緊急度その日のうちに直す放置されやすく、気づくと常態化している

窓が広いことは、詰め込みへの罰則がなくなることを意味します。罰則がなくなると、設計の規律は自分で持ち込むしかありません。まず必要なのは、劣化が本当に起きているのかを目で見える形にすることでした。

まず測る: 詰め率と事実想起のずれを probe にする

感覚で「なんとなく質が落ちた」と言っても、対処のしようがありません。私がやったのは、既知の事実をコンテキストに埋め込み、詰め率を上げながら、その事実を正確に思い出せるかを測る小さな probe を書くことでした。長文検索でよく使う needle-in-haystack の考え方を、自分の実素材で回すものです。

要点は3つです。第一に、埋め込む事実は検証可能なもの(前提条件のような一意な数値・文字列)にすること。第二に、事実を浅い位置・中盤・末尾に散らすこと。中盤に埋めたものが最初に落ちるからです。第三に、詰め率を段階的に上げて、想起精度がどこで崩れ始めるかの曲線を取ることです。

// context-probe.ts — 既知の事実を埋め込み、詰め率ごとの想起精度を測る
import Anthropic from "@anthropic-ai/sdk";
 
const client = new Anthropic();
const MODEL = "claude-sonnet-5";
 
// 検証可能な「針」。実運用では RUNTIME_ASSUMPTIONS の各行を使う
interface Needle {
  id: string;
  fact: string;   // コンテキストに埋め込む一意な事実
  answer: string; // 正解(完全一致で判定)
}
 
const NEEDLES: Needle[] = [
  { id: "n01", fact: "デプロイ識別子 DEPLOY_VERSION は v9137 である。", answer: "v9137" },
  { id: "n02", fact: "夜間バッチの同時実行上限 MAX_CONCURRENCY は 4 である。", answer: "4" },
  { id: "n03", fact: "リトライ最外層の冪等キー接頭辞は job- である。", answer: "job-" },
  // … 実運用では12件をID順に並べる
];
 
// フィラー(意味のある無害な散文)で目標詰め率まで薄める
function buildContext(needles: Needle[], filler: string, targetTokens: number): string {
  const facts = needles.map((n, i) => `[fact ${i}] ${n.fact}`);
  // 浅い・中盤・末尾に分散配置(中盤に最も脆いものを置く)
  const third = Math.ceil(facts.length / 3);
  const head = facts.slice(0, third);
  const mid = facts.slice(third, third * 2);
  const tail = facts.slice(third * 2);
  const chunks: string[] = [...head];
  let approx = head.join("\n").length / 3.5; // ざっくりトークン概算
  while (approx < targetTokens * 0.5) { chunks.push(filler); approx += filler.length / 3.5; }
  chunks.push(...mid);
  while (approx < targetTokens * 0.9) { chunks.push(filler); approx += filler.length / 3.5; }
  chunks.push(...tail);
  return chunks.join("\n\n");
}
 
async function probeRecall(fillTokens: number): Promise<number> {
  const context = buildContext(NEEDLES, FILLER_PARAGRAPH, fillTokens);
  const question =
    "以下の資料から、各 fact に書かれた値だけを id とともに JSON 配列で返してください。" +
    "推測は禁止。資料にないものは null。\n\n" + context;
 
  const res = await client.messages.create({
    model: MODEL,
    max_tokens: 1024,
    messages: [{ role: "user", content: question }],
  });
 
  const text = res.content.find((b) => b.type === "text")?.text ?? "";
  let recalled = 0;
  for (const n of NEEDLES) {
    // 正解が完全一致で含まれ、かつ別の値に上書きされていないかを緩く判定
    if (text.includes(n.answer)) recalled++;
  }
  return recalled / NEEDLES.length;
}
 
// 詰め率を段階的に上げて曲線を取る
async function runCurve() {
  for (const fill of [30_000, 120_000, 300_000, 600_000, 900_000]) {
    const acc = await probeRecall(fill);
    console.log(`fill≈${fill}\trecall=${(acc * 100).toFixed(0)}%`);
  }
}

FILLER_PARAGRAPH には、実際に自分がコンテキストへ渡している素材に似た散文(ドキュメント抜粋など)を使うのが肝心です。ランダム文字列で薄めると、モデルにとって「無意味なノイズ」と「意味はあるが今回は不要な文脈」の違いが消えてしまい、実運用の劣化を過小評価します。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
ハードエラー型から静かな劣化型へ、失敗の形が反転した理由と、それを見逃さない probe の作り方
詰め率と事実想起のずれを測る needle probe と、実効55%を境に崩れ始める、私のパイプラインでの劣化曲線の実測値
スロットを審査する admission policy(Before/After)と、有効トークン単価でコストの静かな増加を止める設計
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-07-03
増えた枠を基線に混ぜない — 週次上限+50%の期限付きウィンドウでバックログを片づける設計
Claude Code の週次上限が7/13まで50%引き上げられました。期限付きの余裕を日常の実行頻度に混ぜず、終わりのあるバックログ消化だけに使うためのバーストキュー設計と、期限後の基線膨張を検出する台帳をコード付きでまとめました。
Claude Code2026-07-02
昨夜の無人セッションはどのモデルで走ったのか — Sonnet 5 既定化を機に整える実行モデルの記録と固定
Claude Code の既定モデルが Sonnet 5 に切り替わり、--model 未指定の無人セッションは静かにモデルが変わります。ヘッドレス出力からモデル名を防御的に抽出して追記記録し、既定ドリフトを検知して固定か追従かを判断する設計を動くコードでまとめました。
Claude Code2026-07-01
AIが出した数値と出典を、そのまま受け入れない — 検証専任サブエージェントで突き合わせるゲート設計
エージェントが生成した要約の数値と出典を、生成とは別のサブエージェントで一つずつ検証してから受け入れる設計を、動くTypeScriptと決定論的な再計算・出典突き合わせのコードでまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →