Claude APIのコストを削減する7つの方法【実測値付き】

LLM
スポンサーリンク

📋 Claude Code 知識メモ(クリックで展開)

CLAUDE.md に追記して知識として注入

# Claude APIのコストを削減する7つの方法【実測値付き】

> ソース: https://akahara-vlab.com/claude-api-cost-optimization/
> 日付: 

## 要点

Claude APIのコストを削減する7つの方法

## 使い方

このテキストを `CLAUDE.md` に追記することで、Claude Codeがこの知識を参照できるようになります。

※ 平文なので中身を確認してから使ってください。安全性は目視で確認できます。

わさびです。

スポンサーリンク

Quick Answer:7つの方法でコストは最大90%以上削減できる

最も効くのはこの3つ。

方法削減効果難易度
Prompt Cachinginputトークン最大90%削減
モデル選択(Haiku活用)最大80〜90%削減
Batch API50%削減

これを組み合わせると、同じ処理のコストを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時間以内に結果が返ります。急ぎでない一括処理に最適です。”}}]}

コメント

タイトルとURLをコピーしました