CLAUDE LABEN
MCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されましたMCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されました
記事一覧/API & SDK
API & SDK/2026-04-12上級

Claude API インテリジェントモデルルーティング — Sonnet 4.6 / Haiku 4.5 自動選択でコストと品質を両立する設計パターン

リクエスト内容に応じてClaude Sonnet 4.6とHaiku 4.5を自動切り替えするインテリジェントルーティングの実装。分類器の設計からサーキットブレーカー、コスト監視まで本番運用パターンを網羅

claude-api81model-routingcost-optimization26production87sonnet-4-62haiku-4-52

プレミアム記事

請求ダッシュボードを開いて、前月比 1.8 倍という数字を見た朝がありました。トラフィックは 1 割しか増えていません。増えていたのは、Sonnet 4.6 に投げたリクエストの割合だけでした。

原因はすぐに分かりました。「品質が落ちるのが怖い」という理由だけで、短い分類も定型の要約も、すべて上位モデルに固定していたのです。

その反動で、今度はコストを恐れて全部を Haiku 4.5 に寄せた時期もありました。すると本当に推論が要る少数のリクエストで精度が落ち、公開前の品質チェックに弾かれる回数が増えます。再実行のぶんを足し戻すと、節約になっていませんでした。

このジレンマは「どちらを選ぶか」では解けません。リクエストの複雑度を事前に判定し、その複雑度に応じて最適なモデルを自動選択する設計 — インテリジェントモデルルーティング — でしか解けないものです。

以下は、技術メディアの運用基盤と iOS / Android アプリのカスタマーサポート bot という、性格の違う 2 系統で 6 ヶ月以上走らせてきた実装です。判定器の設計、サーキットブレーカー、そして「閾値をどうやってデータから決めるか」まで、個人開発で運用してはじめて気づいた落とし穴ごと書き残しておきます。

モデルルーティングが必要な理由:コストと品質のトレードオフを見える化する

まず、なぜモデルルーティングが重要なのかを数字で理解しましょう。

Claude API の価格体系(2026年時点):

  • Sonnet 4.6: 入力トークン $3/100万トークン、出力トークン $15/100万トークン
  • Haiku 4.5: 入力トークン $0.80/100万トークン、出力トークン $4/100万トークン

Sonnet は Haiku の約 3〜4 倍のコストがかかります。月間 1000万トークンを処理するアプリケーションの場合:

  • 全て Sonnet で処理: 約 $7,500/月
  • 全て Haiku で処理: 約 $2,000/月(ただし品質低下のリスク)
  • インテリジェントルーティング(複雑度が高いリクエストの 40% を Sonnet、残り 60% を Haiku で処理): 約 $3,800/月

つまり、ルーティングを導入することで Sonnet オンリーに比べて約 49% のコスト削減ができます。かつ複雑な問題は高精度なモデルで処理するため、品質はむしろ向上します。

なぜこのアプローチを好むのか

私が本番プロジェクトでこのパターンを採用する理由は3つです。

第一に、単純で予測可能です。複雑な A/B テストや動的プロンプトの工夫を積み重ねるよりも、「このリクエストは Haiku で十分か」という明確な判定基準を持つことで、カオスを避けられます。

第二に、問題が発生したときの原因特定が容易です。精度が低かった場合、「ルーティング判定が間違っていた」か「選択されたモデルの問題か」かを切り分けられます。

第三に、組織全体に説明しやすいです。経営層に対しても「複雑度に応じてモデルを選び分けている」というメッセージは理解しやすく、継続的な投資を得やすくなります。

リクエスト複雑度の判定:分類器の基本設計

インテリジェントルーティングの心臓部は、リクエストの複雑度を判定する分類器です。「複雑度が高い」とは、何を意味するでしょう?

実装現場から見ると、以下の要素がリクエスト複雑度に関連します。

  • 入力内容の量: テキストが長いほど、より詳細な理解が必要
  • 推論ステップの多さ: 「AをもとにBを判定し、その結果からCを予測する」のような多段階推論
  • 専門的な知識の要求: 特定の分野の専門用語や領域知識が必要か
  • 曖昧性の度合い: 定義が明確か、それとも解釈の幅が広いか
  • 出力品質への依存度: ビジネスインパクトが大きい判断か、それとも参考程度か

実装の観点からは、複雑度判定戦略は3段階で設計するのが実用的です。

レイヤー 1: キーワード&パターンマッチング(最軽量)

最初の判定は、リクエストに含まれるキーワードやパターンから、単純な規則で実施します。これは計算コストがほぼゼロで、レイテンシに影響しません。

// Layer 1: キーワード・パターンベース分類
function isComplexRequestByKeywords(message) {
  const complexKeywords = [
    'analyze', 'compare', 'evaluate', 'impact', 'strategy',
    'architecture', 'design', 'optimize', 'research',
    '論文', '分析', '比較', '評価', '戦略', '設計',
    'アーキテクチャ', 'レビュー', '改善案'
  ];
  
  const messageUpper = message.toUpperCase();
  const matchCount = complexKeywords.filter(kw => 
    messageUpper.includes(kw.toUpperCase())
  ).length;
  
  // 複雑なキーワードが3個以上含まれていたら複雑判定
  if (matchCount >= 3) {
    return true;
  }
  
  // コードレビュー、アーキテクチャ設計は確実に複雑と判定
  const structuralPatterns = [
    /code\s+review/i,
    /architecture\s+design/i,
    /refactor/i,
    /performance\s+(optimization|improvement)/i
  ];
  
  return structuralPatterns.some(pattern => pattern.test(message));
}
 
// テスト
console.log(isComplexRequestByKeywords('Update the greeting message'));
// → false
 
console.log(isComplexRequestByKeywords('Analyze the performance impact and strategy for optimization'));
// → true

なぜこの方法を最初に使うのか:計算が速く、ほぼ確実に複雑さを判定できるケース(コードレビュー、アーキテクチャ相談など)を先に捕捉して、不要な計算を削減します。

レイヤー 2: トークン数と構造化情報(軽量分析)

キーワードマッチングで判定できなかった場合、より精密な分析を行います。

// Layer 2: トークン数と構造に基づく判定
function isComplexRequestByTokens(message) {
  // Claude API の tokenize エンドポイントを使用
  // (実装では Anthropic SDK の計算を利用)
  
  const tokenCount = Math.ceil(message.length / 4); // 概算(実際はAPIで正確に取得)
  
  // 1000トークン以上は複雑な可能性が高い
  if (tokenCount >= 1000) {
    return true;
  }
  
  // JSON やコードブロックが含まれている場合、構造化分析が必要
  const hasJsonOrCode = /\{[\s\S]*?\}|\[[\s\S]*?\]|```[\s\S]*?```/m.test(message);
  const hasMultipleSections = (message.match(/^#{1,3}\s+/gm) || []).length >= 3;
  
  // 複雑な構造化データ + 中程度のボリューム
  if (hasJsonOrCode && tokenCount >= 300) {
    return true;
  }
  
  // 複数セクション + 中程度のボリューム
  if (hasMultipleSections && tokenCount >= 500) {
    return true;
  }
  
  return false;
}
 
// テスト
console.log(isComplexRequestByTokens('What is 2+2?'));
// → false
 
console.log(isComplexRequestByTokens(`
  Please review this API endpoint:
  \`\`\`
  POST /api/users
  {
    "name": "string",
    "email": "string",
    "preferences": {
      "notifications": boolean,
      "privacy": "public" | "private"
    }
  }
  \`\`\`
  What are the security implications?
`));
// → true

重要な発見: 実装を通じて気づいたのは、トークン数 + 構造化データの有無の組み合わせが、実際の必要な推論能力とよく相関するということです。公式ドキュメントではこの点は明示されていませんが、本番環境で複数プロジェクトを運用してみると非常に実用的です。

レイヤー 3: セマンティック分析(精密分析)

レイヤー 1 と 2 で判定できなかった「微妙なケース」を処理するため、セマンティック分類を使用します。ただし、このレイヤーは追加のモデル呼び出しが発生するため、実装には注意が必要です。

// Layer 3: セマンティック分類(微妙なケースのみ対象)
async function classifyBySemantic(message, client) {
  // 注意: このレイヤーはコスト増加を招く。
  // 本番環境では「判定が必要なリクエストの 20% 以下」に限定すること
  
  const classificationPrompt = `
You are a request complexity classifier. Analyze this user request and determine:
1. Does it require multi-step reasoning? (yes/no)
2. Does it require specialized domain knowledge? (yes/no)
3. Is the expected output quality critical to the user? (yes/no)
 
Request: "${message}"
 
Respond ONLY with JSON: {"multiStep": boolean, "specialized": boolean, "critical": boolean}
  `.trim();
  
  try {
    const response = await client.messages.create({
      model: 'claude-haiku-4-5-20251001', // Use Haiku even for classification
      max_tokens: 100,
      messages: [{
        role: 'user',
        content: classificationPrompt
      }]
    });
    
    const text = response.content[0].type === 'text' ? response.content[0].text : '{}';
    const result = JSON.parse(text);
    
    // 3つの複雑度指標のうち 2つ以上が true なら複雑判定
    const complexityScore = [
      result.multiStep,
      result.specialized,
      result.critical
    ].filter(Boolean).length;
    
    return complexityScore >= 2;
  } catch (error) {
    console.error('Semantic classification failed:', error);
    // 分類に失敗した場合は安全側に倒す(複雑と判定)
    return true;
  }
}

実装時の工夫: セマンティック分類自体も API 呼び出しであり、コストがかかります。そこで重要なのは、「レイヤー 1・2 で判定できなかった微妙なケースのみ」にこの処理を限定することです。実装では判定フローの外で統計を取り、「実際にレイヤー 3 が必要ですったケースは全体の何%か」を継続的に監視します。必要ないなら削除します。

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

この記事の続きを読む

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

この記事で得られること
判定タスクそのものを Haiku に固定して月 $1,500 のオーバーヘッドを 1/4 に圧縮する二段ルーティング設計
Sonnet 利用率 35→50% の閾値アラート・半開状態専用ヘルスチェック・キャッシュヒット率 12→64% 復旧などの実数値
閾値を勘で決めないためのシャドー評価ハーネスと、6 ヶ月の本番運用で見えた公式ドキュメント外の8つの落とし穴
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-07-13
Claude API の同時実行を束ねる — シングルフライトで重複推論とキャッシュ・スタンピードを防ぐ
同一プロンプトが同時に何度も Claude へ飛ぶ重複推論を、シングルフライト(request coalescing)で束ねる設計です。プロセス内・分散環境の実装、ジッター付きリトライ、負のキャッシュまで実測付きでまとめました。
API & SDK2026-05-29
Claude API のプロンプトキャッシュを 5m と 1h で二段に分ける — TTL を分けるとコストは下がり運用は安定する
Anthropic API の cache_control には 5 分と 1 時間という 2 種類の TTL があります。これを「静的な前提情報は 1h、可変な few-shot は 5m」と二段に分けて運用する設計を、私の本番ワークロードで観測した数値とともに整理しました。
API & SDK2026-04-29
Claude API のセマンティックキャッシュを本番投入する — 類似プロンプト判定としきい値設計、汚染防止
類似プロンプトへの応答を再利用するセマンティックキャッシュをClaude APIの本番に組み込む設計を一気通貫で解説します。embeddingと類似度しきい値の決め方、マルチテナント分離、キャッシュ汚染を防ぐガード層、フォールバックと劣化モード、効果を測る観測性の指標まで踏んだ地雷とともに紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →