このページでは、ツール呼び出しのライフサイクルについて説明します。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を適切なツールへ導くスキーマと説明を記述します。