生成AI入門 2026.04.19

【2026年版】Claude Opus・Sonnet・Haiku 違いと選び方|料金表・速度比較・コード例

タグ:Claude / 生成AI / 料金比較 / モデル選択 / 初心者向け

2026年の現行モデル比較表

「Claude 3」は2024年のブランド名です。2026年現在の正しいモデルIDは以下の通りです。

モデルモデルID入力 /1M出力 /1M速度向いているタスク
Haiku 4.5claude-haiku-4-5-20251001$0.80$4.00◎最速分類・要約・定型処理
Sonnet 4.5claude-sonnet-4-5$3.00$15.00○速い記事・コード・分析
Opus 5claude-opus-5$15.00$75.00△やや遅い研究・高品質長文

コスト比較(同じタスクを各モデルで実行した場合)

# model_cost_compare.py

MODELS = {
    "haiku": {
        "id": "claude-haiku-4-5-20251001",
        "input_per_1m": 0.80,
        "output_per_1m": 4.00,
    },
    "sonnet": {
        "id": "claude-sonnet-4-5",
        "input_per_1m": 3.00,
        "output_per_1m": 15.00,
    },
    "opus": {
        "id": "claude-opus-5",
        "input_per_1m": 15.00,
        "output_per_1m": 75.00,
    },
}

def cost(model: str, input_tokens: int, output_tokens: int) -> float:
    m = MODELS[model]
    return (
        input_tokens * m["input_per_1m"] / 1_000_000 +
        output_tokens * m["output_per_1m"] / 1_000_000
    )

# 代表的なタスクのコスト(1回あたり)
tasks = [
    ("メール要約(500入力/100出力)", 500, 100),
    ("ブログ記事生成(1500入力/800出力)", 1500, 800),
    ("コードレビュー(5000入力/500出力)", 5000, 500),
    ("長文論文分析(20000入力/2000出力)", 20000, 2000),
]

print(f"{'タスク':<30} {'Haiku':>10} {'Sonnet':>10} {'Opus':>10}")
print("-" * 65)
for label, inp, out in tasks:
    h = cost("haiku", inp, out)
    s = cost("sonnet", inp, out)
    o = cost("opus", inp, out)
    # 倍率
    ratio_s = s / h
    ratio_o = o / h
    print(f"{label:<30} ${h:>8.5f}  ${s:>8.5f}  ${o:>8.5f}")
    print(f"  {'倍率':>28}   {'基準':>7}  {ratio_s:>6.1f}x  {ratio_o:>6.1f}x")
タスク                          Haiku      Sonnet       Opus
-----------------------------------------------------------------
メール要約(500入力/100出力)  $0.00080  $0.00300  $0.01500
  倍率                            基準      3.8x     18.8x
ブログ記事生成(1500入力/800出力)$0.00440 $0.01650  $0.08250
  倍率                            基準      3.8x     18.8x

タスクに応じてモデルを自動切り替えする

# smart_router.py
# タスクの複雑さを判定して最適なモデルを選ぶ

import anthropic
import os
import re

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def estimate_complexity(prompt: str) -> str:
    """プロンプトからタスクの複雑さを簡易判定"""
    words = len(prompt.split())
    
    # 複雑さの指標
    has_code = any(kw in prompt.lower() for kw in ["コード", "実装", "バグ", "設計", "リファクタ", "code", "implement", "debug"])
    has_analysis = any(kw in prompt.lower() for kw in ["分析", "比較", "評価", "戦略", "analyze", "compare"])
    is_long = words > 300
    
    if is_long and (has_code or has_analysis):
        return "opus"
    elif has_code or has_analysis or words > 100:
        return "sonnet"
    else:
        return "haiku"

def smart_complete(prompt: str, force_model: str | None = None) -> dict:
    """タスクの複雑さに応じてモデルを自動選択"""
    model_key = force_model or estimate_complexity(prompt)
    model_id = MODELS[model_key]["id"]
    
    response = client.messages.create(
        model=model_id,
        max_tokens=1024,
        messages=[{"role": "user", "content": prompt}]
    )
    
    tokens_in = response.usage.input_tokens
    tokens_out = response.usage.output_tokens
    actual_cost = cost(model_key, tokens_in, tokens_out)
    
    return {
        "model": model_key,
        "model_id": model_id,
        "text": response.content[0].text,
        "cost_usd": actual_cost,
    }

# テスト
result = smart_complete("今日の天気はどうですか?")
print(f"選択: {result['model']} / コスト: ${result['cost_usd']:.5f}")
# → haiku

result = smart_complete("RustのlifetimeとBorrowCheckerの仕組みをコード例付きで解説して")
print(f"選択: {result['model']} / コスト: ${result['cost_usd']:.5f}")
# → sonnet

モデル選択のフローチャート

タスクの種類は?

├── メール返信・要約・タグ付け・定型文 ─────────→ Haiku(最安)
│   例: "このメールを3行で要約して"

├── 記事生成・コードレビュー・翻訳・Q&A ─────────→ Sonnet(推奨)
│   例: "FastAPIでCRUD APIを実装して"

└── 学術的分析・複雑な設計・高品質長文 ─────────→ Opus(最高品質)
    例: "機械学習アーキテクチャを比較分析して"

迷ったら → Sonnet から始める
大量処理 → Haiku + バッチ処理API(50%割引)で試す

あわせて読みたい

参考ソース