このページでは、ツール呼び出しのライフサイクルについて説明します。Claudeのレスポンスからtool_useブロックを読み取り、返信でtool_resultブロックをフォーマットし、エラーを通知する方法です。これを自動的に処理するSDKの抽象化については、Tool Runnerを参照してください。
Claudeのレスポンスは、クライアントツールまたはサーバーツールのどちらを使用するかによって異なります。
レスポンスにはtool_useのstop_reasonと、以下を含む1つ以上のtool_useコンテンツブロックが含まれます。
id: この特定のツール使用ブロックの一意の識別子。これは後でツール結果と照合するために使用されます。
name: 使用されるツールの名前。
input: ツールのinput_schemaに準拠した、ツールに渡される入力を含むオブジェクト。
クライアントツールのツール使用レスポンスを受け取ったら、次の手順を実行する必要があります。
tool_useブロックからname、id、inputを抽出します。
- そのツール名に対応するコードベース内の実際のツールを、ツールの
inputを渡して実行します。
roleがuserの新しいメッセージを送信して会話を続けます。このメッセージには、tool_resultタイプと以下の情報を含むcontentブロックが含まれます。
tool_use_id: この結果が対応するツール使用リクエストのid。
content(オプション): ツールの結果。文字列(例: "content": "15 degrees")、ネストされたコンテンツブロックのリスト(例: "content": [{"type": "text", "text": "15 degrees"}])、またはドキュメントブロックのリスト(例: "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}])として指定します。これらのコンテンツブロックでは、text、image、document、またはsearch_resultタイプを使用できます。
is_error(オプション): ツールの実行がエラーになった場合はtrueに設定します。
ツール結果を受け取った後、Claudeはその情報を使用して、元のユーザープロンプトへのレスポンスの生成を続けます。
Claudeはツールを内部的に実行し、追加のユーザーインタラクションを必要とせずに、結果をレスポンスに直接組み込みます。
Claudeでツールを使用する際に発生する可能性のあるエラーには、いくつかの種類があります。
Claudeが1つのターンで複数のツールを呼び出すレスポンスを処理します。
tool_useループ、結果のフォーマット、再試行をSDKに任せます。
Claudeを適切なツールに導くスキーマと説明を書きます。