プロンプトキャッシュは、同じプロンプトプレフィックスを共有するリクエスト間で処理結果を再利用します。主なメリットは次の 3 つです。
計算効率の向上: モデルがすでに処理したプロンプトプレフィックスの再計算を省きます。
入力トークンのコスト削減: 再利用するトークンには、モデルの割安なキャッシュ済み入力料金が適用され、最大 90% 割引になります。
高速化: 応答が始まるまでの入力処理時間を短縮します。
対応する OpenAI モデルでは、プロンプトキャッシュがデフォルトで有効になっています。プロンプトキャッシュダッシュボード でキャッシュ読み取りのヒット率を監視し、プロンプトキャッシュの診断ツール でキャッシュミスの原因を調べ、キャッシュの再利用を改善できます。
Agents API のモデル呼び出しでは、Responses API と同じプロンプトキャッシュの仕組みが使われます。セッション内でコンテキストを再利用すると、共通のプロンプトプレフィックスを維持できますが、セッションを維持してもキャッシュヒットが保証されるわけではありません。セッションの使用量フィールドとサブエージェントの使用量の集計については、可観測性と使用状況 を参照してください。
プロンプトキャッシュの料金はモデルによって異なります。キャッシュ済み入力とキャッシュ書き込みの最新の単価については、API 料金 を参照してください。キャッシュ書き込み料金は追加料金ではありません。入力トークンには、未キャッシュ入力、キャッシュ済み入力、キャッシュ書き込みのいずれかの単価が適用されます。
モデルは入力トークンを処理する際、キー・バリュー(KV)状態と呼ばれる中間状態を計算する必要があります。この状態により、新しい入力の処理や出力トークンの生成中に、それまでのトークンを参照できます。
プロンプトキャッシュは、再利用可能な プレフィックス 、つまりプロンプトの先頭にある変化しないトークン列の状態を保持します。後続のリクエストが同じプレフィックスを持ち、一致するキャッシュエントリが見つかると、モデルはそのトークン列を再処理せずに保存済みの状態を再利用できます。ただし、新しい応答を生成するには、新たな入力を処理する必要があります。
プロンプトキャッシュに保存されるのは、トークンそのものではなく、キー・バリュー(KV)テンソルです。
ChatGPT に詳しい説明を依頼
ステップ 1
tiny chips
↓
↓
生成 power ステップ 2
tiny chips power
↓
↓
生成 big ステップ 3
tiny chips power big
↓
↓
生成 ideas
OpenAI は、モデルのレンダリング済みコンテキスト全体をキャッシュします。これには、OpenAI が提供する指示、開発者メッセージ 、ツール定義 、およびテキスト 、画像 、ドキュメント 、サポート対象の音声 を含む会話履歴 が含まれます。
キャッシュを再利用するには、レンダリング済みのプレフィックス全体が一致する必要があります。ブレークポイントより前でコンテンツや関連する設定が変わると、その変更箇所以降を含むプレフィックスは既存のキャッシュエントリと一致しなくなります。
非表示のシステムメッセージ
OpenAI が提供する指示
コンテキスト履歴
会話メッセージ、ツール呼び出しとその結果、テキストおよびマルチモーダルコンテンツ
キャッシュ済みプレフィックスに影響する設定 リクエストを変更しても、既存のキャッシュエントリが必ず破棄されるわけではありません。重要なのは、後続のリクエストが同じプレフィックスを持ち、対象となるブレークポイントで一致を見つけられるかどうかです。確認すべき主な設定は次のとおりです。
キャッシュブレークポイント は、OpenAI がキャッシュに保存し、後続のリクエストで再利用できるプロンプトプレフィックスの終端を示します。最初のリクエストで対象のプレフィックスをキャッシュに書き込みます。後続のリクエストでは、一致するものが見つかるまで対象のブレークポイントを末尾側から順にたどり、利用可能なキャッシュ済みプレフィックスのうち、一致する最長のものを探します。
プロンプトプレフィックスをキャッシュするには、モデルの キャッシュ可能な最小トークン長 を満たす必要があります。OpenAI が提供する非表示のシステムコンテンツ内のトークンは、この最小トークン長に含まれません。キャッシュ可能なプロンプトの最小長は、GPT-5.6 以降では 1,024 トークンで、それ以前のモデルではリクエスト設定によって異なります。詳しくは、モデルの比較 をご覧ください。
キャッシュ可能な最小トークン長に達した後は、キャッシュブレークポイントの位置を明示的に指定するか、OpenAI に暗黙的な選択を任せることができます。利用できる選択肢はモデルによって異なります。
GPT-5.6 以降 GPT-5.6 以降では、キャッシュ書き込みの料金は、キャッシュを使わない標準の入力トークン料金の 1.25 倍です。その後の読み取り料金は標準料金のわずか 0.1 倍なので、プレフィックスを再利用することがわかっている場合は、この書き込み料金を支払う価値があります。プレフィックスを 1 回書き込み、全体を 1 回再利用した場合のコストは通常の入力コストの 1.35 倍で、キャッシュを使わずに 2 回処理した場合の 2 倍より安くなります。キャッシュを読み取るたびに削減効果は大きくなります。10 回のリクエストで、1 回の書き込みと 9 回の全体読み取りを行う場合のコストは 2.15 倍で、キャッシュを使わない場合の 10 倍と比べて抑えられます。
暗黙的キャッシュと明示的キャッシュの両方がサポートされています。明示的キャッシュでは、キャッシュに書き込むコンテキストをより細かく制御できます。
明示的モード: コンテキストの管理方法に合わせて、キャッシュブレークポイントを配置する位置を選択します。
開発者が選択したブレークポイントだけを使用するには、prompt_cache_options.mode を explicit に設定します。各ブレークポイントは、入力メッセージ内のサポート対象のコンテンツブロックに prompt_cache_breakpoint: { "mode": "explicit" } を追加して指定します。
明示的なブレークポイントを配置しない場合、そのリクエストではプロンプトキャッシュを使用せず、キャッシュへの書き込みも行いません。
明示的専用モードでは、キャッシュに書き込む範囲の終端を選択できます。選択した最後のブレークポイントより後のコンテンツは、キャッシュ書き込み料金が発生せず、キャッシュを使わない入力トークン料金で処理されます。そのため、内容が変わり、再利用の見込みが低いコンテンツを書き込まずに済みます。
複数の明示的ブレークポイントを配置すると、変更頻度が異なるプレフィックスを保持できます。各リクエストで最大 4 回のキャッシュ書き込みが可能です。
現在、additional_tools 入力項目では prompt_cache_breakpoint を指定できません。
トップレベルの instructions には、明示的ブレークポイントを含めることができません。再利用可能な開発者の指示にブレークポイントを付けるには、その指示を開発者メッセージ内の input_text ブロックに配置します。
暗黙的モード: 特別な設定なしで、OpenAI がほとんどのユースケースに適した位置にブレークポイントを配置します。
prompt_cache_options.mode が implicit の場合、OpenAI は対象となる最新のメッセージの末尾にブレークポイントを配置します。対象となるメッセージは次のとおりです。
ユーザーメッセージ
連続するツール応答のグループ内で最後のツール応答
先頭で連続する開発者メッセージのグループ内で最後の開発者メッセージ
暗黙的ブレークポイントを無効にせずに、明示的ブレークポイントを追加できます。暗黙的ブレークポイントは 4 つのキャッシュ書き込み枠のうち 1 つを使用するため、明示的なキャッシュ書き込みには残りの 3 枠を使用できます。
以前のモデル 暗黙的キャッシュのみをサポートしています。OpenAI は、非表示の OpenAI システムメッセージの先頭から数えて、モデルごとに異なる間隔 で暗黙的ブレークポイントを配置します。対象となるのは、非表示のコンテキストの末尾から数えて、キャッシュ可能な最小長以上の位置にあるブレークポイントのみです。
報告される cached_tokens は、最後に一致したブレークポイントまでのトークン数から非表示のシステムトークン数を引き、最も近い 128 の倍数に切り捨てて算出されます。
OpenAI は、受信したリクエスト内の キャッシュ検索境界 (後述)のみを、プレフィックスが長い順に確認します。そのマシンにすでにキャッシュされている、一致する利用可能なプレフィックスを探します。
GPT-5.6 以降では、受信したリクエスト内のキャッシュ検索境界は次のとおりです。
明示的指定のみのモード: 最初の 2 個と直近の 50 個の明示的ブレークポイント
暗黙的モード: 最初の 2 個と直近の 50 個の明示的ブレークポイント、暗黙的ブレークポイント、それ以前の対象メッセージの末尾(最大 20 件)、および冒頭の連続した開発者メッセージ群の末尾が対象です。このため、暗黙的モードでは、以前のメッセージの末尾に明示的ブレークポイントがなくても、そこまでのプレフィックスを再利用できます。
暗黙的ブレークポイントは、対象となる最新のユーザーメッセージに配置されます。
非表示のシステム ツール 開発者 コンテキスト履歴 追加メッセージ キャッシュ済み入力 キャッシュされていない入力
リクエストパラメーターとレスポンスの使用量 リクエスト 1・Responses API リクエスト import OpenAI from "openai" ;
const client = new OpenAI ();
const response = await client.responses. create ({
"model" : "gpt-5.6" ,
"reasoning" : {
"effort" : "medium" ,
"context" : "all_turns"
},
"text" : { "verbosity" : "medium" },
"input" : [
{
"role" : "developer" ,
"content" : [
{
"type" : "input_text" ,
"text" : "8,000 tokens"
}
]
},
{
"role" : "user" ,
"content" : [
{
"type" : "input_text" ,
"text" : "2,000 tokens"
}
]
}
],
"tools" : [
"Tool definitions, 2,000 tokens"
],
"prompt_cache_key" : "shared-workflow-v1" ,
"prompt_cache_options" : {
"mode" : "implicit" ,
"ttl" : "30m"
}
}); リクエスト 2・Responses API リクエスト import OpenAI from "openai" ;
const client = new OpenAI ();
const response = await client.responses. create ({
"model" : "gpt-5.6" ,
"reasoning" : {
"effort" : "medium" ,
"context" : "all_turns"
},
"text" : { "verbosity" : "medium" },
"input" : [
{
"role" : "developer" ,
"content" : [
{
"type" : "input_text" ,
"text" : "8,000 tokens"
}
]
},
{
"role" : "user" ,
"content" : [
{
"type" : "input_text" ,
"text" : "2,000 tokens"
}
]
},
{
"role" : "user" ,
"content" : [
{
"type" : "input_text" ,
"text" : "3,000 tokens"
}
]
}
],
"tools" : [
"Tool definitions, 2,000 tokens"
],
"prompt_cache_key" : "shared-workflow-v1" ,
"prompt_cache_options" : {
"mode" : "implicit" ,
"ttl" : "30m"
}
}); リクエスト 1・レスポンスの使用量 {
"usage" : {
"input_tokens" : 12000 ,
"input_tokens_details" : {
"cached_tokens" : 0 ,
"cache_write_tokens" : 12000
}
}
} リクエスト 2・レスポンスの使用量 {
"usage" : {
"input_tokens" : 15000 ,
"input_tokens_details" : {
"cached_tokens" : 12000 ,
"cache_write_tokens" : 3000
}
}
}
キャッシュエントリは無期限に保存されるわけではありません。後続のリクエストでキャッシュ済みのプレフィックスを再利用できるのは、そのエントリが利用可能な間だけです。プレフィックスを再利用すると、キャッシュ書き込み料金が再度発生することなく、有効期間が更新されます。有効期間と保持の設定はモデルによって異なります 。
GPT-5.6 以降 prompt_cache_options.ttl を使用して、キャッシュの最小有効期間を制御します。サポートされている値は 30m のみで、これがデフォルト値でもあります。キャッシュ済みのプレフィックスは、最後に書き込まれたか再利用された時点から 30 分間は再利用できます。OpenAI がそれより長く保持する場合もあります。
以前のモデル prompt_cache_retention を使用します。サポートされている値はモデルによって異なります。
in_memory:エントリは、使用されなくなってから通常 5~10 分程度、最長で 1 時間有効です。
24h:拡張保持では、エントリは通常 30 分程度利用可能で、最長で 24 時間保持される場合があります。
保持のデフォルト設定とゼロデータ保持
プロンプトキャッシュでは、暗号化されたキー/バリューテンソルがアプリケーションの状態として GPU のローカルストレージに保存される場合があります。in_memory と 24h の両方をサポートするモデルでは、デフォルト値は組織のデータ保持ポリシーによって異なります。
ゼロデータ保持が 有効でない 組織では、デフォルト値は 24h です。
ゼロデータ保持が 有効な 組織では、デフォルト値は in_memory です。
値を選択する前に、モデルと組織で利用できる保持ポリシーを確認してください。
キャッシュされた状態は個々のマシンに保存されます。1 分あたり 15 件を超えるリクエストがあると、オーバーフローによって別のマシンにルーティングされる場合があります。リクエストがキャッシュ済みのプレフィックスを再利用できるのは、一致する有効期限内のエントリを保持するマシンに到達した場合だけです。そのため、キャッシュの再利用には、適切なマシンへのリクエストのルーティングが重要です。
OpenAI はルーティングを自動的に処理します。同じ組織と処理リージョン内では、特定のモデルへのルーティングは次の要素によって決まります。
マシンの現在の負荷と利用可能な容量
非表示の OpenAI コンテンツに続く先頭のトークンのハッシュ値。ツール定義がある場合はそれも含まれます。ハッシュ化するトークンの数はモデルによって異なります。
指定された prompt_cache_key 。リクエストのグループ間でキャッシュの再利用を分離し、GPT-5.6 より前のモデルではキャッシュルーティングの最適化に役立ちます。
プロンプトキャッシュキー GPT-5.6 より前のモデルでは、再利用可能なプレフィックスを共有するリクエストに同じ prompt_cache_key を使い続けることで、関連するリクエストが同じキャッシュにルーティングされやすくなります。リクエストの多いグループでは、各キーを使用するすべてのプレフィックスを合わせて、1 分あたり約 15 リクエストを目安にしてください。それを超えるトラフィックは、一貫した決定論的な対応付けで複数のキーに分散します。関連するリクエストには同じ prompt_cache_key を使い続け、キャッシュを再利用できるようにしてください。キーはルーティングに影響しますが、リクエストを特定のマシンに固定したり、キャッシュヒットを保証したりするものではありません。
GPT-5.6 以降では、OpenAI がキャッシュルーティングを自動的に処理するため、キャッシュの最適化にキーは必要ありません。アプリケーション内の顧客やユーザーごとにキーを分けると、キャッシュの利用量と料金を個別に管理できます。
キーを分けると、キャッシュ済みトークンの使用量と請求内容を顧客やユーザーごとに説明しやすくなります。たとえば、候補となるプロンプトを送信し、キャッシュヒットを観測して、一致するコンテンツが以前にキャッシュされたかどうかを探る行為を、ユーザー間で防ぐのに役立ちます。キーによるキャッシュ利用の個別集計 を参照してください。
動作 GPT-5.6 以降 GPT-5.5 と GPT-5.5 Pro その他の以前のモデル 暗黙的なブレークポイント 対象となる最新のメッセージの末尾に配置されます。 2,048 トークンごとの一定間隔で配置されます。 モデルに応じた一定間隔で配置されます。 明示的なブレークポイント サポートあり サポートなし サポートなし prompt_cache_keyキャッシュの利用量と料金を分けて管理する場合に任意で使用 同じキーを使い続けてキャッシュルーティングを最適化 同じキーを使い続けてキャッシュルーティングを最適化 キャッシュ可能なプレフィックスの最小長 可視の入力トークン 1,024 個 リクエストの設定によって異なります リクエストの設定によって異なります キャッシュ済みトークン数の報告 非表示トークンを除外し、対象となる境界までの正確な数を報告 非表示トークンを除外し、128 の倍数に切り捨て 非表示トークンを除外し、128 の倍数に切り捨て キャッシュ読み取り料金 キャッシュされていない入力トークンの単価の 0.1 倍 モデルに応じたキャッシュ済み入力の単価 モデルに応じたキャッシュ済み入力の単価 キャッシュ書き込み料金 キャッシュされていない入力トークンの単価の 1.25 倍 キャッシュ書き込みの追加料金なし キャッシュ書き込みの追加料金なし キャッシュの有効期間の制御 prompt_cache_options.ttlprompt_cache_retentionprompt_cache_retentionサポートされている保持設定値 "30m""24h" のみ"in_memory" または "24h"* キャッシュの有効期間 最後の書き込みまたは再利用から少なくとも 30 分 通常は 30 分程度、最長で 24 時間 in_memory では使用されなくなってから通常 5~10 分、24h では最長で 24 時間
* 拡張保持は、gpt-5.5、gpt-5.5-pro、gpt-5.4、gpt-5.2、gpt-5.1-codex-max、gpt-5.1、gpt-5.1-codex、gpt-5.1-codex-mini、gpt-5.1-chat-latest、gpt-5、gpt-5-codex、gpt-4.1 でサポートされています。
GPT-5.6 より前のモデルでは、キャッシュ可能な入力の最小長は、ツール、画像、出力スキーマ、推論強度、応答の詳しさなど、リクエストの設定によって異なります。
ChatGPT に、このリクエストでキャッシュ可能な最小入力長の確認を依頼
会話履歴の保持 、ツール定義を変えずに維持すること 、キャッシュする箇所の選択に重点を置いてください。GPT-5.6 以降では、prompt_cache_options.mode と prompt_cache_breakpoint を使用してキャッシュのブレークポイントを制御します。アプリケーションで顧客ごとにキャッシュの利用量と料金を分けて管理する必要がある場合は、任意で prompt_cache_key も使用できます。GPT-5.6 より前のモデルでは、再利用可能なプレフィックスを共有するリクエストに同じ prompt_cache_key を使い続けて、キャッシュルーティングを最適化してください。
ChatGPT にプロンプトキャッシュの最適化を依頼
会話履歴の保持 複数ターンのアプリケーションでは、最初の指示だけをキャッシュするよりも、蓄積される会話履歴を再利用する方が、入力トークンを多く節約できます。後続のターンで共有プレフィックス全体を再利用できるように、過去のメッセージとツールの結果を保持してください。
プレフィックスを一定に保ちます。 変更のない開発者指示と共有の参考資料を先頭に配置します。開発者指示や共有資料にタイムスタンプ、ユーザー固有の内容、その他の動的な内容が含まれる場合は、それらを先頭ではなく末尾に配置するか、後続の会話メッセージに移動してください。
会話履歴を保持します。 過去のターンを書き換えるのではなく、新しいメッセージを末尾に追加します。要約、コンパクション 、コンテキストの切り詰めによってプレフィックスが変わり、キャッシュの再利用がリセットされることがあります。
プレフィックスを書き換えずに推論強度を変更します。 GPT-6 Astra では、リクエストレベルの reasoning.effort を変更せずに、configuration_update 入力項目を末尾に追加することで、応答の合間に推論強度を変更できます。これにより、元のプレフィックスが保持され、キャッシュを再利用できます。例と互換性の制約については、会話途中での推論の変更 を参照してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 {
"model" : "gpt-5.6" ,
"reasoning" : { "effort" : "low" , "context" : "all_turns" },
"text" : { "verbosity" : "medium" },
"prompt_cache_options" : { "mode" : "explicit" },
"input" : [
{
"role" : "developer" ,
"content" : [
{
"type" : "input_text" ,
"text" : "Stable instructions and shared reference material..." ,
"prompt_cache_breakpoint" : { "mode" : "explicit" }
}
]
},
{
"role" : "developer" ,
"content" : "Dynamic developer instructions, such as user-specific content and timestamps..."
},
{
"role" : "user" ,
"content" : "The user's current question..."
}
]
}
プレフィックスを書き換えない推論強度の変更 対応する GPT-6 以降のモデルでは、configuration_update 入力項目を末尾に追加することで、以前のキャッシュ済みプレフィックスを保持しながら、会話中に推論強度を変更 できます。トップレベルの reasoning.effort は元の値を維持してください。この設定を変更すると、非表示のシステム指示の内容が書き換わることがあります。
最新の構成更新によって、後続の応答の推論強度が決まります。たとえば、以降のリクエストの推論強度を high に切り替えるには、既存の input 配列の末尾に次の項目を追加します。
1
2
3
4 {
"type" : "configuration_update" ,
"reasoning" : { "effort" : "high" }
}
キャッシュモードの選択 GPT-5.6 以降では、2 つの設定でキャッシュブレークポイントの配置を制御します。prompt_cache_options.mode で暗黙的キャッシュまたは明示的キャッシュのみを選択し、prompt_cache_breakpoint で任意の境界を指定します。
ブレークポイントを自動で配置します。 暗黙的キャッシュを使用すると、対象となる最新のメッセージの末尾にブレークポイントが配置されます。既存のコンテキストに内容を追加していく、複数ターンのスレッドに便利です。
ブレークポイントを意図的に選びます。 変更のない内容の末尾に明示的なマーカーを配置します。明示的キャッシュのみのモードを使用すると、変化するサフィックスへの不要なキャッシュ書き込みを避けられます。
ブレークポイント 2 の共有キャッシュ済みプレフィックス
非表示のシステムメッセージ
ツール
開発者メッセージ・固定プレフィックス
開発者メッセージ・可変サフィックス A
ユーザーメッセージ
ツール呼び出し
ツールの結果
アシスタントメッセージ
開発者メッセージ・可変サフィックス B
新しいユーザー入力 A
新しいユーザー入力 B
ブレークポイント 1
ブレークポイント 2
ブレークポイント 1 の共有キャッシュ済みプレフィックス
再利用されないサフィックス:キャッシュ書き込み料金なし
新しいユーザー入力:キャッシュ書き込み料金なし
キーによるキャッシュ利用量・料金の分離管理 GPT-5.6 以降では、アプリケーション内の顧客、ユーザー、ワークスペースごとにキャッシュの利用量と料金を分けて管理したい場合に、prompt_cache_key を使用します。これにより、各グループのキャッシュ済みトークンの使用量と請求内容を説明しやすくなります。キーの使用は任意であり、これらのモデルでキャッシュを最適化するために必要なものではありません。
キャッシュの利用量と料金を分けて管理する単位を決めます。 個別に管理する必要がある顧客やユーザーごとに、異なるキーを割り当てます。たとえば、support:customer_123 と support:customer_456 を使用すると、2 人の顧客のリクエストに同じプレフィックスが含まれていても、キャッシュの利用量と料金を分けて管理できます。
各グループ内でキーを一定に保ちます。 同じ顧客の関連するリクエストでは、同じキーを再利用してください。セッションやスレッドに別のキーを生成するのは、そのキャッシュの利用量と料金を個別に管理する必要がある場合に限ります。
キーを一貫して適用します。 顧客のすべてのリクエストにその顧客のキーを使用し、キャッシュの利用量と料金を分けて管理します。これにより、キャッシュヒットを利用して他の顧客の情報を探る行為の防止にも役立ちます。
GPT-5.6 より前のモデルでは、キャッシュヒット率の最適化に prompt_cache_key が重要です。再利用可能なプレフィックスを共有するリクエストには同じキーを使い続けて、同じキャッシュにルーティングされやすくしてください。リクエストの多いグループでは、より多くのキーにトラフィックを分散するためのガイダンス に従ってください。
キャッシュ可能な最小長によるコストの落とし穴の回避
以前のモデルから GPT-5.6 以降へのプロンプトキャッシュの移行
既存の安定したプレフィックスを維持します。
prompt_cache_key を使用している場合は、キャッシュ使用量を顧客やユーザーごとに分けて集計できるよう、既存の値を維持します。
prompt_cache_retention を prompt_cache_options.ttl に置き換えます。
再利用可能なプレフィックスが、モデルのキャッシュ可能な最小の長さ を満たしていることを確認します。
デフォルトのブレークポイントまでにリクエスト間で変化するコンテンツが含まれている場合は、安定したプレフィックスの後に明示的なブレークポイントを追加します。
それ以降のコンテンツをキャッシュに書き込む価値がない場合は、prompt_cache_options.mode: "explicit" を使用します。
移行前後でcached_tokens、cache_write_tokens、レイテンシ、合計コストを比較します 。
以下の例は、GPT-5.6 以降のモデルに適用されます。
シングルターンの LLM による評価 チャットボットとの完了済みのやり取りを調べ、ユーザーが満足したことを示す証拠があるかどうかを判定する、シングルターンの LLM 評価器を考えます。各リクエストでは、同じ評価基準とラベル付きのフューショット例を使用して、異なるやり取りを評価します。
プレフィックスの維持: 固定の評価基準と例を先頭に配置します。評価器の判定を調整するのに役立つ資料を使い、両者の合計の長さがモデルのキャッシュ可能な最小の長さ をわずかに上回るよう、意図的に調整します。評価対象のやり取りは最後に配置します。
キャッシュモードとブレークポイント: 明示的なブレークポイントのみを使用するキャッシュを有効にし、固定の評価基準と例の後にブレークポイントを配置します。評価対象のユーザーとチャットボットの会話は、そのブレークポイントの後に配置し、キャッシュには書き込みません。これにより、再利用される可能性が低いコンテンツへのキャッシュ書き込み料金を回避します。
これらの原則を適用した導入例では、 約 70% のトークンキャッシュヒット率 が報告されています。この数値は、得られる可能性のある結果の一例です。実際に達成できるキャッシュヒット率の上限は、コンテキストとアプリケーションの利用状況によって異なります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 {
"model" : "gpt-5.6-sol" ,
"reasoning" : { "effort" : "medium" , "context" : "all_turns" },
"text" : { "verbosity" : "low" },
"prompt_cache_options" : { "mode" : "explicit" },
"input" : [
{
"role" : "developer" ,
"content" : [
{
"type" : "input_text" ,
"text" : "Judge whether the completed interaction provides evidence that the user is satisfied. Return true or false. Full grading rubric and labeled few-shot examples..." ,
"prompt_cache_breakpoint" : { "mode" : "explicit" }
}
]
},
{
"role" : "user" ,
"content" : "Completed interaction to evaluate..."
}
]
}
マルチターンのエージェント 長い共通の開発者指示を持ち、ツール呼び出しを頻繁に行うマルチターンのエージェントを考えます。一般的な利用では、ユーザーはそのエージェントとの複数のセッションを同時に実行し、スレッドをフォークすることもよくあります。
プレフィックスの維持 :各ターンでは、以前のコンテキストを書き換えずに新しいメッセージ、ツール呼び出し、結果を追加するため、再利用可能なプレフィックスは時間とともに長くなります。
任意のプロンプトキャッシュキー: この例では、agent_123_v1:user_456 を使用してユーザー 456 のキャッシュ使用量を個別に集計し、そのユーザーのキャッシュされたトークンの使用量や請求額を説明しやすくしています。これは、他のユーザーのキャッシュヒットの有無を探る行為の防止にも役立ちます。このユーザーがエージェントを利用する際は、セッションやフォークをまたいで同じキーを使い続けます。アプリケーションでこのような分離が不要な場合は、キーを省略します。
暗黙的なキャッシュモード: 暗黙的なキャッシュを有効にすることで、条件を満たす最新のユーザーメッセージまたはツールメッセージにブレークポイントが配置されます。
明示的なブレークポイント: 各ツール結果の後にブレークポイントを追加し、それ以前の再利用可能なプレフィックスを保持して、フォーク時のキャッシュ効率を高めます。
これらの原則を採用したある導入事例では、 トークンのキャッシュヒット率が >90% と報告されています。この数値は、得られる結果の一例です。実際に達成できるキャッシュヒット率の上限は、コンテキストやアプリケーションの利用状況によって異なります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 {
"model" : "gpt-5.6-sol" ,
"reasoning" : { "effort" : "medium" , "context" : "all_turns" },
"text" : { "verbosity" : "medium" },
"prompt_cache_key" : "agent_123_v1:user_456" ,
"prompt_cache_options" : { "mode" : "implicit" },
"tools" : [
{
"type" : "function" ,
"name" : "function_name" ,
"description" : "Function description" ,
"parameters" : { "..." : "..." }
}
],
"input" : [
{
"role" : "developer" ,
"content" : "Stable developer instructions and reference material..."
},
{ "role" : "user" , "content" : "Can you do...?" },
{
"type" : "function_call" ,
"call_id" : "call_123" ,
"name" : "function_name" ,
"arguments" : "..."
},
{
"type" : "function_call_output" ,
"call_id" : "call_123" ,
"output" : [
{
"type" : "input_text" ,
"text" : "Tool result..." ,
"prompt_cache_breakpoint" : { "mode" : "explicit" }
}
]
},
{ "role" : "assistant" , "content" : "Assistant response..." },
{ "role" : "user" , "content" : "Can you also do...?" }
]
}
共有プレフィックスが必ずしもキャッシュ済みとは限らない点 これは、以前のモデルから GPT-5.6 以降に移行する際 に特によく起こります。暗黙的なキャッシュの動作が変わるためです。リクエスト間で長いプレフィックスを共有していても、サフィックスが異なる場合、最初のリクエスト全体を暗黙的なキャッシュだけで保存しても、それより短い共有プレフィックスを再利用できるようにはなりません。
各リクエストで、固定の開発者メッセージに続いて可変のユーザーメッセージを送る場合を考えます。このリクエストでは、可変コンテンツの末尾までがキャッシュに書き込まれます。次のリクエストでその内容を変更すると、キャッシュされた長いプレフィックスとは一致しなくなります。また、固定コンテンツの直後には独立したブレークポイントがありません。
1
2
3
4
5
6
7
8
9
10 {
"model" : "gpt-5.6-sol" ,
"reasoning" : { "effort" : "medium" , "context" : "all_turns" },
"text" : { "verbosity" : "low" },
"prompt_cache_options" : { "mode" : "implicit" },
"input" : [
{ "role" : "developer" , "content" : "Static content..." },
{ "role" : "user" , "content" : "Dynamic content..." }
]
} 対処するには、両方のリクエストで固定コンテンツの直後に明示的なブレークポイントを配置します。最初のリクエストで再利用可能なプレフィックスが書き込まれるため、次のリクエストでは可変コンテンツが変わっても、そのプレフィックスを再利用できます。この例では、可変コンテンツをキャッシュに書き込まないように、明示専用モードを使用しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 {
"model" : "gpt-5.6-sol" ,
"reasoning" : { "effort" : "medium" , "context" : "all_turns" },
"text" : { "verbosity" : "low" },
"prompt_cache_options" : { "mode" : "explicit" },
"input" : [
{
"role" : "developer" ,
"content" : [{
"type" : "input_text" ,
"text" : "Static content..." ,
"prompt_cache_breakpoint" : { "mode" : "explicit" }
}]
},
{ "role" : "user" , "content" : "Dynamic content..." }
]
}
明示専用モードへの切り替えで、暗黙的に書き込まれたキャッシュを見逃す可能性 リクエスト 1 では暗黙モードを使用してユーザーメッセージの末尾までのプレフィックスをキャッシュし、続くリクエスト 2 ではそのプレフィックスを保持したまま prompt_cache_options.mode: "explicit" に切り替えるとします。プレフィックス照合の仕組み で説明したように、リクエスト 2 では自身の入力にある明示的なブレークポイントだけを確認します。そのため、リクエスト 2 の明示的なブレークポイントのいずれかが、リクエスト 1 でキャッシュされた終端と一致しない限り、リクエスト 1 で暗黙的に保存されたプレフィックスは再利用されません。
▼ = breakpoint
- Request 1: implicit mode
[Developer message][User message] ▼
- Request 2: explicit-only mode. Does not hit cache.
[Developer message][User message][Follow-up] ▼ リクエスト 1 で暗黙的に保存されたプレフィックスを再利用するには、リクエスト 2 の対応するコンテンツブロックの境界に明示的なブレークポイントを配置します。または、暗黙モードを有効にしたままにして、前の対象メッセージの末尾を引き続き検索候補に含めます。
メッセージへの追記で、キャッシュ済みプレフィックスを再利用できなくなる可能性 両方のリクエストで暗黙モードを使用していても、冒頭のトークンを同じまま保持するだけでは十分でない場合があります。リクエスト 1 が Content A を含むユーザーメッセージで終わり、続くリクエスト 2 でそのメッセージに追記して Content A + Content B にするとします。Content A の直後にあった元の終端は、メッセージの末尾ではなく途中になります。プレフィックス照合の仕組み で説明したように、その境界に明示的なブレークポイントがなければ、リクエスト 2 はそこまでの保存済みプレフィックスを再利用しません。
▼ = breakpoint
- Request 1: implicit mode
[Developer message][User message: Content A] ▼
- Request 2: implicit mode. Cannot reuse the prefix through Content A.
[Developer message][User message: Content A + Content B] ▼ 会話の構造上可能であれば、元のメッセージを保持し、別の新しいメッセージを追加します。それができない場合は、再利用可能なテキストを独立したコンテンツブロックにまとめ、両方のリクエストでその直後に明示的なブレークポイントを配置します。
暗黙モードの自動キャッシュ検索境界にならない開発者メッセージ 暗黙モードでは、冒頭の連続した開発者メッセージのまとまりより後にある開発者メッセージは、自動的にはキャッシュ検索境界になりません。再利用可能な開発者メッセージの末尾に明示的なブレークポイントを追加し、後続のリクエストでもそのブレークポイントを保持してください。これにより、OpenAI は一致するキャッシュ済みプレフィックスがあるかどうかを確認できます。
モデルによって異なるキャッシュ可能な最小長 あるモデルではキャッシュ可能なプレフィックスでも、別のモデルでは短すぎる場合があります。モデルの比較 を確認し、実際に使用するモデルと設定で、再利用可能なプレフィックスの長さを測定してください。モデルを変更する際は、以前のモデルのしきい値がそのまま適用されると考えず、改めて確認してください。
コンパクションによるキャッシュ再利用の減少の可能性 コンパクション は、それまでの会話コンテキストを短い表現に置き換えます。これによりプレフィックスが変わることがあるため、会話が論理的には同じでも、コンパクション直後のリクエストでは以前のキャッシュを再利用できる範囲が狭くなる場合があります。
再利用可能な指示や参考資料はできるだけ変更せずに保持し、後続のターンではコンパクション後のコンテキストに内容を追加していきます。コンパクションの前後で入力コストの合計を比較してください。キャッシュヒット率が下がっても、入力トークンが減ることでコストを削減できる場合があります。
プロンプトキャッシュは出力の生成に影響しますか? いいえ。プロンプトキャッシュによって、モデルの出力トークンの生成方法が変わることはありません。モデルはキャッシュ済みのプレフィックスを使って新しい応答を生成するため、同一のリクエストから同一の出力が得られるとは限りません。
キャッシュを手動で消去できますか? いいえ。現在、キャッシュを手動で消去することはできません。キャッシュエントリは、モデルのキャッシュ有効期間 と保持設定に従って失効します。
キャッシュ済みのプロンプトもレート制限にカウントされますか? はい。キャッシュ済みの入力トークンも、1 分あたりのトークン数の制限にカウントされます。プロンプトキャッシュによってレート制限 の計算方法が変わることはありません。