プロンプトキャッシングが
効く設計なら生成コストが下げられる

LLMのAPIを利用したサービスでは、同じシステムプロンプトを使うことが多いです。
たとえば、チャットボットを例にとると、ユーザーの発言が変わるたびにAPIへ送るプロンプトには、変わらないシステム指示・ツール定義・参照ドキュメントが毎回含まれています。
モデルがそれを毎回最初から計算し直するのでは、利用者が増えるほど、その無駄な計算が積み上がります。
プロンプトキャッシングは、この無駄をなくすために設計された技術です。

関連記事

1. KVキャッシュの再利用という発想

モデルがプロンプトを処理するとき、各トークンについてKey・Valueと呼ばれるベクトルを計算します。 これを「KVキャッシュ」といいます。 プロンプトキャッシングは、このKVキャッシュをサーバー側に選択的に保持しておきます。

プロンプトの先頭から続く、変化しない共通部分のことを「プレフィックス」といいます。

たとえばチャットボットで毎回送るシステム指示や、RAGで取得したドキュメントがこれにあたります。 ユーザーの発言はリクエストごとに変わりますが、その前に置かれた固定部分がプレフィックスです。

プロンプトキャッシングは、この部分のKV計算を再利用します。 次回の同じプレフィックスを含むリクエストで読み出します。 そうすれば、プレフィックス部分の行列演算を丸ごとスキップできます。

これなら、モデルの推論ロジックは変わらず、速くなるのは計算量が減るからで、出力の品質にも影響しません。

1.1. プレフィックスの完全一致という制約

ただし、キャッシュが効くためには条件があります。 プレフィックスの内容が完全に一致していること1。 スペース1文字・JSONキーの順序・ツール定義の並び替えだけで無効になります。

有効になるのは1,024トークン以上のプロンプトからで2、以降は128トークン単位でキャッシュが管理されます。

2. キャッシュヒットとトークン単価の割引

この機能の恩恵を直接受けるのは、LLM APIを使って本番サービスを構築している開発者です。

キャッシュヒット時のトークン単価は、通常の入力トークンより大幅に下がるからです。 OpenAIは最大50%引き、Anthropicは最大90%引きです3

ただし、両者の構造は異なります。 OpenAIはキャッシュの書き込みに追加料金を設けていません。 Anthropicはキャッシュ書き込み時に通常の25%増しの料金が発生します4。 その代わり読み出しは90%引きなので、同じキャッシュを2〜3回以上利用すれば元が取れます。

つまり、リクエストの頻度が高い用途ほどであれば、Anthropicの割引率が生きてきます。

2.1. 自動キャッシングのOpenAIと手動制御のAnthropic

これは、OpenAIとAnthropicで設計思想が異なるからです。

OpenAIは対応モデルであれば自動でキャッシングが適用されます。 開発者側の設定変更は不要で、1,024トークンを超えるリクエストが来れば内部でキャッシュを試みます。

Anthropicはcache_controlパラメータを使って、キャッシュする箇所を開発者が明示的に指定します5。 設定の手間はありますが、キャッシュヒット率がほぼ100%で安定するという利点があります。

3. システムプロンプトの順序が大事

キャッシングを活かすには、プロンプトの構造を意識する必要があります。 変わらないコンテンツ(システム指示・ツール定義・RAGで取得したドキュメント)を先頭にまとめ、ユーザーの入力や動的な情報は末尾に置きます。 この順序が大事で、逆になるとキャッシュを活かせません。

ツール定義も要注意で、1つ追加・削除するだけでキャッシュが無効になります。 OpenAIのAllowed Toolsを使えば、全ツール定義はキャッシュしたまま、特定のリクエストで使用を許可するツールだけを動的に制限できます6

とはいえ、将来的にSoftMatcha 2のような、単語分散表現の一致も見られるようになれば、順序の違いはある程度 気にしないで済むようになるかもしれません7

3.1. キャッシュはヒットしないと消える

デフォルトでは、未使用のキャッシュはGPU VRAMから5〜10分で消去されます8。 これより長い間隔でリクエストが来る場合、キャッシュが毎回ミスします。

OpenAIはprompt_cache_retention: "24h"を指定することで最大24時間保持できます9。 KVテンソルをGPUローカルストレージにオフロードして保つ仕組みで、バッチ処理に近いワークロードに向いています。 またprompt_cache_keyパラメータを使うと、同じプレフィックスを持つリクエストを同じマシンに誘導してヒット率を高められます10。 ただし同一キーで1分あたり約15リクエストを超えると、別マシンへの溢れが起きてヒット率が下がります。

プロンプトキャッシングは、APIの使い方を変えずに恩恵を受けられる場合もあれば、プロンプト設計そのものを見直さないと効果が出ない場合もあります。 どちらにせよ、LLMを本番環境で動かすなら一度は向き合っておく価値のある最適化です。

  1. スペース1文字・JSONキーの順序・ツール定義の並び順のわずかな違いでもキャッシュが無効になります。システムプロンプトにタイムスタンプやリクエストIDを含めると毎回キャッシュが壊れる典型例として、OpenAIのCookbookでも注意が促されています。 – Prompt Caching 201 – OpenAI Cookbook
  2. 1,024トークン未満のプロンプトはキャッシュ対象外です。900トークンのプロンプトは対象外ですが、あえて1,100トークンに伸ばしてキャッシュヒット率50%を得るほうが、トータルコストを下げられるケースがあります。 – Prompt Caching in the API – OpenAI
  3. OpenAIはキャッシュ読み出しトークンを通常の50%引きで提供しています。Anthropicはキャッシュ読み出しを通常の10%、つまり90%引きで提供しています。 – Prompt Caching – Anthropic Docs
  4. Anthropicのキャッシュ書き込みは5分TTLで基本入力トークン価格の1.25倍、1時間TTLでは2倍です。一方でキャッシュ読み出しは0.1倍(90%引き)のため、同じキャッシュを2〜3回利用すれば損益分岐点を超えます。 – Prompt Caching – Anthropic Docs
  5. AnthropicはTools・System・Messagesの順に最大4つのキャッシュポイントを設定でき、キャッシュヒット率がほぼ100%で安定するとされています。OpenAIは自動制御のため、即座に再送した場合でもヒット率が50%程度にとどまるケースがあります。 – Prompt Caching Explained – DigitalOcean
  6. Allowed Toolsは、ツール定義全体をキャッシュした状態を維持しながら、特定リクエストで使用可能なツールのみを動的に制限する機能です。ツール構成の変更によるキャッシュ無効化を防ぎます。 – Build Hour: Prompt Caching – OpenAI
  7. 1兆トークンを0.1秒台で検索するSoftMatcha 2のベンチマーク汚染の見つけ方 – Chiilabo Note
  8. OpenAIは未使用のキャッシュを5〜10分で消去します。AnthropicのデフォルトTTLは5分で、キャッシュヒットのたびにタイマーがリセットされます。 – Prompt Caching – Anthropic Docs
  9. Extended Prompt Cachingは、KVテンソルをGPUのローカルストレージにオフロードして保持する仕組みです。GPT-4.1およびGPT-5.1シリーズで利用可能です。なお、このオプションを使用するとZero Data Retentionの対象外になります。 – Prompt caching – OpenAI API Docs
  10. prompt_cache_keyはキャッシュIDではなく、ルーティングのヒントとして機能します。同一のキーとプレフィックスの組み合わせで1分あたり約15リクエストを超えると、別マシンへの溢れが起きてヒット率が低下します。 – Prompt caching – OpenAI API Docs