在大模型的应用中,处理复杂请求往往伴随着较高的延迟和成本,尤其是当请求内容存在大量重复部分时。这种“慢请求”的问题,特别是在长提示和高频交互的场景中,显得尤为突出。为了应对这一挑战,OpenAI 最近推出了 提示缓存(Prompt Caching) 功能。这项新技术通过缓存模型处理过的相同前缀部分,避免了重复计算,从而大幅减少了请求的响应时间和相关成本。特别是对于包含静态内容的长提示请求,提示缓存能够显著提高效率,降低运行开销。本文将详细介绍这项功能的工作原理、支持的模型,以及如何通过合理的提示结构优化缓存命中率,帮助开发者提升大模型的使用体验。
什么是大模型提示缓存(Prompt Caching)?
提示缓存(Prompt Caching)机制,用于减少在处理重复内容的长提示时的延迟和计算成本。这里的“提示”指的是你向模型发送的输入内容。在请求过程中,系统并不会每次都重新计算提示的前N个输入tokens,而是缓存先前的计算结果。这样,对于后续具有相同提示前缀的请求,系统就能够重用这些缓存数据,从而加速处理,减少延迟,并节省成本。
简单来说,提示缓存的工作原理如下:
- 缓存前1024个标记 :系统会检查提示内容的前1024个标记是否与之前的请求相同,如果相同,就缓存这些标记的计算结果。
- 缓存命中 :当新的请求与缓存的提示内容匹配时,我们称之为“缓存命中”。此时,响应中会包含关于缓存标记的详细信息,帮助减少计算时间和成本。
- 降低成本 で 标准部署类型 中,缓存的标记将以折扣价计费;而在 预配置部署类型 中,缓存标记甚至可以获得100%的折扣。
官方给出了一个非常形象的提示缓存原理图:
从上图可以看出来,如果你的原始请求中前面的tokens与此前的请求相同,那这部分请求可以不通过模型解决,而直接通过缓存结果读出来即可。
当前,OpenAI官方提供的可缓存的模型如下:
モデリング | 文本输入成本 | 音频输入成本 |
---|---|---|
gpt-4o(不包括 gpt-4o-2024-05-13 和 chatgpt-4o-latest) | 便宜 50% | 適さない |
gpt-4o-mini | 便宜 50% | 適さない |
gpt-4o-realtime-preview | 便宜 50% | 便宜 80% |
o1プレビュー | 便宜 50% | 適さない |
o1-ミニ | 便宜 50% | 適さない |
当前支持提示缓存的模型(如 gpt-4o、gpt-4o-mini、gpt-4o-realtime-preview 等)均能有效降低文本输入成本,特别是 50% 的成本折扣,而 gpt-4o-realtime-preview 模型在处理音频输入时甚至能享受 80% 的成本折扣。这些模型的支持不仅提高了模型的响应效率,还为开发者提供了一个低成本、高性能的解决方案,特别适用于那些需要频繁重复请求或包含大量静态内容的场景。
提示缓存的工作方式
根据当前OpenAI官方提供的文档,如果你的请求要使用到缓存,必须满足如下条件:
- 提示的长度必须至少为 1024 个标记 .
- 提示的 前 1024 个标记 必须在后续请求中 完全相同 .
此外,还需要注意的是,官方说起始1024个tokens是最少可以缓存的长度,但是后面命中的增量式128个tokens,也就是说缓存的长度都是1024、1152、1280、1408这样以1024个tokens为最低,128个tokens递增的方式保存。
当发生“缓存命中”时,API 响应将包含 cached_tokens
,表示有多少标记来自缓存。例如,发送给 o1-preview-2024-09-12 模型的请求可能会返回如下响应:
{
"created":1729227448,
"model":"o1-preview-2024-09-12",
"object":"chat.completion",
"usage":{
"completion_tokens":1518,
"prompt_tokens":1566,
"total_tokens":3084,
"completion_tokens_details":{
"reasoning_tokens":576
},
"prompt_tokens_details":{。
「cached_tokens":1408
}
}
}
この例では1408マーキングがキャッシュからフェッチされるため、処理時間とコストが大幅に削減される。
ヒントキャッシュヒット後の時間短縮
OpenAIは公式に、モデルは常にキャッシュ情報を保持するわけではないと述べています。GPTシリーズのモデルのキューキャッシュに関する現在の仕組みは以下の通りです:
- キャッシュ期間 キャッシュは 5~10分はキャッシュの非アクティブ状態の後にクリアされる。最後に使用したキャッシュに1時間以上アクセスがない場合、キャッシュは完全に削除される。
- キャッシュ・ミス プロンプトの最初の1024個のトークンのうち1つが異なる場合は キャッシュ・ミス 現時点で
cached_tokens
は0になる。 - キャッシュは共有されない キャッシュが違う場所にあることを示唆する。登録するはそれらの間で共有される。各サブスクリプションはそれ自身のキャッシュを持つ。
対応キャッシュ・コンテンツ・タイプ
ヒントキャッシュの機能は、使用するモデルによって異なる。例えばo1シリーズモデルこれはテキストのみをサポートし、システム・メッセージ、画像、ツール・コール、構造化出力はサポートしないため、そのキャッシュ機能は主にユーザー・メッセージ部分に適用される。そのため gpt-4oおよびgpt-4o-mini このモデルは、以下のような、より多くのコンテンツタイプのキャッシュをサポートしている:
- メッセージ システム・メッセージ、ユーザー・メッセージ、ヘルパー・メッセージを含むメッセージの完全な配列。
- イメージ : ユーザーメッセージに含まれる画像 (リンクまたは base64 エンコードされたデータ)。
詳細
パラメータは一貫している。 - ツールコール メッセージ・アレイとツール定義のキャッシュを含む。
- 構造化出力 システムメッセージに付随する構造化出力モード。
キャッシュヒットの確率を上げるため、重複はメッセージ配列の先頭に置くことを推奨する。
キャッシュがサポートするOpenAIのAPIバージョンを示唆する。
ヒント・キャッシュ機能は、最初に導入されたのは APIバージョン2024-10-01-プレビュー サポートの提供において。について o1モデルシリーズ さらに、APIレスポンスに cached_tokens
パラメータを使って、キャッシュにヒットしたトークンの数を表示することができる。
キュー・キャッシュを有効にする手順:
- 最小長 プロンプトの長さが少なくとも1024トークンであることを確認してください。
- 無矛盾接頭辞 : プロンプトの最初の1024トークンがリクエスト間で一貫していることを確 認する。
- APIレスポンス キャッシュヒットが発生すると、APIレスポンスに
cached_tokens
何トークンがキャッシュされるかを示す。
ヒントのキャッシュを無効にすることはできますか?
ヒントはすべてのサポートモデルでキャッシュされます。 デフォルトで有効 現在は 無効化オプションなし .つまり、サポートされているモデルを使用している場合、リクエストが適格であれば、キャッシュは自動的に有効になります。
なぜキュー・キャッシングが重要なのか?
キュー・キャッシュは主に2つの利点をもたらす:
- 遅延の軽減 キャッシングは、同じコンテンツの重複処理を避けることで、応答時間を大幅に短縮します。
- コスト削減 キャッシュは処理する必要があるトークンの数を減らし、全体的な計算コストを削減する。
ヒントキャッシングは、会話AIシステム、データ抽出、反復クエリなど、同じデータやヒントを頻繁に処理する必要があるアプリケーションシナリオに特に有利です。
OpenAI ヒントキャッシングのベストプラクティス
キャッシュヒットの確率を向上させるために、OpenAIは公式なアドバイスも提供している:
- 構造化されたプロンプト:プロンプトの前に静的または反復的なコンテンツを置き、プロンプトの後ろに動的なコンテンツを置く。
- キャッシュメトリクスの監視:キャッシュヒットレート、レイテンシー、キャッシュマークパーセンテージを監視することで、ヒンティングとキャッシュポリシーを最適化します。
- 長いヒントとオフピーク時間帯の活用:ピーク時間帯はキャッシュが頻繁にクリアされるため、キャッシュヒットの可能性を高めるために、長いヒントを使用し、オフピーク時間帯にリクエストを開始する。
- 一貫性の維持: 同じ接頭辞を持つプロンプトリクエストを定期的に使用することで、 キャッシュフラッシュの可能性を減らす。
OpenAIのヒントキャッシュ技術 よくある質問と回答
- キャッシングはどのようにしてデータのプライバシーを保証するのか?
異なる組織間でキューキャッシュを共有することはできません。同じキューキャッシュにアクセスできるのは、同じ組織のメンバーだけです。 - ヒント・キャッシュは出力マークアップや最終レスポンスに影響しますか?
キュー・キャッシュには影響しない。モデルの出力。生成される出力はキャッシュが使われていてもいなくても常に同じです。キャッシュされるのはプロンプト自身だけなので、実際のレスポンスはキャッシュされたプロンプトに基づいて毎回再計算されます。
- 手動でキャッシュをクリアすることは可能ですか?
キャッシュの手動クリアは現在サポートされていません。長期間使用されていないプロンプトは自動的にキャッシュから削除されます。通常、キャッシュは 5~10分 しかし、トラフィックの少ない時期には、キャッシュは最大で 1時間 . - ヒント・キャッシュを使うには追加料金が必要ですか?
必須ではありません。キャッシングは自動的に有効になり、ユーザーに追加のアクションやコストはかかりません。 - キャッシュされたヒントはTPMの制限にカウントされますか?
はい、キャッシュはレート制限には影響しません。キャッシュヒットはリクエスト総数にカウントされます。 - Scale TierとBulk APIでヒントキャッシュ割引を使用できますか?
ヒント キャッシュ・ディスカウントは Bulk API には適用されませんが、Scale Tier では適用されます。Scale Tierでは、オーバーフロークンもキャッシュディスカウントの対象となります。 - ヒント・キャッシュはデータ保持ゼロのリクエストにも適用されますか?
はい、プロンプト・キャッシングは既存のゼロ・データ保持ポリシーに準拠しています。
概要
Azure OpenAIのキューキャッシング機能は、長いキューや繰り返しのリクエストを処理するための貴重な最適化ソリューションを提供します。計算の待ち時間とコストを削減することで、モデルの効率を大幅に改善します。
より多くのモデルがサポートされ、ヒントキャッシング機能が最適化され続けることで、Azure OpenAIのユーザーはより効率的で費用対効果の高いサービス体験を享受できるようになると期待される。