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