CLAUDE LABEN
MODEL — Claude Fable 5が6/9に一般提供開始。100万トークン文脈・常時アダプティブ思考・128K出力を備えますPLATFORM — Developer Platformにcode execution・MCP connector・Files API・最大1時間のプロンプトキャッシュが追加されましたMCP — 管理者がOkta経由で組織全体にMCPコネクタをプロビジョニング可能に。初回ログインでゼロタッチ接続できますSANDBOX — Claude Managed Agentsが自前サンドボックス+プライベートMCPサーバー接続に対応しましたCODING — Opus 4.8はSWE-bench 72.5%・Terminal-bench 43.2%。長時間の連続作業に強みがありますLINEUP — 主力はOpus 4.8・Sonnet 4.6・Haiku 4.5。用途に応じて使い分けられますMODEL — Claude Fable 5が6/9に一般提供開始。100万トークン文脈・常時アダプティブ思考・128K出力を備えますPLATFORM — Developer Platformにcode execution・MCP connector・Files API・最大1時間のプロンプトキャッシュが追加されましたMCP — 管理者がOkta経由で組織全体にMCPコネクタをプロビジョニング可能に。初回ログインでゼロタッチ接続できますSANDBOX — Claude Managed Agentsが自前サンドボックス+プライベートMCPサーバー接続に対応しましたCODING — Opus 4.8はSWE-bench 72.5%・Terminal-bench 43.2%。長時間の連続作業に強みがありますLINEUP — 主力はOpus 4.8・Sonnet 4.6・Haiku 4.5。用途に応じて使い分けられます
記事一覧/API & SDK
API & SDK/2026-06-23上級

Claude API のプロンプトキャッシュが本番で静かにヒットしなくなるとき — TTLと節約額の実測メモ

プロンプトキャッシュは設定した直後だけ効いて、本番では知らぬ間にヒットしなくなります。プレフィックスを壊す要因、5分と1時間TTLの選び方、節約額を推測でなく実測する計装を運用目線でまとめました。

prompt-caching8cost-optimization19api37production81observability11

プレミアム記事

プロンプトキャッシュを入れた初日のダッシュボードは、たいてい気持ちのいい数字になります。cache_read_input_tokens がきれいに伸び、入力コストがすっと下がる。問題はその次の週です。トラフィックの形が少し変わった、システムプロンプトに動的な値を一行混ぜた、デプロイでツール定義の順序が入れ替わった——どれも単独では些細なのに、キャッシュヒット率は静かに落ちていきます。しかも cache_read_input_tokens を毎回見ている人は少ないので、コストが元に戻っていることに月末の請求で気づく、ということが起こります。

私は Dolice Labs として4つの技術ブログを個人開発で回していて、その自動運用でこの機能をかなり酷使してきました。「効いていると思い込んでいたが、実は半分しかヒットしていなかった」という経験を何度かしています。本稿は機能の紹介ではなく、本番でヒット率を保つために何を監視し、どこで TTL を切り替え、節約額をどう実測するか、という運用の話です。

キャッシュが効く条件は「完全一致のプレフィックス」だけ

最初に押さえておきたいのは、プロンプトキャッシュが照合しているのは「意味の近さ」ではなく「バイト列としての完全一致するプレフィックス」だという点です。systemtoolsmessages を先頭から順に見ていき、キャッシュブレークポイントまでが一字一句同じなら、その区間がキャッシュ読み取り料金(通常入力の約10%)で処理されます。逆に言えば、先頭から数えて一文字でも違えば、そのブレークポイント以降はすべてキャッシュミスになります。

この「先頭一致」という性質が、本番でヒット率が落ちる原因のほとんどを説明します。プレフィックスのどこかに、リクエストごとに変わる値が紛れ込んでいるのです。

# ❌ ヒット率が出ない典型例:システムプロンプトに動的な値が混入
system = [
    {
        "type": "text",
        # 現在時刻を毎回埋め込むと、プレフィックスが毎回変わりキャッシュは絶対にヒットしない
        "text": f"あなたはサポートAIです。現在時刻は {datetime.now()} です。\n\n## ナレッジベース\n...",
        "cache_control": {"type": "ephemeral"},
    }
]
 
# ✅ 動的な値は messages 側(ブレークポイントより後ろ)へ追い出す
system = [
    {
        "type": "text",
        "text": "あなたはサポートAIです。\n\n## ナレッジベース\n...",  # 安定部分だけ
        "cache_control": {"type": "ephemeral"},
    }
]
messages = [
    {"role": "user", "content": f"(現在時刻: {datetime.now()})直近の障害状況を教えてください"},
]

タイムスタンプは分かりやすい例ですが、実際にはもっと気づきにくい形で混入します。ユーザー名やセッションIDをシステムプロンプトに差し込んでいる、A/Bテストでプロンプトを出し分けていて分岐がプレフィックスの先頭にある、ナレッジベースを動的に組み立てていて配列の順序が安定していない——こうしたものはコードを読んだだけでは「変わっている」と気づきにくく、ログを取って初めて見えてきます。

プレフィックスを静かに壊す5つの要因

これまで自分がはまった、あるいは原因調査で見つけた「プレフィックスを壊す要因」を整理しておきます。

要因何が起きるか気づきにくさ
動的な値の混入(時刻・ID・乱数)毎回ミス。キャッシュが一切効かない
ツール定義の順序ゆらぎ辞書をループで組むと順序が変わりミス
ナレッジベースの非決定的な連結set やdictの反復順序で末尾が変わる
TTL切れ(無アクセス放置)5分超の間隔で毎回書き込みからやり直し
モデル文字列やbetaヘッダーの差し替えキャッシュ名前空間が変わり再書き込み

順序ゆらぎは特に厄介です。Python の辞書は挿入順を保つので問題は出にくいのですが、set から list を作る、複数のソースを dict でマージしてから JSON 化する、といった処理を挟むと、実行ごとに微妙に並びが変わることがあります。プレフィックスは「内容が同じ」では足りず「並びまで同じ」でなければならないので、キャッシュ対象を組み立てる箇所では明示的にソートしておくのが安全です。これは見落としやすい落とし穴で、明示的な並び替えを一行入れておくだけで回避できます。

# ツール定義・ナレッジ片など、キャッシュ対象を組み立てる箇所は順序を固定する
def build_cacheable_tools(tool_specs: dict[str, dict]) -> list[dict]:
    # キー順でソートして、実行のたびに同じ並びになることを保証する
    return [tool_specs[name] for name in sorted(tool_specs)]

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
プレフィックスを静かに壊す5つの要因と、ログから崩れを検知する具体的な指標
5分TTLと1時間TTLをトラフィック間隔で選ぶ判断基準とコスト試算
「90%削減したはず」を推測でなく usage から実測する計装コード
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-03-26
Claude API コスト最適化プロダクションガイド — Batch API・Prompt Caching・Adaptive Thinking を組み合わせて最大90%削減する実装パターン
Claude APIの利用コストを最大90%削減する実践的な実装パターンを解説。Batch API、Prompt Caching、Adaptive Thinkingの組み合わせ戦略から、本番環境での監視・予算管理まで網羅した上級者向けガイド。
API & SDK2026-05-29
Claude API のプロンプトキャッシュを 5m と 1h で二段に分ける — TTL を分けるとコストは下がり運用は安定する
Anthropic API の cache_control には 5 分と 1 時間という 2 種類の TTL があります。これを「静的な前提情報は 1h、可変な few-shot は 5m」と二段に分けて運用する設計を、私の本番ワークロードで観測した数値とともに整理しました。
API & SDK2026-04-29
Claude API のセマンティックキャッシュを本番投入する — 類似プロンプト判定としきい値設計、汚染防止
Claude API のレスポンスをセマンティックキャッシュで再利用する本番設計を、しきい値の決め方・汚染防止・マルチテナント分離・観測性まで一気通貫で解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →