プロンプトキャッシュ
Prompt Cachingは繰り返し使用されるプロンプトプレフィックスをキャッシュし、トークン消費とレスポンスレイテンシを削減します。
仕組み
リクエストに長い繰り返し使用される system prompt やコンテキスト情報が含まれている場合:
- 初回リクエスト — すべてのトークンを完全に処理し、プロンプトプレフィックスをキャッシュします
- 以降のリクエスト — キャッシュにヒットした場合、キャッシュ部分のトークンは重複課金されません
- キャッシュの有効期限 — キャッシュには一定のTTL(通常5〜10分)があり、期限切れ後は再キャッシュが必要です
キャッシュサポート
OfoxAI のモデルリソースは AWS Bedrock、Azure OpenAI、Google Cloud、Alibaba Cloud、Volcano Engine などのモデル公式クラウドプロバイダーから提供されています。クラウドプロバイダーが Prompt Caching をサポートしているモデルは、OfoxAI でも同様にサポートされます。
| クラウドプロバイダー | 代表的なモデル | キャッシュ方式 |
|---|---|---|
| AWS Bedrock | Claude シリーズ | ネイティブ Prompt Caching |
| Azure OpenAI | GPT-4o シリーズ | 自動キャッシュ |
| Google Cloud | Gemini シリーズ | Context Caching |
| Alibaba Cloud | Qwen シリーズ | プラットフォーム側キャッシュ |
| Volcano Engine | Doubao シリーズ | プラットフォーム側キャッシュ |
各モデルのキャッシュサポート状況は、各クラウドプロバイダーの公式ドキュメントを基準としてください。OfoxAI はキャッシュ関連パラメータをそのまま転送するため、追加の設定は不要です。
使い方
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-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "OfoxAI はどのモデルをサポートしていますか?"}
]
)
# 2回目のリクエスト:キャッシュヒットで、より高速・低コスト
response2 = client.chat.completions.create(
model="openai/gpt-4o",
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-4.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}")コスト削減
キャッシュヒット後、キャッシュ部分のトークンはより低い料金で課金され、削減率はモデルによって異なります:
- Anthropic Claude シリーズ — キャッシュヒットで入力コストを約 90% 削減
- OpenAI GPT シリーズ — キャッシュヒットで入力コストを約 50% 削減
- Google Gemini シリーズ — キャッシュヒットで入力コストを約 50-75% 削減
実際の削減率はキャッシュヒット率と各クラウドプロバイダーの課金ポリシーによって異なります。詳細は OfoxAI コンソールの使用量統計でご確認ください。
ベストプラクティス
- 長いテキストを先頭に配置する — system prompt、ナレッジベースの内容など不変の部分を messages の先頭に配置します
- プレフィックスを一致させる — 完全に同一のプレフィックスのみキャッシュにヒットします
- プロンプト構造を適切に設計する — 固定部分と変動部分を分離します
# ✅ 良い設計:固定コンテンツが先、変動コンテンツが後
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 コンソールの使用量統計でもキャッシュヒット率を確認できます。
Last updated on