メインコンテンツへスキップ
#AI活用 約10分で読めます

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.001x
Cache write tokens$18.751.25x
Cache read tokens$1.500.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. キャッシュ対象の選定

キャッシュすべきコンテンツの優先順位:

  1. システムプロンプト(ほぼ固定)
  2. 長大なコンテキスト(ドキュメント、コードベース)
  3. ツール定義(Function Calling の schema)
  4. 会話履歴の冒頭部分(チャットボット)

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 システムやチャットボットでは、導入による効果が即座に現れます。

参考リンク

#Claude #Prompt Caching #API #コスト削減 #LLM
シェア