このページでは、ツール定義のプロンプトキャッシングについて説明します。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は、strictモードの文法構築からも独立して動作します。どのツールが遅延されているかに関係なく、文法は完全なツールセットから構築されるため、ツールが動的にロードされてもプロンプトキャッシングと文法キャッシュの両方が保持されます。
キャッシュはプレフィックス階層(tools → system → messages)に従うため、あるレベルでの変更はそのレベルとそれ以降のすべてを無効化します。
| 変更 | 無効化される対象 |
|---|---|
| ツール定義の変更 | キャッシュ全体(tools、system、messages) |
| ウェブ検索または引用の切り替え | systemとmessagesのキャッシュ |
tool_choiceの変更 | messagesキャッシュ |
disable_parallel_tool_useの変更 | messagesキャッシュ |
| 画像の有無の切り替え | messagesキャッシュ |
| 思考パラメータの変更 | messagesキャッシュは常に無効化。思考設定をそれらより前にレンダリングするモデルでは、toolと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キャッシュに影響する |
| テキストエディタ | 標準的なクライアントツール。特別なキャッシングの相互作用なし |
| Bash | 標準的なクライアントツール。特別なキャッシングの相互作用なし |
| メモリ | 標準的なクライアントツール。特別なキャッシングの相互作用なし |
TTLや料金を含む、プロンプトキャッシングの完全なモデルを学びます。
キャッシュを壊すことなく、オンデマンドでツールをロードします。
利用可能なすべてのツールとそのパラメータを閲覧します。
Was this page helpful?