Skip to Content
開発ガイドプロンプトキャッシュ

プロンプトキャッシュ

Prompt Cachingは繰り返し使用されるプロンプトプレフィックスをキャッシュし、トークン消費とレスポンスレイテンシを削減します。

仕組み

リクエストに長い繰り返し使用される system prompt やコンテキスト情報が含まれている場合:

  1. 初回リクエスト — すべてのトークンを完全に処理し、プロンプトプレフィックスをキャッシュします
  2. 以降のリクエスト — キャッシュにヒットした場合、キャッシュ部分のトークンは重複課金されません
  3. キャッシュの有効期限 — キャッシュには一定のTTL(通常5〜10分)があり、期限切れ後は再キャッシュが必要です

キャッシュサポート

OfoxAI のモデルリソースは AWS Bedrock、Azure OpenAI、Google Cloud、Alibaba Cloud、Volcano Engine などのモデル公式クラウドプロバイダーから提供されています。クラウドプロバイダーが Prompt Caching をサポートしているモデルは、OfoxAI でも同様にサポートされます。

クラウドプロバイダー代表的なモデルキャッシュ方式
AWS BedrockClaude シリーズネイティブ Prompt Caching
複数のクラウドプロバイダーGPT シリーズ自動キャッシュ
Google CloudGemini シリーズContext Caching
Alibaba CloudQwen シリーズプラットフォーム側キャッシュ
Volcano EngineDoubao シリーズプラットフォーム側キャッシュ

各モデルのキャッシュサポート状況は、各クラウドプロバイダーの公式ドキュメントを基準としてください。OfoxAI はキャッシュ関連パラメータをそのまま転送するため、追加の設定は不要です。

本ページで説明しているのは自動 / 暗黙的キャッシュ(モデルが繰り返しのプレフィックスをベストエフォートで再利用)です。大きく繰り返し再利用するコンテキストに対して能動的にキャッシュを作成し、確定的にヒットさせたい場合、Gemini は明示的キャッシュもサポートしています —— Gemini 明示的キャッシュ(cachedContents) を参照してください。

使い方

OpenAI プロトコル

OpenAI モデルの Prompt Caching は自動的に動作します — 繰り返しのプロンプトプレフィックスが検出されると自動的に有効化されます:

caching_openai.py
# 長い system prompt は自動的にキャッシュされます SYSTEM_PROMPT = """あなたは OfoxAI の技術サポートアシスタントです。 以下はあなたが把握すべき製品情報です: - OfoxAI は LLM Gateway で、100以上の大規模モデルをサポートしています - OpenAI / Anthropic / Gemini の3大プロトコルをサポートしています - ... (さらに多くの製品知識は省略) """ # 初回リクエスト:system prompt をキャッシュ response1 = client.chat.completions.create( model="openai/gpt-6.1-sol", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": "OfoxAI はどのモデルをサポートしていますか?"} ] ) # 2回目のリクエスト:キャッシュヒットで、より高速・低コスト response2 = client.chat.completions.create( model="openai/gpt-6.1-sol", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, # キャッシュヒット {"role": "user", "content": "Claude Code の設定方法は?"} ] )

Anthropic プロトコル

Anthropic モデルは明示的なキャッシュ制御をサポートしています:

caching_anthropic.py
import anthropic client = anthropic.Anthropic( base_url="https://api.ofox.ai/anthropic", api_key="<あなたの OFOXAI_API_KEY>" ) response = client.messages.create( model="anthropic/claude-sonnet-5.5", max_tokens=1024, system=[{ "type": "text", "text": "あなたはプロフェッショナルなアシスタントです。以下は製品ドキュメントです...", "cache_control": {"type": "ephemeral"} # 明示的にキャッシュを有効化 }], messages=[{"role": "user", "content": "製品の特徴をまとめてください"}] ) # キャッシュヒット状況を確認 print(f"キャッシュ書き込みトークン: {response.usage.cache_creation_input_tokens}") print(f"キャッシュヒットトークン: {response.usage.cache_read_input_tokens}")

コスト削減

キャッシュヒット後、キャッシュ部分のトークンはより低いキャッシュ読み取り料金で課金され、削減率はモデルによって異なります。一部のモデルでは、キャッシュへの書き込み時に別途キャッシュ書き込み料金が課金され、通常の入力料金より高くなる場合があります。

各モデルのキャッシュ読み取り料金とキャッシュ書き込み料金は、モデルカタログの該当モデルページの記載に従います。

実際の削減率はキャッシュヒット率と各クラウドプロバイダーの課金ポリシーによって異なります。詳細は OfoxAI コンソールの使用量統計でご確認ください。

ベストプラクティス

  1. 長いテキストを先頭に配置する — system prompt、ナレッジベースの内容など不変の部分を messages の先頭に配置します
  2. プレフィックスを一致させる — 完全に同一のプレフィックスのみキャッシュにヒットします
  3. プロンプト構造を適切に設計する — 固定部分と変動部分を分離します
# ✅ 良い設計:固定コンテンツが先、変動コンテンツが後 messages = [ {"role": "system", "content": LONG_STATIC_PROMPT}, # キャッシュ可能 {"role": "user", "content": dynamic_question} # 変動部分 ] # ❌ 悪い設計:変動コンテンツが固定コンテンツに混在 messages = [ {"role": "system", "content": f"Today is {date}. {LONG_PROMPT}"} # 毎日異なるためキャッシュ不可 ]

キャッシュヒットは API レスポンスの usage フィールドで確認できます。また、OfoxAI コンソールの使用量統計でもキャッシュヒット率を確認できます。

最終更新日