6 分で読めます

プロンプトキャッシュ設計——ブレークポイントとTTL選択

AIエージェントが本番稼働を始めると、見落としがちなコスト構造の問題が浮上します。マルチターン会話エージェントは毎ターン、同じシステムプロンプト・ツール定義・参照ドキュメントをゼロから送信します。20,000トークンのシステムプロンプトを持つエージェントが1日1,000ターン実行すれば、その大半が純粋な「再送信コスト」です。Anthropic APIのプロンプトキャッシュはこの無駄を設計レベルで解消できます。

本記事はエージェントハーネス設計と連動しています。コスト計測・部門配賦の全体像はAI FinOps設計を参照してください。

プロンプトキャッシュの仕組みとエージェントへのインパクト

Anthropic APIのプロンプトキャッシュはKVキャッシュをAPIレベルで提供し、キャッシュ読み込みトークンの単価を通常入力比90%削減で再利用できます。

プロンプトキャッシュは、Anthropic APIがAttention層のKV(Key-Value)テンソルをサーバーサイドで保持する仕組みです。同一プレフィックスを再送信した際、モデルはキャッシュされたKVを読み込むだけで再計算をスキップします。

コスト構造の変化

トークン単価はキャッシュ操作によって3段階に変わります(Claude Sonnet 4.6の場合)。

操作単価倍率
通常入力$3.00/百万トークン基準
キャッシュ書き込み(5分)$3.75/百万トークン1.25×
キャッシュ書き込み(1時間)$6.00/百万トークン2.0×
キャッシュ読み込み$0.30/百万トークン0.10×

キャッシュ書き込みのプレミアムがあっても、同一プレフィックスを2〜3回再利用すればネットで安くなります。1,000回再利用するエージェントでは、該当トークンのコストを90%近く削減できます。

キャッシュの評価順序

Anthropic APIはキャッシュプレフィックスを tools → system → messages の階層順に評価します。tools定義がキャッシュに乗れば、その下のsystemもまとめてキャッシュから読まれます。この順序は設計上の重要な制約で、後述するブレークポイント配置の基礎になります。

最小キャッシュ可能長はモデルによって異なり、Claude Sonnet 4.6・Opus 4.8 では1,024トークンです。これ未満のブロックはキャッシュ書き込みの対象にならず、エラーなく通常入力として処理されます。

キャッシュブレークポイントの配置設計

ブレークポイントはtools→system→messagesの階層順に評価され、変化頻度の低いブロック末尾に1リクエスト最大4個配置するのが設計の基本です。

cache_control パラメータをブロックに付与することでキャッシュブレークポイントを明示します。

``json
{
"type": "text",
"text": "【静的なシステムプロンプト本文】",
"cache_control": {
"type": "ephemeral",
"ttl": "5m"
}
}
``

1リクエストに設定できる明示ブレークポイントは最大4個です。モデルは最後にキャッシュヒットしたブレークポイント以降のトークンを新規計算します。

推奨配置パターン

エージェント設計で有効な配置は次の3層です。

``
Layer 1: tools定義(ほぼ変わらない)→ cache_control: {ttl: "1h"}
Layer 2: systemプロンプト本文(変わらない)→ cache_control: {ttl: "1h"}
Layer 3: 参照ドキュメント(セッション単位で固定)→ cache_control: {ttl: "5m"}
---(ここから下はキャッシュしない)---
Layer 4: ユーザーメッセージ・ツール結果(ターンごとに変化)
``

キャッシュすべきでないコンテンツ

ユーザーメッセージ本文・ツール実行結果・タイムスタンプを含むテキスト・セッションIDは、ターンごとに変化するためキャッシュに乗せません。これらを cache_control 付きブロックより上流に置くと、意図せずキャッシュが分断されます。

マルチターン会話の自動キャッシュと明示キャッシュの使い分け

マルチターン会話では自動キャッシュが会話履歴を逐次キャッシュし、長時間セッションには1時間TTLとの組み合わせでコスト構造が大きく変わります。

Anthropic APIには 自動キャッシュ明示キャッシュ の2つのモードがあります。

自動キャッシュ(推奨起点)

明示的に cache_control を指定しなくても、APIが会話履歴を自動でキャッシュします。ターンNのキャッシュをターンN+1が読み込む形で、会話履歴が積み上がるコストを自動で最適化します。シンプルなチャット型エージェントの多くはこれだけで十分です。

明示キャッシュの適用場面

長い参照ドキュメントを毎ターン添付するエージェント、ツール定義が多いエージェント、複数セッションで同一システムプロンプトを使い回すバッチ処理エージェントでは、明示キャッシュが有効です。

キャッシュのプリウォーム

本番トラフィックが来る前にキャッシュを温めるには、max_tokens: 0 のリクエストを送ります。

``json
{
"model": "claude-sonnet-4-6",
"max_tokens": 0,
"system": [
{
"type": "text",
"text": "【大規模システムプロンプト】",
"cache_control": {"type": "ephemeral", "ttl": "1h"}
}
],
"messages": [{"role": "user", "content": "warmup"}]
}
``

stop_reason: "max_tokens" で即終了し、内容は返りませんが、キャッシュ書き込みは実行されます。初回リクエストのレイテンシスパイクを避けたい本番環境で有効な手法です。

使用量のモニタリング

レスポンスの usage フィールドに、キャッシュ書き込み・読み込みのトークン数が別々に記録されます。

``json
{
"usage": {
"input_tokens": 100,
"cache_creation_input_tokens": 18000,
"cache_read_input_tokens": 52000,
"output_tokens": 300
}
}
``

cache_read_input_tokens がターンを経るごとに増えているかを監視することで、キャッシュが正常に効いているかを確認できます。

キャッシュ無効化リスクと設計の落とし穴

ツール定義の変更やweb_search機能の切り替えはキャッシュ全体を即時無効化するため、安定ブロックより上流に変動設定を置かない構造設計が必須です。

プロンプトキャッシュを本番に導入した際、最も多いトラブルが「想定通りキャッシュが効かない」という問題です。主な原因は次の無効化トリガーです。

変更操作無効化範囲
ツール定義の変更キャッシュ全体
web_searchの有効化/無効化system + messages
citationsの有効化/無効化system + messages
speed設定の変更(fast/standard)system + messages
tool_choice パラメータ変更messagesのみ

設計上の対策

変動頻度の高い設定を「安定ブロックの下流」に配置することが根本的な解決策です。たとえば、セッションごとにツールを動的に追加するアーキテクチャでは、ベースとなる静的ツール群と動的ツール群を別リクエストに分けるか、動的部分をツールとして扱わず user ターンの構造化テキストとして渡す設計を検討します。

ワークスペース単位のキャッシュ分離

2026年2月以降、プロンプトキャッシュはワークスペース単位で分離されています。異なるプロジェクト・チームが同じAPIキーを共有している場合でも、ワークスペースが異なればキャッシュは共有されません。エンタープライズ環境でのキャッシュヒット率の設計には、このワークスペース境界を意識する必要があります。

規模別の留意点(SMB / エンタープライズ)

SMB

まず自動キャッシュだけで始めるのが現実的です。システムプロンプトが1,024トークンを超えるエージェントが1本あれば、自動キャッシュだけで月次コストの20〜40%が削減されるケースが多くあります。明示キャッシュや1時間TTLは、月次の請求書を確認した後に効果の高いエージェントから順次適用します。Kuu株式会社のAI運用管理サービスでは、キャッシュ効率のモニタリング設計を含む導入支援を行っています。

エンタープライズ

複数チームが同一LLMプラットフォームを使う環境では、ワークスペース設計とキャッシュ効率の関係を設計時に考慮します。大規模なRAGシステムでは、取得ドキュメントをキャッシュ内に配置するか、毎ターン動的に挿入するかのトレードオフが発生します。キャッシュ書き込みコスト(1h TTLは2.0×)と読み込みコスト(0.10×)の損益分岐点は、ワークスペースごとのリクエスト頻度から算出します。大規模統制が必要な場合はKuuのエンタープライズ向けRDEサービスも参照してください。

参考

まとめ

プロンプトキャッシュは「設定するだけ」ではなく、設計思想として取り込む必要があります。変化頻度ごとにコンテンツを層に分け、適切なTTLとブレークポイントを割り当てることで、エージェントのAPIコストは構造的に下がります。無効化トリガーを把握した上でキャッシュ境界を設計することが、本番環境で期待通りの効果を得るための前提です。

エージェントのコスト設計・可観測性・権限管理を含むトータルな運用設計に課題を感じている場合は、Kuuへお問い合わせください。

関連記事

Sagaパターンでエージェント処理を取り消す——補償設計と一貫性保証マルチエージェント移行設計——シングルから3フェーズで進めるコンテキスト圧縮の設計——AIエージェントの長期セッション管理AIエージェント並列実行の設計——Fan-Out/Fan-InとMap-Reduceパターン