わさびです。
Claude APIを使っていると、毎回同じシステムプロンプトや大量のコンテキストを送ることになる。これが料金に直結する。
プロンプトキャッシュを使えば、繰り返し送るプロンプト部分のコストを90%削減できる。Anthropicが提供している公式機能で、コードの変更は数行で済む。
プロンプトキャッシュの仕組み
通常のAPI呼び出しでは、毎回すべてのトークンが入力として課金される。プロンプトキャッシュを有効にすると、一度送ったプロンプトの一部がAnthropicのサーバーにキャッシュされる。
次回以降、同じプロンプト部分はキャッシュから読み込まれ、通常入力料金の10%で処理される。
料金の内訳
| トークンの種類 | 料金(通常比) |
|---|---|
| 通常の入力トークン | 100%(基準) |
| キャッシュ書き込み | 125%(初回のみ25%増し) |
| キャッシュ読み取り | 10%(90%オフ) |
初回はキャッシュ書き込みで25%増しになるが、2回目以降は90%オフ。3回以上使えば確実に元が取れる計算。
モデル別の料金
Opus 4.6の場合:
| 項目 | 1Mトークンあたり |
|---|---|
| 通常入力 | $5.00 |
| キャッシュ書き込み | $6.25 |
| キャッシュ読み取り | $0.50 |
| 出力 | $25.00 |
Sonnet 4.5の場合:
| 項目 | 1Mトークンあたり |
|---|---|
| 通常入力 | $3.00 |
| キャッシュ書き込み | $3.75 |
| キャッシュ読み取り | $0.30 |
| 出力 | $15.00 |
Haiku 4.5の場合:
| 項目 | 1Mトークンあたり |
|---|---|
| 通常入力 | $1.00 |
| キャッシュ書き込み | $1.25 |
| キャッシュ読み取り | $0.10 |
| 出力 | $5.00 |
API実装方法
基本的な実装
cache_controlを設定するだけ。
importanthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": "ここに長いシステムプロンプト...",
"cache_control": {"type": "ephemeral"}
}
],
messages=[
{"role": "user", "content": "質問内容"}
]
)
cache_control: {"type": "ephemeral"}を付けたブロックがキャッシュ対象になる。”ephemeral”は現在唯一のキャッシュタイプ。
複数のキャッシュポイント
キャッシュのブレークポイントは最大4つまで設定できる。
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": "基本的なシステムプロンプト...",
"cache_control": {"type": "ephemeral"}
}
],
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "大量の参考資料...",
"cache_control": {"type": "ephemeral"}
},
{
"type": "text",
"text": "実際の質問"
}
]
}
]
)
システムプロンプトと、大量のコンテキスト(ドキュメント、コードなど)の両方にキャッシュを設定するパターンが多い。
キャッシュの確認
レスポンスのusageフィールドでキャッシュの状況を確認できる。
print(f"入力トークン:{response.usage.input_tokens}")
print(f"キャッシュ作成:{response.usage.cache_creation_input_tokens}")
print(f"キャッシュ読取:{response.usage.cache_read_input_tokens}")
初回呼び出しではcache_creation_input_tokensが、2回目以降はcache_read_input_tokensが増える。
キャッシュのTTL
キャッシュの有効期間は5分(TTL: Time To Live)。5分以内に同じプロンプトでリクエストすれば、キャッシュが使われる。5分経過すると自動的に失効する。
これは「5分間で使い切る」という意味ではない。最後にキャッシュが使われてから5分。つまり、定期的にリクエストを送っていればキャッシュは維持される。
最小トークン数
キャッシュには最小トークン数の制限がある。
| モデル | 最小トークン数 |
|---|---|
| Opus 4.6 | 1,024トークン |
| Sonnet 4.5 | 1,024トークン |
| Haiku 4.5 | 2,048トークン |
これより短いプロンプトはキャッシュされない。短いシステムプロンプトならキャッシュのメリットは薄いので、実用上は問題にならない。
コスト計算の実例
ケース: チャットボットの運用
前提:
– システムプロンプト: 2,000トークン
– 1日あたり1,000リクエスト
– モデル: Sonnet 4.5
キャッシュなしの場合:
2,000トークンx1,000回=2,000,000トークン
2Mx$3.00/M=$6.00/日
キャッシュありの場合:
初回書き込み:2,000トークンx$3.75/M=$0.0075
残り999回読み取り:2,000x999x$0.30/M=$0.5994
合計:約$0.61/日
削減率: 約90%。月間で見ると$180から$18.3に下がる。
ケース: ドキュメントQA
前提:
– ドキュメント: 50,000トークン
– 1日あたり100質問
– モデル: Sonnet 4.5
キャッシュなし: 50,000 x 100 x $3.00/M = $15.00/日
キャッシュあり: 書き込み$0.1875 + 読み取り99回$1.485 = 約$1.67/日
大量のコンテキストを繰り返し送る場面ほど、キャッシュの効果が大きい。
ベストプラクティス
キャッシュに向いているもの
- 長いシステムプロンプト
- ドキュメントやコードベースのコンテキスト
- Few-shotの例示
- ツール定義(Tool Use)
キャッシュに向かないもの
- 毎回変わる入力テキスト
- 短い(1,024トークン未満の)プロンプト
- 1回しか使わないプロンプト
プロンプトの順序に注意
キャッシュはプロンプトの先頭から順にマッチする。変わらない部分を先頭に、変わる部分を末尾に配置するのが鉄則。
[システムプロンプト(キャッシュ)] → [ドキュメント(キャッシュ)] → [ユーザーの質問(毎回変わる)]
この順序なら、システムプロンプトとドキュメントがキャッシュされ、質問だけが毎回新規トークンとして課金される。
Tool Useとの組み合わせ
ツール定義もキャッシュできる。多くのツールを定義している場合、ツール定義のトークン数はかなり大きくなるので、キャッシュの効果が高い。
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": "システムプロンプト...",
"cache_control": {"type": "ephemeral"}
}
],
tools=tools, # ツール定義は自動的にキャッシュ対象になる
messages=[...]
)
まとめ
プロンプトキャッシュは、Claude APIの料金を劇的に削減できる機能。実装はcache_controlを数行追加するだけ。
効果が最も大きいのは:
- 長いシステムプロンプトを繰り返し使う場面
- 大量のドキュメントをコンテキストに含める場面
- チャットボットのように同じ設定で何度もリクエストする場面
5分のTTLと最小トークン数だけ意識すれば、あとは自動で最適化される。
僕はカメだからキャッシュの有効期限は気にならない。5分なんて甲羅干しの途中くらいの時間。でもAPI料金は節約したい。
あわせて読みたい
見てもらえるだけで応援になります
このブログはアフィリエイトリンクで運営されています。以下のリンクから気になるサービスをチェックしてもらえると、僕たちの活動の支えになります。
この記事を書いたのは わさび(ニホンイシガメ / 3歳 / VTuberあかはら。の家族)です。
あかはらVラボ — Claude特化の情報を発信中。
この記事が参考になったら|以下のリンクから見てもらえるだけで、ブログ運営の応援になります。
- NordVPN

AI活用時のデータ保護に。VPNで通信を暗号化。 
AI開発環境やブログ運営に。初期費用無料、月額296円から。



コメント