LLM Frontline
開発・エージェント

プロンプトキャッシュ(Prompt Caching)とは|LLM APIのコストとレイテンシを下げる仕組みと実務

ミナト開発・API担当
・ 約11分で読めます
プロンプトキャッシュ(Prompt Caching)とは|LLM APIのコストとレイテンシを下げる仕組みと実務

長い文脈や定型の指示を毎回モデルに送っていると、同じ内容を何度も処理させることになり、コストと応答時間が積み上がります。プロンプトキャッシュ(Prompt Caching)は、この「同じ部分の再計算」をサーバ側で省く仕組みです。この記事では、キャッシュがなぜ効くのかという仕組みの基本から、主要3社の差分、はまりやすい落とし穴、そして実務でどう取り入れ・どこで使わないかまでを、変動前提で整理します。トークン課金の総論は別記事に譲り、ここではキャッシュ機構そのものに絞ります。

プロンプトキャッシュとは何か

LLMは、入力されたトークンごとにattention(注意機構)のkey-value(KV)を計算しながら応答を組み立てます。長いシステム指示や大きな文脈を毎回渡すと、そのKV計算をリクエストのたびにやり直すことになり、これが初回応答時間(TTFT)とコストに直結します。

プロンプトキャッシュは、複数のリクエストで共通するプレフィックス部分のKV計算結果をサーバ側に保存しておく仕組みです。次のリクエストが同じプレフィックスで始まっていれば、その部分の計算をスキップして保存済みの結果を読み出せます。結果として、再計算の分だけTTFTとコストが下がります。

メモ

ここで重要なのは、キャッシュが効くのは先頭から一致する静的部分だけという点です。プロンプトの途中や末尾がリクエストごとに変わるのは問題ありませんが、先頭からの連続一致が途切れた地点より後ろはキャッシュされません。だからこそ、何を先頭に置くかの設計が効いてきます。

効かせるための基本:静的を先頭、可変を末尾

3社に共通する勘所は、プロンプトの構造化です。システム指示・長い文脈・少数の例といった静的コンテンツをプレフィックス(先頭)に固め、ユーザ入力のような可変コンテンツを末尾に置きます。こうすると、リクエストが変わっても先頭の一致区間が長く保たれ、ヒット率が上がります。

効果が出やすいのは、次のような場面です。

  • 長い文脈を毎回渡すケース(仕様書・マニュアル・コードベースなど)
  • RAGで取得した定型的な参照情報を繰り返し添えるケース
  • 同じ指示を何度も使い回すケース
  • マルチターンの会話や、共通の前提を持つエージェント

逆に言えば、毎回まったく異なる短い単発の入力では、共通プレフィックスが育たないため恩恵は小さくなります。文脈をどう構成し、どの順で渡すかという設計は、コンテキストエンジニアリングの考え方とも地続きです。

あわせて読みたい

コンテキストエンジニアリングとは|プロンプトの次に来る設計の基本

3社の差分:Anthropic・OpenAI・Google

仕組みの発想は共通でも、有効化の方法や課金の考え方はプロバイダごとに異なります。以下は本記事時点で公式に確認できた範囲の整理です。

Anthropic(Claude)

Anthropicは、cache_controlでキャッシュのブレークポイント(どこまでをキャッシュ対象にするか)を明示的に指定します。課金は、書き込み(キャッシュ作成)が基準入力価格に対してプレミアム、読み出しが割安という構造です。書き込みのプレミアムはTTLで変わり、5分TTLで1.25倍、1時間TTLで2.0倍、読み出しは0.1倍とされています。最小キャッシュ長はモデル依存で、例としてOpus 4.8/Sonnet 5は1024トークン、Haiku 4.5は4096トークン、Fable 5/Mythos 5は512トークンと、モデルにより異なります。デフォルトTTLは5分で、TTL内に再利用すると無償でリフレッシュされます。レスポンスのusage(cache_creation_input_tokens / cache_read_input_tokens)で、キャッシュの書き込み・読み出し状況を確認できます。

OpenAI

OpenAIは、対象リクエストで自動的に有効になり、コード変更は不要です。おおむね1024トークン以上のプロンプトが対象で、静的コンテンツを先頭に置くとヒットしやすくなります。新しめのモデル(GPT-5.6以降)ではcache writeが1.25倍、cached readは割引が適用されるとされています(具体的な割引率は公式・料金ページで確認してください)。ルーティングは概ね先頭256トークン程度でハッシュして振り分けられます。

Google(Gemini)

Geminiには、暗黙的キャッシュ(implicit caching)と明示的キャッシュ(explicit caching)があります。暗黙的キャッシュはGemini 2.5以降でデフォルト有効・設定不要で、ヒット時に自動で割引が適用されます。明示的キャッシュは、保存に対して時間課金が発生します。最小トークン数はモデル依存で、例としてGemini 2.5は2048トークン、3.5 Flash/3.5 Pro Previewは4096トークンとされています。

注意

ここに挙げた数値(倍率・最小トークン長・TTL・割引)は、モデルや提供元で異なり、改定され得ます。本記事時点で公式に確認できた範囲であり、実装前に必ず各社の公式ドキュメントで最新の値を確認してください。

全体傾向としては、3社ともキャッシュヒット時の入力トークンを大きく割り引きます。ただし、書き込みプレミアムの有無、保存の時間課金の有無、明示指定か暗黙かといった課金体系は、プロバイダとモデルで異なり、今後も改定され得ます。

落とし穴:効かない・かえって割高になるケース

キャッシュは万能ではなく、前提を外すと効かないどころか割高になります。運用前に押さえておきたい点を挙げます。

注意

プレフィックスが1トークンでも変わるとヒットしません。タイムスタンプ・乱数・ユーザ名・セッションIDのような動的な値を、静的部分の前や途中に混ぜないでください。動的値は必ず末尾側にまとめます。

メモ

TTLが失効するとキャッシュは消え、次は書き込み(再作成)になります。アクセス間隔が空きがちなワークロードでは、せっかくのキャッシュが毎回作り直しになりやすい点に注意してください。

その他の注意点は次のとおりです。

  • 書き込みプレミアムがある提供元では、一度きり・低頻度の利用だとキャッシュがかえって割高になり得ます。読み出しの回数で書き込み分の元を取る、という前提で判断します。
  • 最小トークン長に満たない短いプロンプトはそもそもキャッシュされません。短い入力には効きません。
  • キャッシュにも機密情報・個人情報が載り得る点は、運用上の配慮が必要です。保存範囲やTTLの扱いを確認してください。
  • 明示/暗黙・課金・TTLはプロバイダごとに異なるため、別の提供元へ移植すると前提が変わります。移植時は再設計が要ると考えたほうが安全です。
最初にやりがちなのが、ログ用のタイムスタンプをシステムプロンプトの先頭に入れてしまって、キャッシュが一度も効いていなかった、という失敗です。usageを見て初めて気づきました。まずヒット率を計測するのが結局いちばん確実です。
APIを運用するエンジニア

実務での取り入れ方

導入は、いきなり全体に広げるのではなく、静的と動的を切り分けて高頻度の共通プレフィックスから当てていくのが安全です。

  1. 1

    静的/動的を切り分ける

    プロンプトを、リクエストをまたいで変わらない静的部分(システム指示・RAGの定型・few-shotの例)と、毎回変わる動的部分(ユーザ入力・可変パラメータ)に分けます。
  2. 2

    静的部分を先頭に固定する

    静的部分をプレフィックスとして先頭に固め、動的部分を末尾に寄せます。動的な値を静的部分の途中に混ぜないことが最優先です。
  3. 3

    対象モデルの最小トークン長とTTLを公式で確認する

    使うモデルの最小キャッシュ長・TTL・課金体系(書き込みプレミアムや保存課金の有無)を、各社の公式ドキュメントで確認します。値は改定され得るため、実装時点で確かめます。
  4. 4

    usageでヒット率を計測する

    レスポンスのusage(例: cache_read_input_tokens など)で、実際にキャッシュが読み出されているかを計測します。効いていなければ、動的値の混入やTTL失効を疑います。
  5. 5

    高頻度の共通プレフィックスに適用する

    読み出し回数が多く、共通プレフィックスが長い経路から適用します。書き込みプレミアムの元が取れる見込みのある用途を優先します。
  6. 6

    一過性・低頻度の用途では使わない判断をする

    単発・低頻度で共通プレフィックスが育たない用途では、無理に使わない判断も選択肢です。計測した結果で使う/使わないを決めます。

コスト削減の全体像(モデルの使い分け・見積もり・監視の仕組みづくり)は、キャッシュ単体ではなく削減の定石としてまとめた別記事も合わせて読むと、位置づけが掴みやすくなります。

あわせて読みたい

LLMのコスト管理|トークン課金の考え方と削減の定石

本記事の仕様・数値は、Anthropic「Prompt caching - Claude Docs」、OpenAI「Prompt Caching」、Google「Context caching - Gemini API」の各公式ドキュメント(2026年7月時点で確認できた範囲)を参照しています。倍率・最小トークン長・TTL・割引率・対象モデルは、提供元とモデルで異なり改定され得ます。実装前に必ず各社の公式で最新の値を確認してください。

よくある質問

プロンプトの末尾を変えてもキャッシュは効きますか
効きます。キャッシュが効くのは先頭から連続して一致する静的部分だけなので、末尾の可変コンテンツ(ユーザ入力など)が変わるのは問題ありません。逆に、先頭や途中に動的な値が入って一致が途切れると、そこより後ろはキャッシュされなくなります。
キャッシュを使えば必ず安くなりますか
必ずではありません。書き込み(キャッシュ作成)にプレミアムがかかる提供元では、読み出しの回数が少ないとかえって割高になり得ます。読み出し回数で書き込み分の元を取る前提で、高頻度の共通プレフィックスに使うのが基本です。
有効化にコード変更は必要ですか
提供元によります。Anthropicはcache_controlでブレークポイントを明示指定します。OpenAIは対象リクエストで自動的に有効になり基本的にコード変更は不要です。GoogleのGeminiは暗黙的キャッシュがデフォルト有効な一方、明示的キャッシュは別に設定します。詳細は各公式で確認してください。
どのくらいのプロンプト長からキャッシュされますか
モデル依存です。おおむね1024トークン以上が対象となる例が多い一方、モデルによって最小キャッシュ長は異なります。短いプロンプトは最小長に満たずキャッシュされないことがあります。使うモデルの値を公式で確認してください。
キャッシュが効いているか確認する方法はありますか
レスポンスのusageを確認します。例えばAnthropicではcache_creation_input_tokensとcache_read_input_tokensで書き込み・読み出しの状況が分かります。まずヒット率を計測し、効いていなければ動的値の混入やTTL失効を疑うのが実務的です。

まとめ

プロンプトキャッシュ導入チェックリスト

  • プロンプトを静的部分と動的部分に切り分けたか
  • 静的コンテンツを先頭に固め、動的値を末尾に寄せたか(先頭・途中に動的値を混ぜていないか)
  • 対象モデルの最小トークン長・TTL・課金体系を公式で確認したか
  • usageでキャッシュのヒット率を計測する仕組みを入れたか
  • 書き込みプレミアムの元が取れる高頻度の経路に絞って適用したか
  • 一過性・低頻度の用途では使わない判断も検討したか

プロンプトキャッシュは、共通するプレフィックスの再計算を省くという一点に絞った、地味だが効果の見えやすい最適化です。効くのは先頭一致する静的部分だけ、課金体系は提供元とモデルで異なり改定され得る、という2つの前提さえ押さえておけば、過度な期待も見当違いの実装も避けられます。まずは手元の高頻度なプロンプトを静的と動的に分け、usageでヒット率を測るところから始めてみてください。

あわせて読みたい

構造化出力(Structured Outputs)とは何か|LLMの返答をプログラムで安全に扱うための仕組み

出典・参考

この記事をシェア

関連する記事

プロンプト実務

コンテキストエンジニアリングとは|プロンプトの次に来る設計の基本

プロンプトエンジニアリングの次の設計単位として注目される「コンテキストエンジニアリング」を、実務目線で整理します。コンテキストの劣化(context rot)という前提、渡す情報の構成と順序、長時間動くエージェントで使う圧縮・メモ・サブエージェントといった手法までをまとめます。

開発・エージェント

構造化出力(Structured Outputs)とは何か|LLMの返答をプログラムで安全に扱うための仕組み

構造化出力(Structured Outputs)は、LLMの返答をあらかじめ決めたJSONスキーマに沿わせる仕組みです。JSONモードとの違い、なぜスキーマ準拠まで保証したいのか、OpenAI・Anthropic・Googleの対応の考え方、スキーマ設計や検証・リトライといった実装の勘所、そして「構造が正しくても中身が正しいとは限らない」という落とし穴までを、LLMアプリ開発の実務目線で整理します。