Claude Opus 5の新しいprompt-caching APIは、モデルに変更のないテキストの再読み込みをスキップさせることで、チャット形式のアプリにおけるトークン料金を大幅に削減します。最初の要求にはわずかな割増料金がかかりますが、それ以降のヒットはすべて基本料金の約10分の1のコストで済むため、継続的な費用を一度限りの料金に変えることができます。
なぜ開発者は同じ言葉に対して二度支払うことになるのか
ほとんどの対話型インターフェースは、ターンごとにプロンプト全体を再構築します。ユーザーがフォローアップの質問をするたびに、8,000トークンのシステムプロンプト、添付されたPDF、そして会話履歴のすべてがモデルへと送られます。テキストの大部分は変化していないにもかかわらず、モデルはすべてのトークンを再処理します。現在の価格設定では、この冗長性が頻繁に利用されるボットのコストの大部分を占める可能性があります。
キャッシュが計算式をどう変えるか
このAPIは、定義されたブレークポイントまでのトークンの「ブロック」ごとにキャッシュエントリを作成します。次のリクエストの先頭に同じブロックが含まれている場合、サービスは再度トークン化する代わりにキャッシュからそのブロックを読み取ります。価格設定の内訳は、節約された作業量を反映しています。
- キャッシュ書き込み – 5分TTL: 基本料金の 1.25 ×
- キャッシュ書き込み – 1時間TTL: 基本料金の 2 ×
- キャッシュ読み取り(ヒット): 基本料金の 0.1 ×
実際には、新しいブロックへの最初の呼び出しは、通常の要求よりも少し高くなります。キャッシュにヒットするその後の呼び出しはすべて90%安くなるため、会話が深まるにつれて純支出は急激に減少します。
プロンプト構造化の「黄金律」
キャッシュの有効性は、静的なコンテンツと動的なコンテンツをどこに配置するかによって決まります。変わらないものはすべて前方に配置し、常に変化する部分は末尾に追いやります。信頼できる順序は以下の通りです。
- Tools – モデルが呼び出す可能性のある外部関数の定義。
- System instructions – モデルに従わせたいハイレベルな振る舞い。
- Documents – PDF、ナレッジベース、ポリシーの抜粋などの長いコンテキスト。
- User questions – ターンごとに変化するライブクエリ。
ブレークポイントより前のトークンを一つでも変更すると、キャッシュエントリは無効になり、モデルはそれ以降のすべてを再処理しなければなりません。
遵守すべき隠れた制限事項
- 最小ブロックサイズ – Opus 5は、少なくとも512トークンを含むブロックのみをキャッシュします。それより小さいものは完全にキャッシュから外れます。
- タイムスタンプのバグ – キャッシュされたブロック内に変化するタイムスタンプを挿入すると、ブロックのテキストが完全に一致しなくなるため、必ずキャッシュミスが発生します。
- 20ブロックのルックバック – サービスは一致するものを探すために、直近の20ブロックのみをスキャンします。急速に進む長時間セッションは、キャッシュのウィンドウを追い越してしまう可能性があります。
- 並列リクエスト – 同時に複数の同一リクエストを送信すると、すべてミスになります。なぜなら、キャッシュは最初のリクエストが完了した後にのみ作成されるからです。単一の呼び出しでキャッシュを温めてから、残りのリクエストを実行してください。
APIレスポンスで節約を確認する
各レスポンスには、3つのトークンカウンターが報告されます。
cache_read_input_tokens– キャッシュヒットから提供されたトークン。cache_creation_input_tokens– このリクエストでキャッシュに書き込まれたトークン。input_tokens– キャッシュされていなかった新しいトークン。
これら3つの数値を合計すると、そのターンでモデルが考慮した合計トークン数が得られます。両方のキャッシュフィールドがゼロの場合、リクエストはキャッシュにヒットしていません。ブロックサイズとブレークポイントの配置を確認してください。
まとめ: 不変のコンテキストを前方に配置し、Claude Opus 5のprompt-caching APIに重労働を任せることで、継続的なトークン費用を一度限りの料金に変えることができます。その結果、トークンの下限を遵守し、キャッシュされたブロック内に可変のマーカーを避け、キャッシュ対象のコンテンツを20ブロックの範囲内に収めていれば、同じシステムプロンプトやドキュメントセットを繰り返し参照するあらゆるチャットボットにおいて、劇的なコスト削減が実現します。
