CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/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-optimization25production87sonnet-4-62haiku-4-52

プレミアム記事

2014年から個人で iOS / Android アプリを作り続けてきました。累計 5,000万ダウンロードのなかで一度だけ「もう続けられないかもしれない」と思ったことがあります。AdMob の eCPM が一夜で半分になり、月収が 100 万円から 50 万円台に落ちた朝のことです。あのとき身体が冷たくなる感覚を覚えたのは、収益が減ったからではなく、複利で増えていくはずだったコストが、コントロール外で歪み始めたと直感したからでした。

Claude API を 4 つの Lab サイト(Claude Lab / Gemini Lab / Antigravity Lab / Rork Lab)の自動投稿パイプラインに組み込んでから、同じ匂いをもう一度感じました。Sonnet 4.6 はたしかに賢いのですが、全リクエストを Sonnet に固定したまま 1 日 16 本の記事を書かせ続けると、月の請求が静かに 1 桁上がっていきます。逆に Haiku 4.5 だけで回そうとすると、メンバーシップ記事の品質シグナルが落ち、article_gate.py を通過しない記事が増えてしまいました。

このジレンマは「どちらか選ぶ」では解けません。リクエストの複雑度を事前に判定し、その複雑度に応じて最適なモデルを自動選択する設計 — つまりインテリジェントモデルルーティング — でしか解けないものです。本記事は、Dolice Labs 4 サイト並行運用と iOS / Android アプリのカスタマーサポート bot で、実際に 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% 復旧などの実数値
Dolice Labs 4 サイト並行運用と iOS/Android アプリ 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 のレスポンスをセマンティックキャッシュで再利用する本番設計を、しきい値の決め方・汚染防止・マルチテナント分離・観測性まで一気通貫で解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →