Claude Platform Docs
Messagesツールインフラストラクチャ

プロンプトキャッシングを使用したツール使用

ターンをまたいでツール定義をキャッシュし、何がキャッシュを無効化するかを理解します。

このページでは、ツール定義に対する「prompt caching」(プロンプトキャッシング)について説明します。cache_control ブレークポイントをどこに配置するか、defer_loading がどのようにキャッシュを保持するか、そして何がキャッシュを無効化するかを扱います。一般的なプロンプトキャッシングについては、プロンプトキャッシングを参照してください。

ツール定義における cache_control

tools 配列の最後のツールに cache_control: {"type": "ephemeral"} を配置します。これにより、最初のツールからマークされたブレークポイントまでの、ツール定義プレフィックス全体がキャッシュされます。

{
  "tools": [
    {
      "name": "get_weather",
      "description": "Get the current weather in a given location",
      "input_schema": {
        "type": "object",
        "properties": {
          "location": { "type": "string" }
        },
        "required": ["location"]
      }
    },
    {
      "name": "get_time",
      "description": "Get the current time in a given time zone",
      "input_schema": {
        "type": "object",
        "properties": {
          "timezone": { "type": "string" }
        },
        "required": ["timezone"]
      },
      "cache_control": { "type": "ephemeral" }
    }
  ]
}

mcp_toolset の場合、cache_control ブレークポイントはセット内の最後のツールに配置されます。MCPツールセット内のツールの順序は制御できないため、ブレークポイントは mcp_toolset エントリ自体に配置してください。APIがそれを展開後の最後のツールに適用します。

コンピュータ使用およびブラウザ使用のツールセットエントリも同じルールに従います。cache_control はツールセットエントリ自体に配置し、ブレークポイントはツールセットの定義の後に配置されます。ツールセットのメンバーは1つの定義として読み込まれるため、メンバーの configs エントリ内では受け付けられません。バッチアクション内では、そのターンのメンバーの tool_use または tool_result ブロックのいずれかに付けられた cache_control マーカーは受け付けられ、そのバッチの終わりで有効になります。そのため、1つのバッチ内の複数のマーカーは単一のブレークポイントとして機能します。各マーカーは依然としてリクエストの4つのブレークポイントという上限にカウントされるため、ターンごとに1つ使用してください。

defer_loading とキャッシュの保持

遅延読み込みされるツールは、システムプロンプトのプレフィックスに含まれません。モデルがツール検索を通じて遅延ツールを発見すると、その定義は会話履歴内に tool_reference ブロックとしてインラインで追加されます。プレフィックスは変更されないため、プロンプトキャッシングは保持されます。

つまり、ツール検索を通じてツールを動的に追加しても、キャッシュは壊れません。常に読み込まれる少数のツールセット(キャッシュ済み)で会話を開始し、必要に応じてモデルに追加のツールを発見させ、すべてのターンで同じキャッシュヒットを維持できます。

defer_loading は、strictモードのための文法構築とも独立して動作します。文法はどのツールが遅延されているかに関係なく完全なツールセットから構築されるため、ツールが動的に読み込まれる場合でも、プロンプトキャッシングと文法キャッシングの両方が保持されます。

何がキャッシュを無効化するか

キャッシュはプレフィックスの階層(toolssystemmessages)に従うため、あるレベルでの変更はそのレベルとそれ以降のすべてを無効化します。

変更無効化されるもの
ツール定義の変更キャッシュ全体(tools、system、messages)
ウェブ検索または引用の切り替えsystem および messages のキャッシュ
tool_choice の変更messages のキャッシュ
disable_parallel_tool_use の変更messages のキャッシュ
画像の有無の切り替えmessages のキャッシュ
思考パラメータの変更messages のキャッシュは常に無効化。思考設定をそれらより前にレンダリングするモデルでは、ツールおよび system のキャッシュも無効化(詳細
output_config.effort の変更思考パラメータと同じ。モデルのデフォルトを明示的に設定することは、省略することと同等

サーバーツールの結果は自動的にキャッシュされる

リクエストでプロンプトキャッシングが有効になっており、Claudeがウェブ検索、ウェブフェッチ、コード実行などのサーバーツールを使用する場合、APIはエージェントループの次のイテレーションを実行する前に、サーバーツールの結果に自動的にキャッシュブレークポイントを配置します。これにより、同じリクエスト内の後続のイテレーションは、増大していくプレフィックスを再処理する代わりにキャッシュから読み取ることができます。

この自動ブレークポイントは、独自の cache_control マーカーに設定したTTLとは無関係に、常にデフォルトの5分間のTTLを使用します。レスポンスの usage では、これらの書き込みは cache_creation.ephemeral_5m_input_tokens の下に表示されるため、設定したすべての cache_control が1時間のTTLを使用している場合でも、5分間のキャッシュ書き込みが表示されることがあります。

この動作は、リクエストにすでに少なくとも1つの cache_control マーカーがある場合にのみ適用されます。プロンプトキャッシングのないリクエストには、自動ブレークポイントは付与されません。

ツールごとの相互作用表

ツールキャッシングに関する考慮事項
ウェブ検索有効化または無効化すると、system および messages のキャッシュが無効化される
ウェブフェッチ有効化または無効化すると、system および messages のキャッシュが無効化される
コード実行コンテナの状態はプロンプトキャッシュとは独立している
ツール検索発見されたツールは tool_reference ブロックとして読み込まれ、プレフィックスキャッシュが保持される
コンピュータ使用スクリーンショットの有無が messages のキャッシュに影響する。cache_control はツールセットエントリに配置する(ツール定義における cache_control を参照)
ブラウザ使用スクリーンショットの有無が messages のキャッシュに影響する。cache_control はツールセットエントリに配置する(ツール定義における cache_control を参照)
テキストエディタ標準のクライアントツール。特別なキャッシングの相互作用はない
Bash標準のクライアントツール。特別なキャッシングの相互作用はない
メモリ標準のクライアントツール。特別なキャッシングの相互作用はない

次のステップ

TTLや料金を含む、プロンプトキャッシングのモデル全体を学びます。

キャッシュを壊すことなく、オンデマンドでツールを読み込みます。

利用可能なすべてのツールとそのパラメータを参照します。

Was this page helpful?