Loading...
  • ビルド
  • 管理
  • モデルと料金
  • クライアントSDK
  • APIリファレンス
Search...
⌘K
Log in
ツール呼び出しの処理
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
ビルド/ツール

ツール呼び出しの処理

tool_useブロックを解析し、tool_resultレスポンスをフォーマットし、is_errorでエラーを処理します。

このページでは、ツール呼び出しのライフサイクルについて説明します。Claudeのレスポンスからtool_useブロックを読み取り、返信でtool_resultブロックをフォーマットし、エラーを通知します。これを自動的に処理するSDK抽象化については、Tool Runnerを参照してください。

Tool Runnerを使用するとより簡単です: このページで説明されている手動ツール処理は、Tool Runnerによって自動的に管理されます。ツール実行をカスタムで制御する必要がある場合は、このページを使用してください。

Claudeのレスポンスは、クライアントツールとサーバーツールのどちらを使用するかによって異なります。

クライアントツールからの結果の処理

レスポンスはtool_useのstop_reasonと、以下を含む1つ以上のtool_useコンテンツブロックを持ちます:

  • id: この特定のツール使用ブロックの一意の識別子。これは後でツール結果と照合するために使用されます。
  • name: 使用されているツールの名前。
  • input: ツールに渡される入力を含むオブジェクト。ツールのinput_schemaに準拠しています。

クライアントツールのツール使用レスポンスを受け取った場合、以下を実行する必要があります:

  1. tool_useブロックからname、id、inputを抽出します。
  2. コードベースで対応するツール名の実際のツールを実行し、ツールinputを渡します。
  3. roleがuserで、tool_resultタイプを含むcontentブロックを含む新しいメッセージを送信して、会話を続けます。以下の情報を含みます:
    • tool_use_id: これが結果である、ツール使用リクエストのid。
    • content: ツールの結果。文字列(例えば、"content": "15 degrees")、ネストされたコンテンツブロックのリスト(例えば、"content": [{"type": "text", "text": "15 degrees"}])、またはドキュメントブロックのリスト(例えば、)。これらのコンテンツブロックは、、またはタイプを使用できます。

重要なフォーマット要件:

  • ツール結果ブロックは、メッセージ履歴内の対応するツール使用ブロックの直後に続く必要があります。アシスタントのツール使用メッセージとユーザーのツール結果メッセージの間に、メッセージを含めることはできません。
  • ツール結果を含むユーザーメッセージでは、tool_resultブロックはコンテンツ配列の最初に来る必要があります。すべてのテキストはすべてのツール結果の後に来る必要があります。

例えば、これは400エラーを引き起こします:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "Here are the results:" }, // ❌ tool_resultの前のテキスト
    { "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ }
  ]
}

ツール結果を受け取った後、Claudeはその情報を使用して、元のユーザープロンプトへのレスポンス生成を続けます。

サーバーツールからの結果の処理

Claudeはツールを内部で実行し、追加のユーザー操作を必要とせずに、結果をレスポンスに直接組み込みます。

他のAPIとの違い

ツール使用を分離したり、toolやfunctionなどの特別なロールを使用したりするAPIとは異なり、Claude APIはツールをuserおよびassistantメッセージ構造に直接統合します。

メッセージにはtext、image、tool_use、tool_resultブロックの配列が含まれます。userメッセージはクライアントコンテンツとtool_resultを含み、assistantメッセージはAI生成コンテンツとtool_useを含みます。

is_errorでエラーを処理する

Claudeでツールを使用する場合、いくつかの異なるタイプのエラーが発生する可能性があります:

次のステップ

  • 1回のターンで複数のツールを実行する場合は、並列ツール使用を参照してください。
  • このループを自動化するSDK抽象化については、Tool Runnerを参照してください。
  • 完全なツール使用ワークフローについては、ツールの定義を参照してください。

Was this page helpful?

  • is_errorでエラーを処理する
"content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]
text
image
document
  • is_error(オプション): ツール実行がエラーで終了した場合はtrueに設定します。
  • これは正しいです:

    {
      "role": "user",
      "content": [
        { "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ },
        { "type": "text", "text": "What should I do next?" } // ✅ tool_resultの後のテキスト
      ]
    }

    「tool_use idsが見つかりましたが、その直後にtool_resultブロックがありません」というエラーが表示される場合は、ツール結果が正しくフォーマットされていることを確認してください。