Claude APIAnthropic の機能

FEATURE

Cache diagnostics (キャッシュ診断)

Cache diagnostics (キャッシュ診断) は、Claude API の Messages リクエストに前のレスポンスの id を渡すと、API が 2 つのリクエストを比較し、モデル・system プロンプト・tools・メッセージ履歴のどこで分岐したかを返す機能です。

提供中公式発表と照合済み
初出2026年5月13日
ページ更新
提供状態提供中
公式の記載で確認できた環境API
提供を確認できたプラン公式に記載なし
目次 CONTENTS
  1. できること
  2. 機能解説
  3. 使い方
  4. 利用シーン
  5. ChatGPT・OpenAI の対応する機能
  6. これまでの変更
  7. 関連する機能
  8. 出典
CAN DO

できること

POINT 01

分岐箇所の特定

前のレスポンスの id を previous_message_id として渡すと、プロンプトキャッシュのプレフィックスが前のターンとどこで分岐したかを API が返します。分岐先はモデル・system プロンプト・tools・メッセージ履歴のいずれかとして示されます。

POINT 02

原因の種類と影響の目安

model_changed・system_changed・tools_changed・messages_changed などの種類で原因を示します。*_changed の 4 種類には、分岐点より後ろの入力トークン数の推定値 cache_missed_input_tokens が付きます。

POINT 03

usage との併用

diagnostics は「リクエストが変わったか」を、usage.cache_read_input_tokens は「キャッシュがヒットしたか」を示します。両方を合わせて見ると、どこを調べるべきかが分かります。

GUIDE

機能解説

概要

Messages リクエストに diagnostics オブジェクトを含めると利用できます。プロンプトキャッシュが前のターンと一致しなかった原因を調べる場面に関わる機能です。

仕組み

diagnostics オブジェクトを含むリクエストごとに、API はレスポンスの id をキーにした軽量なフィンガープリントを保存します。オブジェクトを含まないリクエストについては何も保存しません。

次のリクエストが届くと、API はそのリクエストのフィンガープリントを作り直して保存済みのものと比較し、最初に分岐した箇所を説明する diagnostics オブジェクトをレスポンスに付けます。比較の対象はリクエストの構造で、実際にキャッシュがヒットしたかどうかとは独立しています。

  • POST /v1/messages のレスポンスには常に diagnostics フィールドが含まれ、リクエストに diagnostics オブジェクトが無い場合は null になります。
  • ストリーミングのレスポンスでは、diagnostics は message_start イベントに含まれます。
  • 診断がリクエストをブロックしたり失敗させたりすることはありません。

レスポンスの読み方

diagnostics の値と cache_miss_reason の種類は次のとおりです。

  • diagnostics が null:リクエストに diagnostics オブジェクトが無い、previous_message_id が null だった (最初のターン)、または比較を行い分岐が見つからなかった、のいずれかです。
  • {"cache_miss_reason": null}:レスポンスの組み立て時点で比較がまだ終わっていなかった状態です。結論が出ていないものとして扱い、次のターンで確認します。
  • model_changed:前のリクエストとモデルが異なります。ルーター、A/B テスト、フォールバックが別のモデルを選んだ場合などが該当します。キャッシュはモデルごとです。
  • system_changed:system パラメーターが異なります。タイムスタンプやリクエスト ID など、リクエストごとに変わる値が system プロンプトに埋め込まれている場合が典型です。
  • tools_changed:tools 配列が異なります。ターン間でツールが追加・削除・並べ替えされた場合や、ツールの input_schema の JSON が決定的でない形で直列化された場合です。
  • messages_changed:モデル・system・tools は一致していますが、messages の前のほうのエントリが末尾への追加ではなく、変更・並べ替え・削除されています。
  • previous_message_not_found:指定した previous_message_id に対応するフィンガープリントが保存されていません。リクエストが変わったことを示すものではありません。
  • unavailable:このリクエストでは診断情報を得られませんでした。リクエスト自体は通常どおり処理されます。

レスポンスが示すのは最も早い分岐だけです。後ろの分岐がその陰に隠れている場合があるため、最初の分岐から先に直します。cache_missed_input_tokens はトークン化前のバイト長から求めた推定値で、失われたキャッシュ可能なプレフィックスの規模の目安です。課金の数値としては扱いません。

制限事項

  • 比較するには、前のリクエストが同じ organization と workspace で実行されている必要があります。
  • previous_message_id の参照に使うフィンガープリントは短い期間で期限が切れます。診断の比較は、間隔の近いリクエストの間で行います。
  • 非常に長い会話で、変更がメッセージ一覧の深い位置にしか無い場合、正確な位置ではなく unavailable が返る場合があります。
  • ベータヘッダーだけを送り diagnostics オブジェクトを含めないリクエストは受け付けられますが、フィンガープリントは保存されません。後のターンでそのリクエストを previous_message_id に指定すると previous_message_not_found が返ります。

管理者・導入時に確認したい点

この機能のデータの扱いは次のとおりです。

  • フィンガープリントに含まれるのはハッシュとトークン数の推定値だけで、プロンプトの生の内容は含まれません。
  • フィンガープリントの保持は限られた期間で、organization と workspace の範囲に限定され、ほかの目的には使われません。
  • Anthropic は、この機能のためにプロンプトや Claude の出力の生のテキストを保存しません。
  • フィンガープリントが保存されるのは、diagnostics オブジェクトを含むリクエストだけです。
HOW TO USE

使い方

cache-diagnosis-2026-04-07 ベータヘッダーは現在不要で、diagnostics オブジェクトを含めることが利用の申し込み (オプトイン) になります。

  1. Messages リクエストのすべてのターンに diagnostics オブジェクトを含めます。API がフィンガープリントを保存するのは、このオブジェクトを含むリクエストだけです。
  2. 最初のターンでは "previous_message_id": null を渡します。比較対象の前のメッセージが無い状態でオプトインします。
  3. 2 ターン目以降は、直前のレスポンスの id を previous_message_id として渡します。複数ターンの会話では、最新のレスポンスの id を毎ターン引き継ぎます。
公式ヘルプを開く ↗
USE CASES

利用シーン

CASE 01

usage.cache_read_input_tokens が想定より少ないときに、system プロンプトへリクエストごとに変わる値が埋め込まれていないかを確かめる場面に向いています。

CASE 02

ルーターや A/B テスト、フォールバックの仕組みによって、ターンの途中で別のモデルが選ばれていないかを確認する場面に使えます。

CASE 03

ツール定義を組み立てるコードで、tools 配列の順序や input_schema の直列化がターンごとに変わっていないかを調べる場面に使えます。

CASE 04

会話履歴を加工するアプリケーションで、過去のメッセージを書き換え・並べ替え・削除していないかを確認する場面に向いています。

COMPARISON

ChatGPT・OpenAI の対応する機能

比較の単位となる業務: プロンプトキャッシュのミス原因の診断

OpenAI API プラットフォームの Prompt Caching ダッシュボードでは、キャッシュヒット率の推移、書き込みあたりの読み取り数、キャッシュ読み取り・書き込み・非キャッシュのトークン内訳を確認できます。

Cache diagnostics は、個々の Messages リクエストを前のリクエストと比較し、モデル・system プロンプト・tools・メッセージ履歴のどこで最初に分岐したかを API のレスポンスで返します。前者は利用状況を集計して見る仕組み、後者はリクエスト単位で分岐箇所を示す仕組みです。

TIMELINE

これまでの変更

  1. Claude API でベータを終了し、ベータヘッダーが不要になりました。ヘッダーを送り続けるリクエストも従来どおり動作します。

  2. ベータヘッダーを送ったリクエストへのレスポンスに、常に diagnostics フィールドが含まれるようになりました。

  3. フィンガープリントの保存が、diagnostics オブジェクトを含むリクエストに限られました。すべてのターンで diagnostics を含め、最初のターンでは "previous_message_id": null を指定します。

  4. キャッシュ診断がベータとして提供開始されました。利用には cache-diagnosis-2026-04-07 ベータヘッダーが必要でした。

対象プランについては、公式のリリースノートには記載がありません。

SOURCES

出典

出典 6 件を表示