Agentive
AIエージェント活用

AIマルチモデルルーティング — タスクに最適なモデルを自動選択

約5分で読めます

AIマルチモデルルーティング — タスクに最適なモデルを自動選択

すべてのタスクに最高性能モデルを使うのはコストの無駄遣いだ。タスクの複雑度に応じてHaiku・Sonnet・Opusを自動で切り替えることで、品質を維持しながらAPI費用を最大80%削減できる。

モデル比較と使い分け基準

モデル得意領域入力コスト(/1M tokens)出力コスト(/1M tokens)レイテンシ
Haiku分類・抽出・フォーマット変換$0.25$1.25最速
Sonnetコード生成・要約・分析$3.00$15.00中速
Opus複雑な推論・創作・戦略立案$15.00$75.00低速

コスト差は最大60倍。ルーティングの精度がそのまま月額コストに直結する。

ルーティングロジックの実装

from anthropic import Anthropic

client = Anthropic()

def classify_task(user_input: str) -> str:
    """タスクの複雑度を判定してモデルを選択する"""
    # 第1段階: ルールベース判定(API呼び出し不要)
    simple_patterns = ["翻訳して", "要約して", "JSON変換", "分類して"]
    if any(p in user_input for p in simple_patterns):
        return "claude-haiku-4-5-20250901"

    complex_patterns = ["戦略を立てて", "設計して", "レビューして", "分析して"]
    if any(p in user_input for p in complex_patterns):
        return "claude-opus-4-6-20250901"

    # 第2段階: Haikuで複雑度スコアを判定
    response = client.messages.create(
        model="claude-haiku-4-5-20250901",
        max_tokens=10,
        messages=[{
            "role": "user",
            "content": f"タスクの複雑度を1-10で数値のみ回答: {user_input}"
        }]
    )
    score = int(response.content[0].text.strip())

    if score <= 3:
        return "claude-haiku-4-5-20250901"
    elif score <= 7:
        return "claude-sonnet-4-5-20250514"
    else:
        return "claude-opus-4-6-20250901"

def route_and_execute(user_input: str) -> str:
    """最適モデルにルーティングして実行"""
    model = classify_task(user_input)
    response = client.messages.create(
        model=model,
        max_tokens=4096,
        messages=[{"role": "user", "content": user_input}]
    )
    return response.content[0].text

コスト最適化のシナリオ

月間100万リクエストを処理する場合の比較:

戦略月額コスト(概算)品質
全Opus$9,000最高
全Sonnet$1,800
ルーティング適用$1,200最高(タスク別最適)
全Haiku$150

ルーティング適用時の想定比率: Haiku 60% / Sonnet 30% / Opus 10%。多くのリクエストは単純な分類・抽出であり、Haikuで十分対応できる。

フォールバック設計

モデル障害やレート制限に備えた多段フォールバック:

FALLBACK_CHAIN = {
    "claude-opus-4-6-20250901": ["claude-sonnet-4-5-20250514", "claude-haiku-4-5-20250901"],
    "claude-sonnet-4-5-20250514": ["claude-haiku-4-5-20250901"],
    "claude-haiku-4-5-20250901": []
}

async def execute_with_fallback(model: str, messages: list) -> str:
    chain = [model] + FALLBACK_CHAIN.get(model, [])
    for m in chain:
        try:
            return await call_api(m, messages)
        except (RateLimitError, APIError) as e:
            logger.warning(f"{m} failed: {e}, trying next")
    raise RuntimeError("All models exhausted")

品質モニタリング

ルーティングの精度を継続的に検証する仕組みも必要だ。Haikuに振ったタスクの出力品質が低ければ、自動でSonnetに昇格させる。逆にOpusに振ったタスクが単純すぎれば、次回からSonnetに降格させる。このフィードバックループがコスト最適化の鍵となる。

まとめ

マルチモデルルーティングは「ルールベース判定 + AI複雑度スコア + フォールバック」の3層で構築する。適切に実装すれば、品質を落とさずにAPI費用を60-80%削減できる。

関連記事

A

Agentive 編集部

AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。