このトピックでは、明示的キャッシュの使用方法とそのベストプラクティスについて説明します。リクエストにキャッシュマーカーを追加することで、明示的キャッシュは同一の入力コンテンツの場合に決定的なキャッシュヒットを保証し、コストとレイテンシーを大幅に削減します。
明示的なキャッシュを使用するタイミング
- キャッシュヒットを保証する必要がある場合:明示的なキャッシュは、バックエンドリソースのスケジューリングに左右されず、100%決定的なヒットを保証します。アプリケーションで安定したコンテンツの再利用が必要な場合は、明示的なキャッシュが適しています。
- 同じプロンプトを頻繁に再利用する場合:同一または一貫性が高いプロンプトを繰り返し送信する場合、明示的なキャッシュによりコストを大幅に削減できます。キャッシュの作成には、標準の入力料金に25%の追加料金がかかりますが、その後の各ヒットでは90%を節約できます。ヒットが1回あれば採算が取れます。
- 本番環境のエージェントで長いコンテキストを管理する場合:エージェントアプリケーションでは、圧縮、要約、システムリマインダーなどの一般的なメカニズムにより、コンテキストが継続的に変化します。明示的なキャッシュを使用すると、重要なコンテキストセグメントをピン留めして再利用できるため、周辺のコンテキストが変化してもキャッシュされた状態が維持されます。
エージェントとコーディングツール
以下のエージェントとコーディングツールは、Anthropic プロトコルを使用して Model Studio に接続し、明示的キャッシュをネイティブでサポートします。それぞれのドキュメントに従って設定すると、自動的に明示的キャッシュを利用してコンテキスト管理を最適化します。
以下の例では Singapore エンドポイントを使用しています。他のリージョンの場合は、ベース URL を対応するリージョンエンドポイントに置き換えてください。
- Claude Code
- Open Code
- OpenClaw
- Hermes
Claude Code v2.x 以降では、リクエストに Anthropic プロトコルエンドポイントを設定します。
cache_control マーカーが自動的に含まれます (system、env、最新のユーザーメッセージ) 。Model Studio の Anthropic 互換エンドポイントに接続した後、追加の設定は不要です。設定~/.claude/settings.json (Windows: C:\Users\<username>\.claude\settings.json) を作成または編集し、適切なプラン設定を行います。または、環境変数を介して接続することもできます。-
Token Plan (Team):
https://token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic -
Coding Plan:
https://coding-intl.dashscope.aliyuncs.com/apps/anthropic -
従量課金:
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropicWorkspaceIdを実際のワークスペース ID に置き換えてください。
API 統合
要点
- キャッシュしたいメッセージコンテンツに
"cache_control": {"type": "ephemeral"}を追加します。messages 配列の先頭からそのマーカーまでのすべてのコンテンツがブロックとしてキャッシュされます。 - キャッシュされるコンテンツは、少なくとも 1024 トークンである必要があります。
- 1 つのリクエストで最大 4 つのキャッシュマーカーをサポートします。
- キャッシュ TTL は 5 分で、ヒットするたびに自動的に更新されます。
- ツール定義は、キャッシュの目的上、システムプロンプトの一部です。ツールが変更されると、キャッシュにヒットしません。
クイックスタート
次の例は、基本的なワークフローを示しています。最初のリクエストでキャッシュが作成され、2 番目のリクエストでキャッシュにヒットします。
キャッシュステータスの確認
レスポンスの usage フィールドを確認して、キャッシュの動作を検証してください。
cache_creation_input_tokens: キャッシュを新規作成した際のトークン数。0 より大きい値は、新しいキャッシュブロックが作成されたことを意味します。usage.prompt_tokens_details.cached_tokens(OpenAI 互換) またはcache_read_input_tokens(Anthropic 互換) : キャッシュにヒットしたトークンの数。0 より大きい値は、キャッシュにヒットしたことを意味します。
シナリオ別のベストプラクティス
複数ターンの会話
特徴:
- ユーザーは複数ターンにわたってモデルと対話し、各リクエストには完全な会話履歴が含まれます。
- 典型的なユースケース:カスタマーサービス、ナレッジ Q&A、コードアシスタント
cache_control マーカーを追加します。各ターンでは、前のターンで作成されたキャッシュ (会話履歴) にヒットし、同時に次のターンのために現在のターンを含む新しいキャッシュを作成します。
例:
本番エージェント (複数キャッシュマーカー)
特徴:
- システムプロンプト、スキル/ツール定義、プロジェクトコンテキスト、ユーザーメッセージ/ツール呼び出しで構成される、長い複数ターンの会話。
- セクションごとに変更頻度が異なります。
- 典型的なユースケース:AI コーディングアシスタント (Claude Code、OpenClaw)、RAG ベースの Q&A システム
- システムプロンプト — 1 つのマーカー (ほとんど変更されない)
- スキル/ツール定義 — 1 つのマーカー (組み合わせで変更される可能性がある)
- プロジェクトコンテキスト — 1 つのマーカー (切り替えまたは圧縮される可能性がある)
- ユーザーメッセージ/ツール呼び出し — 1 つのマーカー (ターンごとに増加する)
- ユーザーが同じ製品について質問し続ける場合:ペルソナ、ツール、ナレッジベースはすべて変更されず、マーカー 2 のキャッシュ (最長プレフィックス一致) にヒットするため、最大限の節約効果が得られます。
- 会話のターン数が増える場合:以前のコンテンツ (ペルソナ + ツール + ナレッジベース + 履歴) は前のターンのキャッシュにヒットし、新しいコンテンツのみが新しいキャッシュを必要とします。
コンテンツを最も安定しているものから最も安定していないものへと配置します:キャッシュヒット率を最大化するために、最も変更が少ないコンテンツ (例:システムペルソナ) を先頭に、最も変更が多いコンテンツ (例:現在の会話) を末尾に配置してください。
バッチ処理 (タスク完了)
特徴:
- 単一ターンのリクエストで、コンテキストメモリは不要です。
- 固定の長いシステムプロンプト (タスク指示) + 可変のユーザー入力 (処理対象データ)。
- 典型的なユースケース:テキスト分類、意図認識、データ抽出、コンテンツモデレーション
cache_control マーカーはシステムプロンプトにのみ追加します。システムプロンプトが変更されない限り、後続のすべてのリクエストはキャッシュにヒットします。
例:
キャッシュされたツール定義での関数呼び出し
特徴:
- 長いツール定義リストを持つ関数呼び出しを使用します。
- ツール定義はリクエスト間で変更されません。
tools パラメータのコンテンツは、キャッシュのためにシステムプロンプトの一部となります。ツール定義がリクエスト間で完全に同一であること (同じ順序、同じフィールド順序、同じ構造) を確認し、メッセージコンテンツに cache_control マーカーを追加します。
重要な注意事項
- コンテンツフォーマットの要件:
cache_controlを追加する場合、content フィールドは配列形式である必要があります。文字列形式のコンテンツはキャッシュマーカーをサポートしていません。 - キャッシュマーカーの粒度: Qwen 3.5 以降のモデルは、メッセージレベルのキャッシュブレークポイントのみをサポートしています。単一のメッセージの content 配列内に複数の
cache_controlマーカーを配置しても、個別のブレークポイントは作成されません。システムは、そのメッセージ内の最後のマーカー位置でのみキャッシュを保存し、中間コンテンツブロックでトランケートマッチができません。また、複数のシステムメッセージは内部的に単一のセグメントにマージされるため、個別のブレークポイントとして機能できません。複数の独立したブレークポイントを作成するには、異なるロールのメッセージにcache_controlマーカーを分散させます (例:system に 1 つ、user に 1 つ)。 Qwen 3.5 より前のモデルは、コンテンツレベル (メッセージ内) のブレークポイントをサポートしています。 - 暗黙的キャッシュとの相互排他性: リクエストでは、1 つのキャッシングモードのみを使用できます。リクエストに
cache_controlマーカーが含まれている場合は明示的キャッシュが使用され、それ以外の場合は暗黙的キャッシュが自動的に使用されます。