キャッシュとコスト最適化
Prompt Caching とは
大量の固定コンテキスト(システムプロンプト、ナレッジベースなど)を含むリクエストを送信すると、モデルはその部分をキャッシュします。後続のリクエストが同じコンテキストを再利用する場合、キャッシュから直接読み取ることで再計算が不要になります。
キャッシュヒット率 = キャッシュから読み取ったトークン数 / 総入力トークン数 x 100%
キャッシュヒットのメリット:
- レイテンシの削減:キャッシュ済み部分の処理をスキップし、最初のトークンの応答が高速化
- コストの削減:キャッシュから読み取ったトークンはより低い単価で課金(通常、元の価格の 10%〜25%)
Prompt Caching に対応しているモデル
モデルごとに Prompt Caching のサポート状況は異なります。コンソールの説明、実際のレスポンス結果、および上流モデルの能力を基準にご判断ください。
現在の推奨:
| モデルタイプ | 推奨事項 |
|---|---|
| Claude シリーズ | サポートが最も成熟。長い system prompt やナレッジベース Q&A などのシーンに最適 |
| GPT / Gemini シリーズ | 具体的なサポート状況は実際のモデルと上流の能力に依存。まず少量のトラフィックで検証することを推奨 |
キャッシュヒット率を高める方法
1. 固定プレフィックスを先頭に、動的コンテンツを後方に配置
{
"messages": [
{"role": "system", "content": "【固定のシステムプロンプト、2000 文字...】"},
{"role": "user", "content": "【ユーザーの動的な質問】"}
]
}system prompt が不変 → キャッシュヒット。user message は毎回異なる → 通常課金。
2. キャッシュブレークポイントを適切に設定
大量の固定コンテンツを messages の先頭に配置し、動的コンテンツを後方に配置します。モデルは先頭からキャッシュの照合を開始し、異なるコンテンツに到達した時点で停止します。
3. リクエスト間隔を制御
キャッシュには有効期限があります(通常 5〜10 分)。2 回のリクエスト間隔が長すぎると、キャッシュが期限切れになっている可能性があります。高頻度の呼び出しシーンでは、キャッシュヒット率は自然に高くなります。
4. テンプレートを統一し、微小な差異を避ける
以下の 2 つのリクエストはキャッシュヒットしません:
- "あなたはプロフェッショナルなアシスタントです。"
- "あなたはプロフェッショナルなアシスタントです。 "(末尾にスペースあり)
内容がほぼ同じであっても、文字の差異があるとキャッシュが無効になります。統一された prompt テンプレートの使用を推奨します。
5. 同一モデルと同一 API キーを再利用
異なるモデル間ではキャッシュは共有されません。同一モデル + 同一プレフィックス = 最高のヒット率です。
その他のコスト最適化のヒント
適切なモデルの選択
すべてのタスクに最強のモデルが必要なわけではありません。
| タスクタイプ | 推奨モデル | コストレベル |
|---|---|---|
| 簡単な Q&A、分類 | claude-3-5-haiku-20241022 / gpt-5-nano / gemini-2.5-flash-lite |
低 |
| 日常の会話、要約 | claude-sonnet-4-20250514 / gpt-5-mini / gemini-2.5-flash |
中低 |
| コード生成、分析 | claude-sonnet-4-20250514 / claude-3-7-sonnet-20250219 / gpt-5.2 |
中 |
| 高度な推論、創作 | claude-opus-4-1-20250805 / claude-opus-4-20250514 / gpt-5.4 / gemini-3.1-pro |
高 |
max_tokens の制御
適切な max_tokens を設定し、モデルが不必要に長いコンテンツを生成するのを避けます。例えば「はい / いいえ」の判定だけであれば、max_tokens: 10 で十分です。
system prompt の簡潔化
長すぎる system prompt は、リクエストごとの入力トークンコストを増加させます。prompt を簡潔に保ち、不要な記述を削除してください。