2026-04-18
Claude APIを使っていると、毎回同じシステムプロンプトや大量のコンテキストを送っていませんか?その無駄なトークン課金、Prompt Cachingで劇的に削減できます。
AnthropicのPrompt Cachingは、APIリクエストのプロンプトプレフィックスをサーバー側でキャッシュし、次回以降のリクエストで再利用する仕組みです。
つまり、同じ内容を何度も送らなくてよくなるため、処理時間とコストの両方を大幅に削減できます。
Prompt Cachingには2つの使い方があります。
リクエストのトップレベルにcache_controlを1行追加するだけ。システムが自動的に最適な位置にキャッシュブレークポイントを適用してくれます。
マルチターン会話に最適。会話が進むにつれてメッセージ履歴が増えても、前のターンまでの内容がキャッシュされます。
個別のコンテンツブロックに直接cache_controlを配置する方法。キャッシュの境界を細かく制御したい場合に使います。
例えば「システムプロンプトだけキャッシュ」「ツール定義だけキャッシュ」といった制御が可能です。
既存のAPIリクエストに"cache_control": {"type": "ephemeral"}を追加するだけです。
{
"model": "claude-opus-4-7",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "あなたは親切なアシスタントです。以下のルールに従って...(長いシステムプロンプト)",
"messages": [
{"role": "user", "content": "こんにちは"}
]
}
これだけ。システムが自動的に最後のキャッシュ可能ブロックにキャッシュを適用します。
Opus 4.7の料金体系で計算してみましょう。
| 項目 | 価格(1Mトークンあたり) |
|---|---|
| 通常入力 | $5.00 |
| キャッシュ書込(5分TTL) | $6.25 |
| キャッシュ書込(1時間TTL) | $10.00 |
| キャッシュヒット | $0.50(90%オフ!) |
10,000トークンのシステムプロンプトを使うチャットボットを1時間で50回呼び出すシナリオ:
キャッシュはプロンプトのプレフィックス(先頭からの連続した部分)に対して機能します。具体的には以下の順でプロンプトが構成され、キャッシュブレークポイントまでの全内容がキャッシュされます:
tools)system)messages)自動キャッシュでは、この中で最後のキャッシュ可能ブロックの末尾に自動的にキャッシュブレークポイントが置かれます。
{"type": "ephemeral"}{"type": "ephemeral", "ttl": 3600}(書込コストは高いが、低頻度アクセスに向いている)会話が進むほどメッセージ履歴が長くなりますが、前のターンまでの内容がキャッシュされるので、毎回全履歴を再処理する必要がありません。自動キャッシュのベストケースです。
大量のドキュメントをコンテキストとして渡すRAGシステムでは、同じドキュメントを何度も再処理することになります。システムプロンプトとツール定義をキャッシュしておけば、検索結果の差分だけを新たに処理できます。
ツール定義が大量にあるエージェントシステムでは、ツール定義だけで数千トークンを消費することも。キャッシュすれば毎回のツール定義処理をスキップできます。
多くの例を含むプロンプトは、その例の部分が毎回同じなのでキャッシュと相性抜群です。
既存のコードに自動キャッシュを導入するのは非常に簡単です。
既存のAPI呼び出しに"cache_control": {"type": "ephemeral"}を追加。
APIレスポンスのusageフィールドにキャッシュ関連の情報が含まれます。
"usage": {
"input_tokens": 100,
"cache_creation_input_tokens": 10000,
"cache_read_input_tokens": 0
}
2回目以降のリクエストでは:
"usage": {
"input_tokens": 100,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 10000
}
cache_read_input_tokensの値が増えていれば、キャッシュが正しくヒットしています。
あとは料金ダッシュボードでコストが下がっていることを確認するだけ。
Prompt Cachingの自动キャッシュ — 3つのポイント:
"cache_control": {"type": "ephemeral"}をリクエストに追加まだ使っていないなら、今日から始めるべき機能です。既存のコードに1行追加するだけで、来月のAPI請求が劇的に変わるかもしれません。