このページでは、ツール定義のプロンプトキャッシングについて説明します。具体的には、cache_control ブレークポイントを配置する場所、defer_loading がキャッシュを保持する仕組み、およびキャッシュを無効化する要因について解説します。一般的なプロンプトキャッシングについては、プロンプトキャッシングを参照してください。
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 が展開後の最後のツールにそれを適用します。
遅延ロードされるツールは、システムプロンプトのプレフィックスには含まれません。モデルがツール検索を通じて遅延ツールを検出すると、その定義は会話履歴内に tool_reference ブロックとしてインラインで追加されます。プレフィックスは変更されないため、プロンプトキャッシングは保持されます。
つまり、ツール検索を通じてツールを動的に追加してもキャッシュは無効化されません。常にロードされる少数のツールセット(キャッシュ済み)で会話を開始し、必要に応じてモデルに追加のツールを検出させながら、すべてのターンで同じキャッシュヒットを維持できます。
また、defer_loading は厳密モードの文法構築とは独立して動作します。文法はどのツールが遅延されているかに関係なく、完全なツールセットから構築されるため、ツールが動的にロードされてもプロンプトキャッシングと文法キャッシングの両方が保持されます。
キャッシュはプレフィックス階層(tools → system → messages)に従うため、あるレベルでの変更はそのレベルとそれ以降のすべてを無効化します。
| 変更内容 | 無効化される対象 |
|---|---|
| ツール定義の変更 | キャッシュ全体(tools、system、messages) |
| ウェブ検索または引用の切り替え | system および messages キャッシュ |
tool_choice の変更 | messages キャッシュ |
disable_parallel_tool_use の変更 | messages キャッシュ |
| 画像の有無の切り替え | messages キャッシュ |
| 思考パラメータの変更 | messages キャッシュ |
会話の途中で tool_choice を変更する必要がある場合は、変更ポイントの前にキャッシュブレークポイントを配置することを検討してください。
リクエストでプロンプトキャッシングが有効になっており、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 キャッシュに影響します |
| テキストエディタ | 標準的なクライアントツールで、特別なキャッシングの相互作用はありません |
| Bash | 標準的なクライアントツールで、特別なキャッシングの相互作用はありません |
| メモリ | 標準的なクライアントツールで、特別なキャッシングの相互作用はありません |
TTL や料金を含む、プロンプトキャッシングモデルの全体像を学びます。
キャッシュを無効化することなく、オンデマンドでツールをロードします。
利用可能なすべてのツールとそのパラメータを参照します。
Was this page helpful?