生成AI入門 2026.04.19
【2026年版】Claude Opus・Sonnet・Haiku 違いと選び方|料金表・速度比較・コード例
2026年の現行モデル比較表
「Claude 3」は2024年のブランド名です。2026年現在の正しいモデルIDは以下の通りです。
| モデル | モデルID | 入力 /1M | 出力 /1M | 速度 | 向いているタスク |
|---|---|---|---|---|---|
| Haiku 4.5 | claude-haiku-4-5-20251001 | $0.80 | $4.00 | ◎最速 | 分類・要約・定型処理 |
| Sonnet 4.5 | claude-sonnet-4-5 | $3.00 | $15.00 | ○速い | 記事・コード・分析 |
| Opus 5 | claude-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%割引)で試す
あわせて読みたい
- Claude Sonnet APIコスト完全解説|トークン計算・バッチ割引・月額試算
- 【2026年版】Claudeプラン料金比較|無料/Pro/API/Teamを月額で選ぶ方法
- Claude 200Kトークンの実用ガイド|コスト計算・大規模処理コード