ツールコンテキストの管理
ツール検索、プログラムによるツール呼び出し、プロンプトキャッシング、コンテキスト編集の中から選択して、コンテキストの肥大化を管理します。
ツール定義と蓄積された tool_result ブロックは、「context window」(コンテキストウィンドウ)を消費します。多数のツールや多数のターンを持つ長時間実行エージェントは、タスクが完了する前に利用可能なコンテキストを使い果たしてしまう可能性があります。4つのアプローチが、パイプラインの異なる段階でこの問題に対処します。
4つのアプローチ
各アプローチは、コンテキスト圧迫の異なる原因を対象としています。トークンがどこで消費されているかに合わせて選択してください。
| アプローチ | 削減対象 | 適している場面 | 詳細 |
|---|---|---|---|
| ツール検索 | 事前に読み込まれるツール定義 | ほとんどのツールが毎ターン必要とされない大規模なツールセット(20個以上のツール) | ツール検索ツール |
| プログラムによるツール呼び出し | tool_result のラウンドトリップ | 単一のスクリプトとして実行できるツール呼び出しの連鎖 | プログラムによるツール呼び出し |
| プロンプトキャッシング | 繰り返されるツール定義のトークンコスト | 多数のリクエストにわたって安定したツールセット | プロンプトキャッシングを使用したツール使用 |
| コンテキスト編集 | 履歴内の古い tool_result ブロック | 初期の結果がもはや関連性を持たない長い会話 | コンテキスト編集 |
ツール検索
「tool search」(ツール検索)は、Claudeが要求するまでツール定義をコンテキストウィンドウの外に保持します。50個のツールスキーマを事前に送信する代わりに、単一の tool_search ツールを送信し、残りはClaudeが必要に応じて発見できるようにします。これは、わずかな「latency」(レイテンシ)の増加(ツールを検索するための追加の1ターン)と引き換えに、ベースラインのコンテキスト使用量を大幅に削減します。
プログラムによるツール呼び出し
「programmatic tool calling」(プログラムによるツール呼び出し)は、一連のツール呼び出しを、Claudeが記述しAnthropicのコード実行サンドボックスが実行する単一のコードブロックにまとめます。tool_use と tool_result の5回のラウンドトリップの代わりに、Claudeはサンドボックス内から5つの関数すべてを呼び出す1つのスクリプトを出力します。中間結果が会話履歴に入ることはありません。
プロンプトキャッシング
「prompt caching」(プロンプトキャッシング)はコンテキスト内のトークン数を削減しませんが、後続のリクエストでそれらに対して支払う金額を削減します。ツール定義が安定している場合は、一度キャッシュして、キャッシュされたプレフィックスを数千のリクエストにわたって再利用します。ツールセットが大規模だが固定されている場合には、これが適切な選択です。
コンテキスト編集
「context editing」(コンテキスト編集)は、役割を終えた古い tool_result ブロックを会話履歴から削除します。長いエージェントループでは、当時は有用だったものの今では無駄な重荷となっている中間結果が数百件生成されることがあります。コンテキスト編集を使用すると、会話を再開することなくそれらを削除できます。
アプローチの組み合わせ
これらのアプローチは組み合わせることができます。長時間実行エージェントでは、ツール検索を使用してツールセットをスリムに保ち、プロンプトキャッシングを使用して残りの定義のコストを償却し、コンテキスト編集を使用して会話が長くなるにつれて古くなった結果を削除する、といった使い方ができます。それぞれが問題の異なる部分を解決するため、併用しても競合することはありません。
大量処理を行うエージェントの妥当な出発点は次のとおりです。
- 初日からツール定義でプロンプトキャッシングを有効にします。キャッシュ書き込みには基本入力価格に対して25%の上乗せがかかりますが、キャッシュにヒットする2回目のリクエストで元が取れます。
- ツールセットがおよそ20個のツールを超えるか、ベースラインのコンテキスト使用量が目立つようになったら、ツール検索を追加します。
- 個々の会話が、初期の結果が無関係になるほど長く続くようになったら、コンテキスト編集を追加します。
- 単一のバッチとして実行できる小さなツール呼び出しの反復的な連鎖に気づいた場合は、プログラムによるツール呼び出しを検討します。
次のステップ
ツール定義を事前ではなく必要に応じて読み込みます。
ツール呼び出しの連鎖を単一の実行可能スクリプトにまとめます。
リクエスト間でツール定義をキャッシュしてトークンコストを削減します。
長時間実行される会話から古くなったツール結果を削除します。
Was this page helpful?