Prompt Caching 完全ガイド:仕組み、コストモデル、実践的な導入方法
Prompt caching を使うと、繰り返し現れるプレフィックスの入力 Token コストを1桁台まで下げられます。本記事では Anthropic と OpenAI のキャッシュ実装の違い、本当にコスト削減になるシナリオ、そして統一ゲートウェイを使って複数モデルで同じキャッシュ戦略を再利用する方法を解説します。
Prompt caching が解決する課題
ほとんどの LLM 呼び出しの入力には、毎回同じ部分がかなり含まれています。システムプロンプト、few-shot の例、検索で取得した固定ドキュメント、ツール定義(tool schema)などです。通常の課金では、こうした繰り返しの内容に対して毎回入力 Token の料金を払い、毎回 attention を計算し直すことになります。
Prompt caching の考え方はシンプルです。サーバー側でこのプレフィックスの計算結果を保存しておき、次のリクエストでプレフィックスが完全に同じであればそのまま再利用し、新しく追加された部分だけを再計算します。Anthropic は [prompt caching のドキュメント](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)でこれをレイテンシとコストを下げる手段として位置づけており、OpenAI 側では自動 prompt caching や batch 割引などの仕組みが対応します。
本当にコスト削減になるシナリオ
Prompt caching は「オンにすれば節約できる」スイッチではありません。明確な損益分岐点があります。同じプレフィックスが再利用される回数 × プレフィックス長 > キャッシュ書き込みの追加コスト です。
- 長いシステムプロンプト + マルチターン対話:システムプロンプトが数千 Token、会話のターン数が多い場合はほぼ確実に得になります。
- RAG + 固定ドキュメント集:変わらないポリシードキュメントやナレッジベースをプレフィックスに置き、ユーザーの質問だけを変化させます。
- コード Agent / ツール呼び出し:ツール schema やリポジトリ構造の説明は通常、毎回の呼び出しで繰り返されます。
- 単発・短いプレフィックスの呼び出し:キャッシュ書き込みのコストが節約額を上回る可能性があるため、無理にキャッシュしないでください。
キャッシュを無効化する5つのよくあるミス
- プレフィックスにタイムスタンプやランダム ID を混入させる:固定位置に1つでも
Date.now()を置くと、プレフィックス全体が変わってしまいます。 - システムプロンプトを動的に結合する:ユーザーごとに異なるプレフィックスになると、キャッシュヒット率はほぼ 0 まで薄まります。
- 履歴メッセージを要約圧縮する:毎ターン書き換えるとプレフィックスが不安定になります。
- ユーザー入力を先頭に置く:最もよくある構造上のミスです。変数はできるだけ後ろに寄せるべきです。
- 請求額だけを見てヒット率を見ない:ヒット率の指標がないと、キャッシュの効果をまったく帰属分析できません。
複数モデル間で同じキャッシュ戦略を再利用する
製品で Claude と GPT を併用している場合、キャッシュのセマンティクスはベンダー間で完全には一致しません(誰がキャッシュのブレークポイントを宣言するか、TTL の長さ、課金方法など)。この適配を1つの統一ゲートウェイの背後にまとめておくと、ビジネスコードはプロンプト構造を1つだけ維持すればよく、モデルを切り替える際に書き直す必要がありません。
Admesh のゲートウェイは下流に対して OpenAI 互換プロトコルを維持しているため、同じプロンプト構造のまま model フィールドだけを変えてベンダー間を切り替えられます。キャッシュヒット時の課金基準は請求の usage 明細に統一的に反映されるため、ベンダーごとに課金基準を個別に接続する必要はありません。
Admeshの最新料金(抜粋)
料金はAdmeshの最新設定に基づくUSD建て、100万トークンあたりの価格です。全リストはモデルカタログをご覧ください。
| モデル名とID | コンテキストウィンドウ | 価格を入力 / 1M | 販売価格 / 1M | キャッシュヒット / 1M |
|---|---|---|---|---|
Claude Fable 5 anthropic/claude-fable-5 | 1M | $3.25 / 1M | $16.25 / 1M | $0.325 / 1M |
Claude Fable 5.1 anthropic/claude-fable-5-1 | 1M | $3.25 / 1M | $16.25 / 1M | $0.08125 / 1M |
Claude Haiku 4.5 anthropic/claude-haiku-4-5-20251001 | 200K | $0.325 / 1M | $1.625 / 1M | $0.0325 / 1M |
Claude Haiku 5.5 anthropic/claude-haiku-5-5 | 1M | $0.0325 / 1M | $0.1625 / 1M | $0.00325 / 1M |
Claude Opus 4.5 anthropic/claude-opus-4-5-20251101 | 200K | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.6 anthropic/claude-opus-4-6 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.7 anthropic/claude-opus-4-7 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.8 anthropic/claude-opus-4-8 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
上記は標準のパブリックチャネルの単価であり、Tokenの実際の使用量に基づいて精算されます。 モデル一覧をすべて表示する
実践チェックリスト
- プロンプトを「安定プレフィックス / 半安定部分 / ユーザー入力」の3段に分割し、安定部分を先頭に置く。
- 安定プレフィックスにタイムスタンプ、乱数、ユーザー ID が含まれないことを確認する。
- 請求の中でキャッシュの読み書き Token を個別に集計し、実際のヒット率に換算する。
- 固定の評価リクエストセットで定期的にリグレッションを行い、プロンプト変更でヒット率が崩れていないことを確認する。
- キャッシュ効果に下限を設ける(例:5% を下回ったらプロンプト構造をロールバックする)ことで、最適化のための最適化を避ける。
