LLM コストを減らす 7 つの手法 (優先順位つき)#
LLM のコストは設計次第で 10 倍変わる。同じ体験を 1/10 のコストで提供することは珍しくない。効果の大きい 7 つの手法を優先順位付きで紹介。
効果の大きさマップ#
flowchart LR
H[効果 大] --> C[プロンプトキャッシュ活用]
H --> M[モデル使い分け]
M2[効果 中] --> S[短いプロンプト]
M2 --> J[JSON Mode で出力圧縮]
M2 --> F[失敗時のフォールバック]
L[効果 小] --> B[バッチ化]
L --> T[ストリーミング早期停止]
1. プロンプトキャッシュを活かす(効果: 最大)#
ヒット時はコストが 1/2〜1/10 になる。システムプロンプト・ツール定義・固定部分を先頭に寄せ、変わるものは末尾に。詳しくは Techniques の「プロンプトキャッシュを壊さない書き方」を参照。
2. モデルを使い分ける(効果: 大)#
全てを最上位モデル(gpt-4o / claude-opus)で処理するのは無駄。タスクに応じて小さいモデルを使う。
| タスク | 推奨モデル階層 |
|---|---|
| ルーティング・分類 | 小さいモデル(haiku / gpt-4o-mini) |
| 要約・翻訳 | 中位モデル(sonnet / gpt-4o) |
| 複雑な推論・設計 | 最上位モデル(opus) |
flowchart TD
I[入力] --> R[ルーティング<br/>小さいモデル]
R -->|単純| S[小さいモデル<br/>で回答]
R -->|中程度| M[中位モデル]
R -->|複雑| L[最上位モデル]
3. プロンプトを短くする(効果: 中)#
不要な敬語、冗長な指示、使われていない few-shot を削る。500 トークン削れば、毎リクエストでコスト減。
- システムプロンプトを定期的に棚卸し
- Few-shot は 3 件まで(それ以上は効果逓減)
- 否定形は肯定形に(文字数も減る)
4. JSON Mode で出力を圧縮(効果: 中)#
文章で返させるより JSON で返させる方が、トークン数が少ない。パースも楽。
# 長い文章出力: ~200 トークン
# JSON 出力: ~80 トークン
5. フォールバックで高コスト呼び出しを減らす(効果: 中)#
全てのリクエストを LLM に投げるのではなく、ルールベースで処理できるものは LLM を呼ばない。
- よくある質問は FAQ マッチング
- 明らかにエラーな入力は early return
- キャッシュからの返却
6. バッチ API を使う(効果: 小〜中)#
即時性が不要な処理は、バッチ API で 50% 割引(OpenAI・Anthropic とも提供)。
- ユーザーインタラクションには使えない
- ログ分析・大量処理には向く
7. ストリーミングで早期停止(効果: 小)#
ユーザーが途中で画面を閉じたとき、アップストリームも止める。放置すると全文まで生成される。
監視すべき指標#
flowchart LR
D[日次ダッシュボード] --> M1[総コスト]
D --> M2[リクエスト数]
D --> M3[平均トークン数]
D --> M4[モデル別内訳]
D --> M5[キャッシュヒット率]
- 総コスト / 日: 予算に対して
- リクエスト 1 件あたりのコスト: 設計の効率性
- モデル別内訳: 想定と合っているか
- キャッシュヒット率: 70% 以上を目指す
- 失敗率 × リトライ回数: 無駄コストの源
アンチパターン#
- 計測なしで最適化: どこが高いか分からないまま削る
- 全てを 1 つのモデルに集約: 用途別の使い分けができない
- キャッシュを無視: タイムスタンプ等で無効化し続ける
- 早期最適化: プロトタイプ段階で最適化して可読性を捨てる
まとめ#
コスト最適化はプロンプトキャッシュとモデル使い分けの 2 つで 80% が決まる。まずこの 2 つから始める。他の手法は計測結果を見て必要に応じて。