Claudeのツール使用
Claudeはツールや関数と対話する能力を持ち、より幅広いタスクを実行するためにClaudeの機能を拡張することができます。
以下は、Messages APIを使用してClaudeにツールを提供する方法の例です:
ツール使用の仕組み
Claudeは2種類のツールをサポートしています:
-
クライアントツール:あなたのシステム上で実行されるツールで、以下を含みます:
- ユーザー定義のカスタムツール(あなたが作成して実装するもの)
- コンピューター使用(ベータ)やテキストエディタなどのAnthropicが定義したツール(クライアント実装が必要)
-
サーバーツール:Anthropicのサーバー上で実行されるツール(ウェブ検索ツールなど)。これらのツールはAPIリクエストで指定する必要がありますが、あなた側での実装は必要ありません。
Anthropicが定義したツールは、モデルバージョン間の互換性を確保するためにバージョン付きの型(例:web_search_20250305
、text_editor_20250124
)を使用しています。
クライアントツール
クライアントツールをClaudeと統合するには、以下の手順に従います:
Claudeにツールとユーザープロンプトを提供する
- クライアントツールの名前、説明、入力スキーマをAPIリクエストで定義します。
- 「サンフランシスコの天気は?」などのように、これらのツールを必要とする可能性のあるユーザープロンプトを含めます。
Claudeがツールを使用することを決定する
- Claudeはユーザーの質問に対して、どのツールが役立つかを評価します。
- もしあれば、Claudeは適切にフォーマットされたツール使用リクエストを構築します。
- クライアントツールの場合、APIレスポンスの
stop_reason
はtool_use
となり、Claudeの意図を示します。
ツールを実行して結果を返す
- Claudeのリクエストからツール名と入力を抽出します
- あなたのシステム上でツールコードを実行します
- 結果を
tool_result
コンテンツブロックを含む新しいuser
メッセージで返します
Claudeがツール結果を使用して応答を作成する
- Claudeはツール結果を分析して、元のユーザープロンプトに対する最終的な応答を作成します。
注意:ステップ3と4はオプションです。一部のワークフローでは、Claudeのツール使用リクエスト(ステップ2)だけで十分で、結果をClaudeに送り返す必要がない場合もあります。
サーバーツール
サーバーツールは異なるワークフローに従います:
Claudeにツールとユーザープロンプトを提供する
- ウェブ検索などのサーバーツールには、それぞれ独自のパラメータがあります。
- 「AIに関する最新ニュースを検索して」などのように、これらのツールを必要とする可能性のあるユーザープロンプトを含めます。
Claudeがサーバーツールを実行する
- Claudeはユーザーの質問に対して、サーバーツールが役立つかどうかを評価します。
- もしそうなら、Claudeはツールを実行し、結果は自動的にClaudeの応答に組み込まれます。
Claudeがサーバーツール結果を使用して応答を作成する
- Claudeはサーバーツール結果を分析して、元のユーザープロンプトに対する最終的な応答を作成します。
- サーバーツールの実行には追加のユーザー操作は必要ありません。
ツール使用の例
以下は、さまざまなツール使用パターンとテクニックを示すコード例です。簡潔にするため、ツールは単純なものであり、ツールの説明は最適なパフォーマンスを確保するために理想的なものよりも短くなっています。
単一ツールの例
単一ツールの例
Claudeは以下のような応答を返します:
次に、提供された入力でget_weather
関数を実行し、結果を新しいuser
メッセージで返す必要があります:
これにより、天気データを組み込んだClaudeの最終応答が表示されます:
複数ツールの例
複数ツールの例
1つのリクエストで選択できる複数のツールをClaudeに提供することができます。以下は、get_weather
とget_time
の両方のツールを含む例で、ユーザーの質問は両方を尋ねています。
この場合、Claudeはおそらく、ユーザーの質問に完全に答えるために、一度に1つずつ、2つの別々のツール(get_weather
とget_time
)を使用しようとします。ただし、特に相互に依存していない場合は、2つのtool_use
ブロックを一度に出力することもあります。各ツールを実行し、単一のuser
メッセージ内の別々のtool_result
ブロックでその結果を返す必要があります。
情報の欠落
情報の欠落
ユーザーのプロンプトにツールの必須パラメータをすべて埋めるのに十分な情報が含まれていない場合、Claude Opusはパラメータが欠けていることを認識し、それを尋ねる可能性が高くなります。Claude Sonnetは、特にツールリクエストを出力する前に考えるように促された場合、質問することがありますが、合理的な値を推測して最善を尽くすこともあります。
例えば、上記のget_weather
ツールを使用して、場所を指定せずに「天気はどうですか?」とClaudeに尋ねた場合、特にClaude Sonnetは、ツール入力を推測する可能性があります:
この動作は、特により曖昧なプロンプトや、より知能の低いモデルでは保証されません。Claude Opusが必須パラメータを埋めるのに十分なコンテキストを持っていない場合、ツール呼び出しを行うのではなく、明確化のための質問で応答する可能性がはるかに高くなります。
連続的なツール
連続的なツール
一部のタスクでは、あるツールの出力を別のツールの入力として使用するなど、複数のツールを順番に呼び出す必要がある場合があります。そのような場合、Claudeは一度に1つのツールを呼び出します。すべてのツールを一度に呼び出すように促された場合、Claudeは上流のツールのツール結果に依存している下流のツールのパラメータを推測する可能性があります。
以下は、get_location
ツールを使用してユーザーの位置を取得し、その位置をget_weather
ツールに渡す例です:
この場合、Claudeはまずget_location
ツールを呼び出してユーザーの位置を取得します。tool_result
で位置を返した後、Claudeはその位置を使ってget_weather
を呼び出し、最終的な答えを得ます。
完全な会話は以下のようになるかもしれません:
役割 | 内容 |
---|---|
ユーザー | 私のいる場所の天気はどうですか? |
アシスタント | <thinking>この質問に答えるには、まずget_locationツールを使用してユーザーの位置を特定する必要があります。その後、その位置をget_weatherツールに渡して、そこの現在の天気を調べることができます。</thinking>[get_locationのツール使用] |
ユーザー | [一致するIDとSan Francisco, CAの結果を持つget_locationのツール結果] |
アシスタント | [以下の入力を持つget_weatherのツール使用]{ “location”: “San Francisco, CA”, “unit”: “fahrenheit” } |
ユーザー | [一致するIDと「59°F (15°C)、ほとんど曇り」の結果を持つget_weatherのツール結果] |
アシスタント | あなたの現在地サンフランシスコの天気は現在59°F(15°C)でほとんど曇りです。市内はかなり涼しく曇った日です。外出する予定があれば、軽いジャケットを持っていくとよいでしょう。 |
この例は、Claudeが異なるソースからデータを収集する必要がある質問に答えるために、複数のツール呼び出しをどのように連鎖させることができるかを示しています。主なステップは次のとおりです:
- Claudeはまず、天気の質問に答えるためにユーザーの位置が必要であることを認識し、
get_location
ツールを呼び出します。 - ユーザー(つまりクライアントコード)は実際の
get_location
関数を実行し、結果「San Francisco, CA」をtool_result
ブロックで返します。 - 位置が分かったので、Claudeは
get_weather
ツールを呼び出し、location
パラメータとして「San Francisco, CA」を渡します(また、unit
は必須パラメータではないため、推測されたunit
パラメータも渡します)。 - ユーザーは再び、提供された引数で実際の
get_weather
関数を実行し、別のtool_result
ブロックで天気データを返します。 - 最後に、Claudeは天気データを元の質問に対する自然言語の応答に組み込みます。
思考連鎖ツール使用
思考連鎖ツール使用
デフォルトでは、Claude Opusはツールが必要かどうか、どのツールを使用するか、適切なパラメータは何かを最もよく判断するために、ツール使用クエリに答える前に考えるように促されています。Claude SonnetとClaude Haikuは、できるだけツールを使用するように促され、不必要なツールを呼び出したり、欠けているパラメータを推測したりする可能性が高くなります。SonnetやHaikuがツール呼び出しを行う前にユーザークエリをより適切に評価するように促すには、次のプロンプトを使用できます:
思考連鎖プロンプト
関連するツール(利用可能な場合)を使用してユーザーのリクエストに答えてください。ツールを呼び出す前に、\<thinking>\</thinking>タグ内で分析を行ってください。まず、提供されたツールのうち、ユーザーのリクエストに答えるのに関連するツールがどれかを考えてください。次に、関連するツールの必須パラメータそれぞれについて、ユーザーが直接提供したか、値を推測するのに十分な情報を与えたかを判断してください。パラメータが推測できるかどうかを判断する際は、特定の値をサポートするかどうかを確認するために、すべてのコンテキストを慎重に検討してください。必須パラメータがすべて存在するか、合理的に推測できる場合は、思考タグを閉じてツール呼び出しに進んでください。ただし、必須パラメータの値の1つが欠けている場合は、関数を呼び出さず(欠けているパラメータのフィラーを使用しても呼び出さない)、代わりにユーザーに欠けているパラメータを提供するよう依頼してください。提供されていない場合、オプションのパラメータに関する詳細情報を求めないでください。
JSONモード
JSONモード
ツールを使用して、そのツールや関数を通じて出力を実行する意図がなくても、スキーマに従ったJSON出力をClaudeに生成させることができます。
このようにツールを使用する場合:
- 通常は単一のツールを提供したいでしょう
- モデルに明示的にそのツールを使用するよう指示するために
tool_choice
(ツール使用の強制を参照)を設定する必要があります - モデルが
input
をツールに渡すことを忘れないでください。そのため、ツールの名前と説明はモデルの視点からのものであるべきです。
以下は、特定のフォーマットに従って画像を説明するためにrecord_summary
ツールを使用しています。
価格
Tool use requests are priced based on:
- The total number of input tokens sent to the model (including in the
tools
parameter) - The number of output tokens generated
- For server-side tools, additional usage-based pricing (e.g., web search charges per search performed)
Client-side tools are priced the same as any other Claude API request, while server-side tools may incur additional charges based on their specific usage.
The additional tokens from tool use come from:
- The
tools
parameter in API requests (tool names, descriptions, and schemas) tool_use
content blocks in API requests and responsestool_result
content blocks in API requests
When you use tools
, we also automatically include a special system prompt for the model which enables tool use. The number of tool use tokens required for each model are listed below (excluding the additional tokens listed above). Note that the table assumes at least 1 tool is provided. If no tools
are provided, then a tool choice of none
uses 0 additional system prompt tokens.
Model | Tool choice | Tool use system prompt token count |
---|---|---|
Claude Opus 4 | auto , none any , tool | 346 tokens 313 tokens |
Claude Sonnet 4 | auto , none any , tool | 346 tokens 313 tokens |
Claude Sonnet 3.7 | auto , none any , tool | 346 tokens 313 tokens |
Claude Sonnet 3.5 (Oct) | auto , none any , tool | 346 tokens 313 tokens |
Claude Sonnet 3.5 (June) | auto , none any , tool | 294 tokens 261 tokens |
Claude Haiku 3.5 | auto , none any , tool | 264 tokens 340 tokens |
Claude Opus 3 | auto , none any , tool | 530 tokens 281 tokens |
Claude Sonnet 3 | auto , none any , tool | 159 tokens 235 tokens |
Claude Haiku 3 | auto , none any , tool | 264 tokens 340 tokens |
These token counts are added to your normal input and output tokens to calculate the total cost of a request.
現在のモデルごとの価格については、モデル概要表を参照してください。
ツール使用プロンプトを送信すると、他のAPIリクエストと同様に、レスポンスは報告されたusage
メトリクスの一部として入力と出力の両方のトークン数を出力します。
次のステップ
クックブックにある実装可能なツール使用コード例のリポジトリを探索してください: