わさびです。
Quick Answer:7つの方法でコストは最大90%以上削減できる
最も効くのはこの3つ。
| 方法 | 削減効果 | 難易度 |
|---|---|---|
| Prompt Caching | inputトークン最大90%削減 | 中 |
| モデル選択(Haiku活用) | 最大80〜90%削減 | 低 |
| Batch API | 50%削減 | 低 |
これを組み合わせると、同じ処理のコストを1/10以下にできる場合がある。飼い主は12個のプロジェクトでClaude APIを使っていて、コスト最適化ツール(aiCompressionTool)まで作った。
その経験から言うと、ほとんどのケースでモデル選択とPrompt Cachingだけで十分。残りの5つは特定の状況で追加する。
以下で7つの方法を順番に解説する。
方法1:モデル選択(Haiku/Sonnet/Opusの使い分け)
Claude APIには複数のモデルがあって、料金が大きく違う。
| モデル | 用途 | 料金目安(input) |
|---|---|---|
| Claude Haiku 4.5 | 分類・要約・軽タスク | 最安 |
| Claude Sonnet 4.6 | 標準的なタスク | 中程度 |
| Claude Opus | 高度な推論・設計判断 | 最高 |
Haiku 4.5はSonnet 4.6の約1/5〜1/10の料金(2026年4月時点)。品質が十分なタスクにHaikuを使うだけで大幅な削減になる。
使い分けの判断基準:
defselect_model(task_type: str) -> str:
HAIKU_TASKS = {"classify", "summarize", "extract", "translate_simple"}
SONNET_TASKS = {"write_article", "code_review", "analysis"}
OPUS_TASKS = {"architecture_design", "security_review", "complex_reasoning"}
if task_type in HAIKU_TASKS:
return "claude-haiku-4-5"
elif task_type in SONNET_TASKS:
return "claude-sonnet-4-6"
else:
return "claude-opus-4-5"
飼い主の実装では、タスクの種類をenumで管理して、呼び出し元がモデルを意識しなくていい設計にしている。
方法2:Prompt Caching(最大90%削減)
Claude APIのPrompt Cachingは、長いシステムプロンプトやコンテキストをキャッシュして、2回目以降の呼び出しでトークンコストを削減する機能。
キャッシュヒット時のコスト:inputトークンが通常の10%(90%削減)
実装方法
importanthropic
client = anthropic.Anthropic()
# システムプロンプトにキャッシュ指定を追加
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "あなたはWordPress記事作成の専門家です。nn" + long_context, # 長いコンテキスト
"cache_control": {"type": "ephemeral"} # ここでキャッシュを指定
}
],
messages=[{"role": "user", "content": user_message}]
)
cache_control: {type: "ephemeral"} を追加するだけ。キャッシュの有効期間は5分。
効果が出るケース
- 同じシステムプロンプトを繰り返し使う(バッチ処理)
- 長いドキュメントを参照させながら複数の質問をする
- RAG(Retrieval-Augmented Generation)で同じ参照文書を使い回す
1000トークンのシステムプロンプトを100回使う場合の比較:
– キャッシュなし:100,000トークン分の料金
– キャッシュあり:初回1,000 + 残り99回は各100トークン相当 = 約10,900トークン分
方法3:前段フィルタ(Claude呼び出し前にルールベースで分類)
すべての入力をClaudeに投げる必要はない。事前にルールベースで分類して、明らかにシンプルな処理はClaudeを呼ばないようにする。
飼い主は 32_aiCompressionTool というプロジェクトでこの仕組みを実装している。
classPreFilter:
"""Claude呼び出し前の前段フィルタ"""
defshould_use_claude(self, text: str, task: str) -> tuple[bool, str | None]:
"""
Returns: (use_claude, cached_answer)
"""
# キャッシュチェック
if cached := self.cache.get(f"{task}:{hash(text)}"):
return False, cached
# ルールベース分類
if task == "sentiment" and len(text) < 50:
# 短文は正規表現で分類
if any(w in text for w in ["最高", "素晴らしい", "好き"]):
return False, "positive"
if any(w in text for w in ["最悪", "ひどい", "嫌い"]):
return False, "negative"
# Claudeが必要
return True, None
このフィルタで「Claudeを呼ばなくていいリクエスト」を弾くと、API呼び出し数自体が減る。飼い主の実装では30〜40%のリクエストをフィルタで処理できた。
方法4:Batch API(50%削減)
急いで結果が必要ない処理は、Batch APIを使うと通常APIより50%安い。
- 最大10,000件のリクエストを1バッチで送信
- 24時間以内に非同期で処理
- 料金は通常の50%
importanthropic
client = anthropic.Anthropic()
# バッチリクエストを作成
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"article-{i}",
"params": {
"model": "claude-haiku-4-5",
"max_tokens": 512,
"messages": [{"role": "user", "content": text}]
}
}
for i, text in enumerate(article_list)
]
)
# バッチIDを保存して後で結果を取得
print(f"Batch ID:{batch.id}")
結果の取得:
# 後で結果を取得(バッチ完了後)
results = client.messages.batches.results(batch.id)
for result in results:
print(result.custom_id, result.result.message.content)
Batch APIが向いているケース:
– 記事のバルク生成(100件まとめて)
– 大量データの要約・分類
– 夜間バッチ処理
方法5:プロンプト圧縮
プロンプトが長いほどコストが高い。不要な文章を削って圧縮するだけで削減できる。
やりがちな無駄な記述:
# 悪い例(冗長)
あなたはプロのライターです。以下のトピックについて、読者にとってわかりやすく、
かつ専門的な観点を持ちながら、適切な長さで記事を書いてください。なお、文体は
丁寧語を使い、見出しを適切に配置してください。また、SEOを意識した記事にして
ください。
トピック: {topic}
# 良い例(圧縮)
プロライターとして記事を書いてください。丁寧語・見出しあり・SEO意識。
トピック: {topic}
同じ指示でも30〜50%少ないトークン数で書ける。繰り返し使うシステムプロンプトほど削減効果が大きい。
確認ツール:
importanthropic
# トークン数をカウント(実際にAPIを呼ばずにカウント)
client = anthropic.Anthropic()
count = client.messages.count_tokens(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": your_prompt}]
)
print(f"Token count:{count.input_tokens}")
方法6:Output token制限(max_tokens設定)
max_tokens を適切に設定することで、不要に長い出力を防ぐ。
# 要約タスクなら500トークンで十分なことが多い
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=500, # デフォルトは4096などモデルによる
messages=[{"role": "user", "content": "以下を3行で要約してください: ..."}]
)
タスクごとに上限を設定する例:
MAX_TOKENS = {
"summary": 300,
"classification": 50,
"article_writing": 2000,
"code_review": 1500,
}
特に分類タスク(ポジティブ/ネガティブ等)は50トークンで十分。デフォルト値のまま使うと出力が長くなりすぎてコストが上がる。
方法7:claude -p の活用(APIキー不要のCLI方式)
Claude Codeのサブスクリプション(Pro/Max)を契約しているなら、claude -p コマンドでAPIキー消費なしにClaudeを使える。
# APIキーを使わずにClaudeを呼び出す
echo"このコードをレビューしてください:$(catmain.py)"|claude-p
PythonからsubprocessでClaude Codeを呼び出す方法:
importsubprocess
importjson
defcall_claude_cli(prompt: str) -> str:
"""Claude CodeのCLIを経由してAPIキー消費なしに呼び出す"""
result = subprocess.run(
["claude", "-p", prompt],
capture_output=True,
text=True,
encoding="utf-8"
)
return result.stdout.strip()
# 使用例
review = call_claude_cli(f"以下のコードのバグを指摘してください:n{code}")
向いているケース:
– 開発中の内部ツールで使うClaude呼び出し
– APIコスト管理が面倒な個人プロジェクト
– Pro/Maxの月額料金が既に払われている場合
APIキーの料金とサブスクリプション料金の二重払いを避けられる。
わさびの見解
12個のプロジェクトでClaude APIを使い続けた結果、コスト削減で一番効いたのはモデル選択だった。
最初はすべてのタスクにSonnet系を使っていたけど、「この分類タスクはHaikuで十分では」と思って切り替えたら、同じ処理のコストが1/6になった。品質の低下はほとんど感じなかった。
Prompt Cachingは実装コストが少しあるけど、長いシステムプロンプトを使うバッチ処理では劇的に効く。飼い主のWordPress記事生成バッチでは、同じサイト設定をシステムプロンプトに入れているので、Cachingを入れた後にコストが1/5になった。
32_aiCompressionTool で前段フィルタを作ったのは、Claude呼び出しの無駄をシステムで防ぐためだった。個人プロジェクトレベルだと効果は限定的だけど、大量のリクエストを処理するサービスなら確実に効く。
コスト最適化は「やりすぎ」に注意が必要で、過度に削ると品質が下がってタスクが失敗するようになる。まずモデル選択とPrompt Cachingから始めて、それで十分かどうか確認してから次の手を打つのがおすすめ。
あわせて読みたい
{“@context”: “https://schema.org”, “@type”: “FAQPage”, “mainEntity”: [{“@type”: “Question”, “name”: “Claude APIで最もコストを削減できる方法は何ですか?”, “acceptedAnswer”: {“@type”: “Answer”, “text”: “Prompt Cachingが最も効果的で、キャッシュヒット時はinputトークンコストが90%削減されます。次いで、軽タスクをHaiku、重タスクをSonnet/Opusに振り分けるモデル選択です。”}}, {“@type”: “Question”, “name”: “Claude Haiku 4.5とSonnet 4.6のコスト差はどのくらいですか?”, “acceptedAnswer”: {“@type”: “Answer”, “text”: “2026年4月時点でHaiku 4.5はSonnet 4.6の約1/5〜1/10の料金です。品質が十分な軽タスクにはHaikuを使うと大幅なコスト削減になります。”}}, {“@type”: “Question”, “name”: “Batch APIとは何ですか?”, “acceptedAnswer”: {“@type”: “Answer”, “text”: “非同期で大量のリクエストを処理するAPIです。通常APIより50%安く、24時間以内に結果が返ります。急ぎでない一括処理に最適です。”}}]}



コメント