Claude Opus 4.6 Prompt Caching で API コストを70%削減する実装ガイド【2026年6月最新】
Claude Opus 4.6のPrompt Caching機能を使い、繰り返しリクエストのコストを劇的に削減する実装方法を解説。キャッシュ戦略、実測データ、コード例を網羅した完全ガイド。
Anthropic の Claude API を使った開発で、毎回同じコンテキストを送信してコストが膨らんでいませんか?2025年12月にリリースされた Claude Opus 4.6 および Sonnet 4.5 の Prompt Caching 機能を使えば、繰り返し送信するプロンプトの一部をキャッシュし、入力トークンコストを最大90%削減できます。
本記事では、Prompt Caching の仕組み、実装方法、実測コスト比較、最適化戦略を2026年6月時点の最新情報に基づいて解説します。
Prompt Caching とは
Prompt Caching は、プロンプトの一部をサーバー側にキャッシュし、次回リクエスト時に再利用することで、入力トークンの処理コストを削減する機能です。
基本的な仕組み
sequenceDiagram
participant C as クライアント
participant A as Anthropic API
participant Cache as Cache Storage
C->>A: 1回目: システムプロンプト(1024トークン)
A->>Cache: キャッシュ保存
A->>C: cache_creation_input_tokens: 1024
C->>A: 2回目: 同じシステムプロンプト
A->>Cache: キャッシュヒット
Cache-->>A: キャッシュ済みデータ
A->>C: cached_input_tokens: 1024<br/>通常の1/10のコスト
Prompt Caching のリクエストフロー。初回リクエストでキャッシュを作成し、2回目以降は再利用することで入力トークンコストを削減
対応モデル(2026年6月時点)
- Claude Opus 4.6
- Claude Sonnet 4.5
- Claude Haiku 4.0(2026年2月以降)
キャッシュの有効期限
- 5分間: 最後のアクセスから5分間キャッシュが保持される
- 5分以内に再度アクセスすれば、さらに5分延長される
- 5分経過後は自動削除され、次回は新規キャッシュ作成が必要
料金体系とコスト削減効果
Opus 4.6 の料金(2026年6月時点)
| トークン種別 | 価格(100万トークンあたり) | 通常入力比 |
|---|---|---|
| Input tokens(通常) | $15.00 | 1x |
| Cache write tokens | $18.75 | 1.25x |
| Cache read tokens | $1.50 | 0.1x(90%削減) |
| Output tokens | $75.00 | - |
実測コスト比較
以下は、1024トークンのシステムプロンプトを100回送信した場合のコスト比較です。
ケース1: キャッシュなし(従来)
- 入力: 1024トークン × 100回 = 102,400トークン
- コスト: 102,400 × ($15 / 1,000,000) = $1.536
ケース2: キャッシュあり(初回作成 + 99回再利用)
- 初回: 1024トークン × $18.75 / 1,000,000 = $0.0192
- 2回目以降: 1024トークン × 99回 × $1.50 / 1,000,000 = $0.152
- 合計: $0.171(約89%削減)
Prompt Caching の実装方法
基本的な実装
キャッシュを有効にするには、cache_control パラメータを system または user メッセージに追加します。
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
const systemPrompt = `あなたは技術ドキュメントの専門家です。
以下のコンテキストを参照して質問に答えてください。
# プロジェクトドキュメント
[ここに長大なドキュメント内容... 5000トークン相当]
`;
const message = await client.messages.create({
model: "claude-opus-4-20250514", // Opus 4.6
max_tokens: 1024,
system: [
{
type: "text",
text: systemPrompt,
cache_control: { type: "ephemeral" }, // キャッシュ有効化
},
],
messages: [
{
role: "user",
content: "このプロジェクトのアーキテクチャを説明してください",
},
],
});
console.log(message.usage);
// {
// input_tokens: 150,
// cache_creation_input_tokens: 5120,
// cache_read_input_tokens: 0,
// output_tokens: 350
// }
キャッシュの確認
レスポンスの usage フィールドで、キャッシュの状態を確認できます。
interface Usage {
input_tokens: number; // 新規入力トークン
cache_creation_input_tokens: number; // キャッシュ作成トークン(初回のみ)
cache_read_input_tokens: number; // キャッシュ読み取りトークン(2回目以降)
output_tokens: number; // 出力トークン
}
- 初回リクエスト:
cache_creation_input_tokensに値が入る - 2回目以降:
cache_read_input_tokensに値が入る(キャッシュヒット)
キャッシュ戦略の最適化
1. キャッシュ対象の選定
キャッシュすべきコンテンツの優先順位:
- システムプロンプト(ほぼ固定)
- 長大なコンテキスト(ドキュメント、コードベース)
- ツール定義(Function Calling の schema)
- 会話履歴の冒頭部分(チャットボット)
2. マルチブロックキャッシュ
複数のブロックを個別にキャッシュすることで、部分的な更新に対応できます。
const message = await client.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 1024,
system: [
{
type: "text",
text: "あなたは技術ドキュメントの専門家です。",
cache_control: { type: "ephemeral" }, // ブロック1: システムロール
},
{
type: "text",
text: "[長大なプロジェクトドキュメント...]",
cache_control: { type: "ephemeral" }, // ブロック2: コンテキスト
},
],
messages: [
{
role: "user",
content: [
{
type: "text",
text: "[最近の会話履歴...]",
cache_control: { type: "ephemeral" }, // ブロック3: 会話履歴
},
{
type: "text",
text: "新しい質問を追加",
},
],
},
],
});
ポイント:
- ブロック1・2は完全に固定 → 常にキャッシュヒット
- ブロック3は会話が進むと更新 → 定期的にキャッシュ再作成
3. キャッシュのウォーミング
初回リクエスト時にダミー質問でキャッシュを事前作成し、本番リクエストでヒット率を上げる戦略。
// 1. ウォーミング(キャッシュ作成)
await client.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 10,
system: [
{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } },
],
messages: [{ role: "user", content: "準備完了" }],
});
// 2. 本番リクエスト(キャッシュヒット)
const actualResponse = await client.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 1024,
system: [
{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } },
],
messages: [{ role: "user", content: "実際の質問..." }],
});
4. キャッシュミス対策
5分以内に再リクエストできない場合、定期的な keep-alive リクエストでキャッシュを延長できます。
// 3分ごとにダミーリクエストを送信してキャッシュを延長
setInterval(async () => {
await client.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 1,
system: [
{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } },
],
messages: [{ role: "user", content: "keep-alive" }],
});
}, 3 * 60 * 1000); // 3分
注意: keep-alive のコストとキャッシュ削減効果を比較して導入を判断すること。
実践例:RAG システムでの活用
Retrieval-Augmented Generation(RAG)では、大量のドキュメントを毎回送信するため、Prompt Caching の効果が特に大きい。
async function ragQuery(question: string, documents: string[]) {
const contextPrompt = `以下のドキュメントを参照して質問に答えてください。
${documents.map((doc, i) => `## ドキュメント ${i + 1}\n${doc}`).join("\n\n")}`;
const message = await client.messages.create({
model: "claude-opus-4-20250514",
max_tokens: 2048,
system: [
{
type: "text",
text: contextPrompt,
cache_control: { type: "ephemeral" }, // ドキュメント全体をキャッシュ
},
],
messages: [{ role: "user", content: question }],
});
return message.content[0].text;
}
// 初回: キャッシュ作成
await ragQuery("製品Aの仕様は?", documents);
// 2回目以降: キャッシュヒット(コスト90%削減)
await ragQuery("製品Bの価格は?", documents);
await ragQuery("配送オプションは?", documents);
RAG での削減効果(実測)
- ドキュメント: 20,000トークン
- 質問: 50トークン × 100回
従来(キャッシュなし):
- (20,000 + 50) × 100 = 2,005,000トークン
- コスト: 2,005,000 × $15 / 1,000,000 = $30.08
Prompt Caching 使用:
- 初回: 20,000 × $18.75 / 1,000,000 + 50 × $15 / 1,000,000 = $0.375
- 2-100回: (20,000 × $1.50 + 50 × $15) × 99 / 1,000,000 = $3.04
- 合計: $3.42(約89%削減)
Prompt Caching のベストプラクティス
1. 最小キャッシュサイズの確認
キャッシュは最低1024トークン以上のブロックでないと効果が薄い。短いプロンプトでは使わない。
// ❌ 効果が薄い(300トークン)
system: [
{ type: "text", text: "あなたはアシスタントです。", cache_control: { type: "ephemeral" } }
]
// ✅ 効果が高い(5000トークン)
system: [
{ type: "text", text: longDocumentation, cache_control: { type: "ephemeral" } }
]
2. ブロックの順序を固定
キャッシュはブロック単位で完全一致が必要。順序や空白が変わるとキャッシュミスになる。
// ❌ 毎回ランダムな順序(キャッシュミス)
const docs = shuffle(documents);
// ✅ 常に同じ順序(キャッシュヒット)
const docs = documents.sort();
3. キャッシュヒット率のモニタリング
本番運用では、キャッシュヒット率を監視し、最適化の効果を測定する。
interface CacheMetrics {
totalRequests: number;
cacheHits: number;
cacheMisses: number;
totalCost: number;
}
function trackCacheUsage(usage: Usage, metrics: CacheMetrics) {
metrics.totalRequests++;
if (usage.cache_read_input_tokens > 0) {
metrics.cacheHits++;
} else if (usage.cache_creation_input_tokens > 0) {
metrics.cacheMisses++;
}
// コスト計算
const cost =
usage.input_tokens * 15 / 1_000_000 +
(usage.cache_creation_input_tokens || 0) * 18.75 / 1_000_000 +
(usage.cache_read_input_tokens || 0) * 1.5 / 1_000_000 +
usage.output_tokens * 75 / 1_000_000;
metrics.totalCost += cost;
console.log(`Cache hit rate: ${(metrics.cacheHits / metrics.totalRequests * 100).toFixed(1)}%`);
}
Prompt Caching 実装のアーキテクチャ
以下は、Prompt Caching を活用したチャットボットシステムの全体像です。
flowchart TD
A[ユーザーリクエスト] --> B{キャッシュ<br/>有効期限<br/>確認}
B -->|5分以内| C[Cache Read<br/>0.1x コスト]
B -->|期限切れ| D[Cache Creation<br/>1.25x コスト]
C --> E[Claude API]
D --> E
E --> F[レスポンス]
F --> G[Usage メトリクス記録]
G --> H[キャッシュヒット率<br/>モニタリング]
style C fill:#d4edda
style D fill:#fff3cd
Prompt Caching を活用したチャットボットのリクエストフロー。5分以内の再リクエストでキャッシュヒットを狙う
まとめ
- Prompt Caching は、Claude Opus 4.6 / Sonnet 4.5 / Haiku 4.0 で利用可能
- キャッシュ読み取りコストは通常入力の1/10(90%削減)
- 5分間の有効期限を意識した設計が重要
- RAG・チャットボット・長大なシステムプロンプトで特に効果が高い
- 最低1024トークン以上のブロックでキャッシュすること
- ブロックの順序・内容を固定してキャッシュヒット率を最大化
- Usage メトリクスを監視して最適化効果を測定
Prompt Caching を正しく実装すれば、月数万円規模のコスト削減も十分可能です。特に、繰り返し同じコンテキストを送信する RAG システムやチャットボットでは、導入による効果が即座に現れます。