ツール定義と蓄積されたtool_resultブロックはコンテキストウィンドウを消費します。多くのツールまたは多くのターンを持つ長時間実行エージェントは、タスクが完了する前に利用可能なコンテキストを使い果たす可能性があります。4つのアプローチがパイプラインの異なるポイントでこれに対処します。
各アプローチはコンテキスト圧力の異なるソースをターゲットにしています。トークンがどこに使われているかに合致するものを選択してください。
| アプローチ | 削減対象 | 適用場面 | 詳細 |
|---|---|---|---|
| ツール検索 | 事前にロードされたツール定義 | 大規模なツールセット(20以上のツール)で、ほとんどのツールが毎ターン必要ない場合 | ツール検索ツール |
| プログラマティックツール呼び出し | tool_resultラウンドトリップ | 単一スクリプトとして実行できるツール呼び出しのチェーン | プログラマティックツール呼び出し |
| プロンプトキャッシング | 繰り返されるツール定義のトークンコスト | 多くのリクエスト間で安定したツールセット | プロンプトキャッシングを使用したツール使用 |
| コンテキスト編集 | 履歴内の古いtool_resultブロック | 早期の結果がもはや関連性がない長い会話 | コンテキスト編集 |
ツール検索は、Claudeがそれらを要求するまでツール定義をコンテキストウィンドウから除外します。50個のツールスキーマを事前に送信する代わりに、単一のtool_searchツールを送信し、Claudeが必要に応じて残りを発見できるようにします。これは少量のレイテンシ(ツールを検索するための1つの追加ターン)と引き換えに、ベースラインコンテキスト使用量の大幅な削減をもたらします。
プログラマティックツール呼び出しは、一連のツール呼び出しを、Claudeが記述し、Anthropicのコード実行サンドボックスが実行する単一のコードブロックに折りたたみます。tool_useとtool_resultの5つのラウンドトリップの代わりに、Claudeはサンドボックス内から5つの関数すべてを呼び出す1つのスクリプトを出力します。中間結果は会話履歴に入りません。
プロンプトキャッシングはコンテキスト内のトークン数を削減しませんが、後続のリクエストでそれらに対して支払う金額を削減します。ツール定義が安定している場合は、それらを一度キャッシュし、キャッシュされたプレフィックスを数千のリクエスト間で再利用します。これはツールセットが大きいが固定されている場合の正しい選択です。
コンテキスト編集は、古いtool_resultブロックが目的を果たした後、会話履歴から削除します。長いエージェントループは、当時は有用だったが現在は無駄な重みである数百の中間結果を生成する可能性があります。コンテキスト編集により、会話を再開することなくそれらをトリミングできます。
これらのアプローチは構成可能です。長時間実行エージェントは、ツール検索を使用してツールセットを精簡し、プロンプトキャッシングを使用して残りの定義のコストを償却し、会話が成長するにつれてコンテキスト編集を使用して古い結果をトリミングする可能性があります。各アプローチは問題の異なる部分を解決するため、それらを一緒に使用する際に競合はありません。
高容量エージェントの合理的な開始点:
事前にロードする代わりに、オンデマンドでツール定義をロードします。
ツール呼び出しチェーンを単一の実行可能スクリプトに折りたたみます。
リクエスト間でツール定義をキャッシュしてトークンコストを削減します。
長時間実行される会話から古いツール結果をトリミングします。
Was this page helpful?