プロンプトキャッシュ
Prompt Caching
概要(サマリー)
プロンプトキャッシュ(Prompt Caching / Context Caching)とは、毎回送る長い指示文や資料の処理結果をAI側で一時保存し、料金と待ち時間を減らす仕組みである。
レストランにたとえるなら、時間のかかるスープを毎回ゼロから煮込むのではなく、仕込んだものを保温しておくイメージである。注文が入ったら、最後の仕上げだけをすればよい。
AIとの会話では、新しい質問をするたびに、システムプロンプトやそれまでの会話の履歴、読み込んだファイルなどをまとめてAIに送り直している。送るプロンプトの先頭部分が前回と同じなら、その部分の処理結果を使い回せる。これがプロンプトキャッシュである。使い回せた部分は通常より安い料金で処理され、返答が始まるまでの時間も短くなる。
詳細解説
なぜプロンプトキャッシュが重要なのか
AIコーディングやエージェント開発では、1回のリクエストで送るデータが大きくなりがちである。
- 長いルール文書や設計方針
- 読み込んだソースコード
- それまでの会話やツール実行の履歴
AIは前回の会話を覚えているわけではないので、こうした情報は毎回送り直す必要がある。何もしなければ、同じ内容に毎回満額の入力料金を払い、毎回同じ量の処理を待つことになる。プロンプトキャッシュは、この「同じものを何度も処理する無駄」を減らす。
通常のリクエストとの比較
| 項目 | 通常のリクエスト | キャッシュが効いたとき |
|---|---|---|
| AI側の処理 | 送られた内容をすべて最初から処理する | 先頭の一致部分は保存済みの結果を使う |
| 入力料金 | 全体に通常の料金がかかる | 一致部分は割引される(サービスやモデルにより異なり、大きいものでは通常の1割程度) |
| 返答が始まるまでの時間 | 入力が長いほど遅くなる | 一致部分の処理が省けるぶん短くなる |
| 保存期間 | なし | 数分〜1時間程度が基本。サービスによってはより長く保持する設定もある |
料金の扱いはサービスによって違う。たとえばClaudeでは、キャッシュに書き込む最初の1回は通常より少し高くなり、2回目以降の読み出しが大きく割引される。OpenAIやGeminiには、条件を満たすと自動でキャッシュが効く仕組みがある。また、一定以上の長さ(数百〜数千トークン)がないとキャッシュの対象にならないのが一般的である。
キャッシュが効く条件は「先頭からの一致」
多くのサービスでは、プロンプトの先頭から何文字目まで前回と同じかでキャッシュを判定している。
[1. システムプロンプト] ← 毎回同じ(キャッシュ対象)
[2. ルール文書・参照コード] ← 毎回同じ(キャッシュ対象)
──────────── ここまで前回と一致
[3. 今回の質問] ← 毎回変わる(通常どおり処理)
途中に1文字でも違う部分があると、そこから後ろはキャッシュが使えない。たとえば先頭に「現在時刻」を入れてしまうと、毎回内容が変わるため、後ろの長い資料もすべて処理し直しになる。
キャッシュする位置を指定する例
Claudeでは、どこまでをキャッシュしたいかをリクエストの中で指定できる。以下はAPIに送る内容の一部を簡略化した例である。
{
"system": [
{
"type": "text",
"text": "あなたはこのプロジェクトのコーディング規約に詳しいアシスタントです。(ここに長い規約が続く)",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [
{ "role": "user", "content": "このファイルの命名は規約に合っていますか?" }
]
}
cache_control を付けた位置までがキャッシュの対象になる。2回目以降に同じ規約から始まるリクエストを送ると、その部分は保存済みの結果が使われる。
AIコーディングとの関係
AIコーディングツールが長い会話でも現実的な料金と速度で動くのは、裏でプロンプトキャッシュが使われていることが大きい。
自分でAIを使ったアプリを作るときも、キャッシュを意識した並べ方にするだけで料金が下がることがある。基本は「変わらないものを先に、変わるものを後に」である。
- よくない並べ方: 「今日の日付・質問」→「システム指示」→「長い資料」
- よい並べ方: 「システム指示」→「長い資料」→「今日の日付・質問」
どの情報をどの順番で渡すかを設計することは、コンテキストエンジニアリングの一部でもある。
よくある勘違い
Webブラウザのキャッシュと同じもの?
「一度処理したものを使い回して速くする」という目的は同じだが、保存しているものが違う。ブラウザのキャッシュは画像やHTMLファイルそのものを手元に保存する。プロンプトキャッシュは、AIが長い文章を読み込んだときの途中の計算結果を、AI提供元の側で一時的に保持している。
キャッシュを使えば、AIが前の会話を覚えてくれる?
いいえ。プロンプトキャッシュは処理を省くための仕組みであって、AIの記憶ではない。会話の内容は毎回送り直す必要があり、送らなかった情報はAIには伝わらない。
いつでも必ず安くなる?
条件しだいである。先頭部分が毎回変わる並べ方では、キャッシュはほとんど効かない。短すぎるプロンプトはそもそも対象外になる。また、書き込みに割増料金がかかるサービスでは、一度しか使わない内容をキャッシュすると、かえって高くつくこともある。
まとめ
- プロンプトキャッシュは、毎回送る長い指示文や資料の処理結果をAI側で一時保存する仕組みである
- 先頭部分が前回と一致していれば、その部分の料金が割引され、返答までの時間も短くなる
- 「変わらないものを先に、変わるものを後に」並べることが、キャッシュを効かせる基本である
情報ソース
より詳しくAIに聞いてみよう
- Claude APIでプロンプトキャッシュを使う具体的なコード例を教えてください。
- プロンプトキャッシュが効きやすいように、プロンプトの並べ方を見直すコツを教えてください。
- OpenAI、Claude、Geminiのプロンプトキャッシュの違いを、料金と設定方法の観点で比べてください。
- APIの応答から、キャッシュが実際に効いたかどうかを確認する方法を教えてください。
- 会話が長くなったときに、キャッシュを保ちながら履歴を整理する方法を教えてください。