このページでは、ツール使用の背後にある概念を説明します:ツールの実行場所、エージェントループの仕組み、そしてツール使用が適切なアプローチとなるタイミングについてです。実践的なガイダンスについては、チュートリアルまたは実装ガイドから始めてください。
ツール使用は、あなたのアプリケーションとモデルの間の契約です。利用可能な操作と、その入出力の形式を指定するのはあなたであり、いつどのように呼び出すかを決定するのはClaudeです。モデルは自分自身では何も実行しません。構造化されたリクエストを発行し、あなたのコード(またはAnthropicのサーバー)が操作を実行し、その結果が会話に返ってきます。
この契約により、モデルはテキストジェネレーターというよりも、呼び出す関数のように振る舞います。従来のAPIの経験を持つエンジニアは、他の型付きインターフェースと同じようにツール使用を統合できます:スキーマを定義し、コールバックを処理し、結果を返す。違いは、反対側の呼び出し元が、会話に基づいてどの関数を呼び出すかを選択する言語モデルであるという点です。
ツールが異なる主要な軸は、コードが実行される場所です。すべてのツールは3つのバケットのいずれかに分類され、そのバケットによってアプリケーションが何に責任を持つかが決まります。
スキーマを書くのはあなた、コードを実行するのはあなた、結果を返すのもあなたです。これがメインイベントです:ツール使用トラフィックの大部分は、アプリケーション固有のロジックを呼び出すユーザー定義ツールです。
Claudeがあなたのツールの1つを使用することを決定すると、APIレスポンスにはツール名と引数のJSONオブジェクトを含むtool_useブロックが含まれます。あなたのアプリケーションはそれらの引数を抽出し、操作(データベースクエリ、HTTPコール、ファイル書き込みなど、ツールが行うこと)を実行し、次のリクエストのtool_resultブロックで出力を返します。Claudeはあなたの実装を見ることはなく、提供したスキーマと返した結果のみを見ます。
一般的な操作(シェルコマンドの実行、ファイルの編集、ブラウザの制御、スクラッチパッドメモリの管理)のために、Anthropicはツールスキーマを公開し、あなたのアプリケーションが実行を処理します。このカテゴリのツールはbash、text_editor、computer、memoryです。
実行モデルはユーザー定義ツールと同一です:レスポンスにはtool_useブロックが含まれ、あなたのコードが操作を実行し、を返します。独自の同等ツールを定義する代わりにAnthropicスキーマツールを使用する理由は、これらのスキーマがトレーニング済みだからです。Claudeはこれらの正確なツールシグネチャを使用した何千もの成功した軌跡で最適化されているため、同じことを行うカスタムツールよりも信頼性高く呼び出し、エラーからより優雅に回復します。スキーマはモデルがすでに期待しているインターフェースです。
Was this page helpful?
tool_resultweb_search、web_fetch、code_execution、tool_searchについては、Anthropicがコードを実行します。リクエストでツールを有効にすれば、サーバーが残りすべてを処理します。サーバーサイドループが操作を実行し、レスポンスがあなたに届く前にモデルに出力を返すため、これらのツールに対してtool_resultブロックを構築することはありません。
受け取るレスポンスには、何が実行され何が返ってきたかを示すserver_tool_useブロックが含まれますが、それらを見る時点では実行はすでに完了しています。あなたのアプリケーションの役割は、ツールを有効にして最終的な回答を読むことであり、実行ループに参加することではありません。
クライアント実行ツール(ユーザー定義とAnthropicスキーマの両方)は、アプリケーションがループを駆動することを必要とします。モデルはあなたのコードを実行できないため、すべてのツール呼び出しはラウンドトリップです:モデルが要求し、あなたが実行し、あなたが報告し、モデルが続行します。
標準的な形はstop_reasonをキーとするwhileループです:
tools配列とユーザーメッセージを含むリクエストを送信する。stop_reason: "tool_use"と1つ以上のtool_useブロックで応答する。tool_resultブロックとしてフォーマットする。tool_resultブロックを含むユーザーメッセージを含む新しいリクエストを送信する。stop_reasonが"tool_use"である間、ステップ2から繰り返す。実際には次のように読めます:stop_reason == "tool_use"の間、ツールを実行して会話を続ける。ループは他の停止理由("end_turn"、"max_tokens"、"stop_sequence"、または"refusal")で終了します。これはClaudeが最終的な回答を生成したか、アプリケーションが処理すべき別の理由で停止したことを意味します。
リクエストの構築、並列ツール呼び出しの処理、結果のフォーマットの仕組みについては、ツール呼び出しの処理を参照してください。
サーバー実行ツールは、Anthropicのインフラストラクチャ内で独自のループを実行します。あなたのアプリケーションからの単一のリクエストが、レスポンスが返ってくる前に複数のウェブ検索やコード実行をトリガーする場合があります。モデルは検索し、結果を読み、再度検索することを決定し、必要なものが得られるまで反復します。これはすべてあなたのアプリケーションが参加することなく行われます。
この内部ループには反復制限があります。モデルが上限に達してもまだ反復している場合、レスポンスは"end_turn"の代わりにstop_reason: "pause_turn"で返ってきます。一時停止されたターンは作業が完了していないことを意味します。モデルが中断したところから続けられるよう、会話(一時停止されたレスポンスを含む)を再送信してください。継続パターンについてはサーバーツールを参照してください。
ツール使用は、タスクがテキストだけではモデルができないことを必要とする場合に適しています:
ツールを使用すべきサインは:モデル出力から決定を抽出するために正規表現を書いているなら、その決定はツール呼び出しであるべきでした。構造化された意図を回復するために自由形式のテキストを解析することは、その構造がスキーマに属するサインです。
ツール使用が適さない場合: