Claude Prompt Cachingの設定方法

Claude

Prompt Cachingの設定方法

Prompt cachingは、同じプレフィックス(システムプロンプト・ドキュメント等)を繰り返し送信するコストと遅延を大幅に削減できる機能です。


2つの設定方法

① 自動キャッシュ(Automatic Caching)

リクエストのトップレベルに cache_control フィールドを1つ追加するだけで、最後のキャッシュ可能なブロックに自動的にブレークポイントが適用されます。会話が長くなるにつれて自動的に前に移動します。マルチターン会話に最適です。 Claude API Docs

python

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    cache_control={"type": "ephemeral"},  # ← これだけ追加
    system="長いシステムプロンプト...",
    messages=[{"role": "user", "content": "質問"}],
)
② 明示的なブレークポイント(Explicit Cache Breakpoints)

個々のコンテンツブロックに cache_control を配置して、キャッシュする箇所を細かく制御できます。 Claude API Docs

python

# Python
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "長いシステムプロンプト(静的な部分)...",
            "cache_control": {"type": "ephemeral"}  # ここまでをキャッシュ
        }
    ],
    messages=[{"role": "user", "content": "動的な質問"}],
)

typescript

// TypeScript
const response = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 1024,
    system: [
        {
            type: "text",
            text: "長いシステムプロンプト...",
            cache_control: { type: "ephemeral" },
        },
    ],
    messages: [{ role: "user", content: diff }],
});

TTL(キャッシュ保持時間)

TTL設定コスト
5分(デフォルト){"type": "ephemeral"}書き込み:通常の1.25倍、読み込み:通常の0.1倍
1時間(拡張){"type": "ephemeral", "ttl": "1h"}書き込み:通常の2倍、読み込み:通常の0.1倍

5分TTLは2回目以降のリクエストから元が取れます。1時間TTLは3回目以降から元が取れます。リクエスト間隔が10分以内なら5分TTLで十分です。 DEV Community


キャッシュ確認方法

レスポンスの usage フィールドで確認できます:

python

print(response.usage.cache_creation_input_tokens)  # 新規キャッシュ作成
print(response.usage.cache_read_input_tokens)       # キャッシュから読み込み
print(response.usage.input_tokens)                  # 通常処理

両方が0の場合、キャッシュされていません(最小トークン数に達していない可能性があります)。 Claude API Docs


最小キャッシュサイズ

Claude Opus 4.8・Claude Sonnet 4.6・Claude Sonnet 4.5などは 1,024トークン以上 必要です。これ未満のプロンプトはキャッシュされず、エラーも返りません。 Claude API Docs


キャッシュが無効になるケース

  • システムプロンプトの内容を変更した
  • ツール定義を変更した
  • プロンプト内の画像の有無が変わった
  • tool_choice を変更した

1. キャッシュの仕組み(イメージ)

Claudeのプロンプトキャッシュは、「毎回変わらない長文(取扱説明書や共通ルールなど)」をあらかじめClaudeに記憶させておく仕組みです。

  • 1回目(初回): データを読み込ませるため、通常通りの料金と時間がかかります。
  • 2回目以降: 記憶したデータ(キャッシュ)を使い回すため、料金が最大90%安くなり、返答スピードも圧倒的に早くなります。

2. 最も重要なルール:「配置の順番」

キャッシュを成功させる最大のコツは、「固定の長文を上に、毎回変わる質問を下に書く」ことです。Claudeは上から順番に文字をチェックするため、途中で1文字でも変わると、それ以降のキャッシュがすべて無効になってしまいます。

  • ⭕️ 成功パターン: [共通マニュアル(キャッシュ化)][今日の質問]
  • 失敗パターン: [今日の質問][共通マニュアル] (上に質問が来ると、下のマニュアルが毎回未読扱いになります)

3. 設定コードの書き方(超シンプル版)

設定は、キャッシュしたいブロックの最後に "cache_control": {"type": "ephemeral"} を1行足すだけです。

JSON

{
  "model": "claude-3-7-sonnet-20250219",
  "system": [
    {
      "type": "text",
      "text": "ここに数万文字の固定データ(マニュアルや自社ルールなど)を入れます。",
      "cache_control": {"type": "ephemeral"} // 👈 これを付けるだけ!
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": "今日の売上データを分析して?" // 毎回変わる質問
    }
  ]
}

4. これだけは注意! 2つの条件

  1. 文字数の制限: 長文専用の機能です。SonnetOpus を使う場合、キャッシュする部分が約700〜800文字以上(1,024トークン以上)ないと、設定してもキャッシュされません。
  2. 有効期限(TTL): 記憶の寿命は 5〜10分間 です。最後の質問から10分以上あくと忘れてしまうため、定期的に何度も質問を投げるようなシステム(チャットボットや、連続したデータ処理など)で最大の効果を発揮します。

小学生でもわかるように説明するね😊


🍱 Prompt Cachingって何?

お弁当を毎日作るのに例えると…

毎日「ごはん」「卵焼き」「ウインナー」は同じ。でも「今日のおかず」だけ変わる。

→ 毎日同じものを一から作るのは大変!だから、同じ部分だけ先に作り置き(キャッシュ)しておくのが Prompt Caching です。


⚙️ 設定の手順

ステップ1:いつもの命令文(システムプロンプト)を用意する

python

システムプロンプト = "あなたは親切なアシスタントです。(長い説明...)"

ステップ2:cache_control という「作り置きシール」を貼る

python

system=[
    {
        "type": "text",
        "text": システムプロンプト,
        "cache_control": {"type": "ephemeral"}  # ← これが「作り置きシール」!
    }
]

ステップ3:ふつうにAPIを呼び出す(それだけ!)

python

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "あなたは親切なアシスタントです。(長い説明...)",
            "cache_control": {"type": "ephemeral"}  # ← ここだけ追加!
        }
    ],
    messages=[
        {"role": "user", "content": "今日の質問はこれです!"}
    ]
)

🔍 ちゃんと動いてるか確認する

python

print(response.usage.cache_creation_input_tokens)  # 初回:ここに数字が出る
print(response.usage.cache_read_input_tokens)       # 2回目以降:ここに数字が出る
  • 🥇 1回目:「作り置き」を保存中 → cache_creation に数字
  • 🚀 2回目以降:「作り置き」を使ってる → cache_read に数字(安い!)

📝 まとめ

やることむずかしさ
cache_control を書き足す★☆☆(1行追加するだけ!)
効果が出るまで待つ★☆☆(2回目から自動的に安くなる)
確認する★☆☆(数字を見るだけ)

つまり、やることは「シールを1枚貼る」だけです! 🎉

cache_control はどこで設定するのか Claude or Claude Code?

Claudeが返答しました: どちらでもなく、あなたが書くプログラム(コード)の中で設定します!

どちらでもなく、あなたが書くプログラム(コード)の中で設定します!


整理すると…

サービス役割cache_control の設定
Claude.aiブラウザで使うチャット画面❌ できない(設定する場所がない)
Claude Codeコーディング補助ツール❌ 直接設定するものではない
Claude API開発者向けの窓口ここに送るリクエストの中に書く

イメージ図

あなたのプログラム
  ↓
  └─ cache_control を書いたリクエストを送る
        ↓
      Claude API(Anthropicのサーバー)
        ↓
      Claudeが返答

つまり

cache_control は「Claude や Claude Code の画面で設定するもの」ではなく、PythonやTypeScriptなどで自分でコードを書いて、APIにリクエストを送るときに含めるものです。

API キーを取得して自分でコードを書く「開発者向けの機能」なので、Claude.ai のチャット画面を使っているだけでは関係ない設定です。

PythonでClaude APIにリクエストを書く方法

ステップ1:ライブラリをインストール

ターミナル(黒い画面)で実行:

bash

pip install anthropic
Amazon.co.jp: Gimamaフライングボール 「TV・SNS・ブログで 正規品」 ジャイロ 飛行ボールトイ UFOおもちゃ ブーメランスピナー LEDライト付き クリスマス 人気を集めているプレゼント (ブルー)… : おもちゃ
Amazon.co.jp: Gimamaフライングボール 「TV・SNS・ブログで 正規品」 ジャイロ 飛行ボールトイ UFOおもちゃ ブーメランスピナー LEDライト付き クリスマス 人気を集めているプレゼント (ブルー)… : おもちゃ

ステップ2:APIキーを取得

  1. https://console.anthropic.com にアクセス
  2. アカウント作成 → ログイン
  3. 「API Keys」→「Create Key」でキーをコピー

ステップ3:コードを書く

python

import anthropic

# クライアントを作る(APIキーを設定)
client = anthropic.Anthropic(api_key="sk-ant-ここにAPIキーを貼る")

# リクエストを送る
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "あなたは親切なアシスタントです。",
            "cache_control": {"type": "ephemeral"}  # ← キャッシュ設定!
        }
    ],
    messages=[
        {"role": "user", "content": "こんにちは!"}
    ]
)

# 返答を表示
print(response.content[0].text)

# キャッシュの状況を確認
print("キャッシュ作成:", response.usage.cache_creation_input_tokens)
print("キャッシュ読込:", response.usage.cache_read_input_tokens)

ステップ4:実行

bash

python ファイル名.py

⚠️ APIキーの注意点

APIキーは絶対にコードに直書きしないのがベストです。代わりに環境変数を使いましょう:

bash

# ターミナルで設定(Mac/Linux)
export ANTHROPIC_API_KEY="sk-ant-ここにキー"

python

import anthropic
import os

# 環境変数から自動で読み込んでくれる(api_key の指定不要)
client = anthropic.Anthropic()

Amazon.co.jp: Xiaomi Smart Band 10 シャオミ スマートウォッチ スマートバンド 1.72インチ大画面 21日間持続バッテリー 高輝度1500nits 24時間健康管理 心拍数 睡眠モニタリング 水泳 防水 LINE着信通知 iPhone&Android対応 ミスティックローズ : 家電&カメラ
Amazon.co.jp: Xiaomi Smart Band 10 シャオミ スマートウォッチ スマートバンド 1.72インチ大画面 21日間持続バッテリー 高輝度1500nits 24時間健康管理 心拍数 睡眠モニタリング 水泳 防水 …
Amazon | UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック) | UGREEN | USBケーブル 通販
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/…
Amazon | Amazfit Bip Max スマートウォッチ 3000nit高輝度 AMOLED GPS 5衛星 オフラインマップ AIによる音声操作 睡眠 運動管理 心拍 ストレス 健康管理 150+スポーツモード ナビゲーション ルートインポート 5ATM防水 20日間バッテリー持続 (シルバー) | Amazfit | スマートウォッチ
Amazfit Bip Max スマートウォッチ 3000nit高輝度 AMOLED GPS 5衛星 オフラインマップ AIによる音声操作 睡眠 運動管理 心拍 ストレス 健康管理 150+スポーツモード ナビゲーション ルートインポート …

コメント