C
Claude Academy
Prompt Caching

Prompt Caching でコスト削減

約 12 分 · クイズ 4 問 · 演習 1 問
重要キーワード (4 語)
Prompt Caching (プロンプトキャッシング) — 繰り返す入力部分の料金を割引する仕組み
cache_control (キャッシュ制御) — ブロックにキャッシュ対象であることを指示するフィールド
TTL (有効期限) — キャッシュが保持される時間 (デフォルト 5 分)
cache hit rate (ヒット率) — キャッシュ読み出し / 全入力 の比率

Prompt Caching (プロンプトキャッシング)

長くて同じ内容を繰り返し送る場合、入力トークンを大幅に割引 できる仕組みです。 チャットボットの system prompt や RAG の参考資料、Tool 一覧などに最適。

キャッシュ可能な場所

  • system
  • messages (一部)
  • tools

使い方

res = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {"type": "text", "text": "あなたは社内ヘルプデスクです。"},
        {
            "type": "text",
            "text": "<長い社内ドキュメント (10,000 トークン)>",
            "cache_control": {"type": "ephemeral"},
        },
    ],
    messages=[{"role": "user", "content": "経費精算のやり方は?"}],
)

料金

  • キャッシュ書き込み: 通常入力の 1.25 倍
  • キャッシュ読み出し: 通常入力の 0.1 倍 (約 90% 割引)。
  • 保存自体は無料。

TTL (有効期限)

デフォルトで 5 分。最後にアクセスされた時点で延長されます。 24 時間 TTL も指定可能 (料金は若干高い)。

"cache_control": {"type": "ephemeral", "ttl": "24h"}

設計のコツ

  • 長く・固定 な部分にだけ付ける。
  • ブレークポイントは 最大 4 つ まで設定可能。最も粒度の大きい単位で 1 つ、細かく分けるなら複数。
  • 可変な部分にキャッシュを付けない (ヒット率がゼロになる)。
  • 最低トークン数 (~1024) を満たさないとキャッシュ対象外。

usage で確認

print(res.usage.cache_creation_input_tokens)   # 書き込み
print(res.usage.cache_read_input_tokens)        # 読み出し (キャッシュヒット)
print(res.usage.input_tokens)                   # それ以外の入力

Hit rate を測る

def hit_rate(usage) -> float:
    total = usage.cache_read_input_tokens + usage.cache_creation_input_tokens + usage.input_tokens
    return usage.cache_read_input_tokens / total if total else 0

60-80% 以上 を目標にしましょう。

4 ブレークポイント戦略

[system 共通プロンプト]              <- ブレークポイント 1 (永続)
[ガイドライン本文 (大きい)]            <- ブレークポイント 2
[直近 10 ターン履歴]                  <- ブレークポイント 3 (やや更新頻度高い)
[最新ターンの user]                  <- キャッシュなし

コスト削減シミュレーション

長い system (10K トークン) を 100 回呼ぶ場合: - キャッシュなし: 10K × 100 = 1M トークン入力課金 - キャッシュあり: 10K (1.25x 書き込み) + 10K × 0.1 × 99 (読み出し) ≒ 0.11M トークン課金 - → 約 89% コスト削減

試す: usage を Playground で観察

Playground でも cache_read_input_tokens の表示が可能です。同じ system を 2 回送ってみてください。

Hands-on 演習

演習 1: RAG の context にキャッシュを効かせる

FAQ 50 件 (約 10K トークン) を system に置き、ユーザー質問だけを user に渡す簡易 RAG を構築してください。 ユーザー質問を 5 回連続で送り、cache_creation_input_tokens / cache_read_input_tokens の推移を出力してください。 目標: 2 回目以降は cache_read が支配的になること。

▶ Playground を開いて実行
💡 ヒント

system は配列で渡し、最後のブロックに cache_control: {type: ephemeral} を付けます。usage は属性アクセス (例: res.usage.cache_read_input_tokens)。

進捗保存にはログインが必要 クイズに挑戦 (4問)

💬 このレッスンへの質問 (0)

全質問を見る →
質問の投稿には ログイン が必要です。閲覧は誰でも可能です。

まだ質問はありません。最初の 1 件を投稿してみましょう。