キャッシュとコスト最適化

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 を簡潔に保ち、不要な記述を削除してください。