モデルの選択
一般的に、複雑なツールや曖昧なクエリには Claude Opus 4.1、Claude Opus 4、Claude Sonnet 4、Claude Sonnet 3.7、Claude Sonnet 3.5(非推奨)、または Claude Opus 3(非推奨)を使用してください。これらは複数のツールをより適切に処理し、必要に応じて明確化を求めます。 単純なツールには Claude Haiku 3.5 または Claude Haiku 3 を使用しますが、不足しているパラメータを推測する場合があることに注意してください。Claude Sonnet 3.7 をツール使用と拡張思考と組み合わせて使用する場合は、詳細についてこちらのガイドを参照してください。
クライアントツールの指定
クライアントツール(Anthropic定義とユーザー定義の両方)は、APIリクエストのtools
トップレベルパラメータで指定されます。各ツール定義には以下が含まれます:
パラメータ | 説明 |
---|---|
name | ツールの名前。正規表現 ^[a-zA-Z0-9_-]{1,64}$ に一致する必要があります。 |
description | ツールが何をするか、いつ使用すべきか、どのように動作するかの詳細なプレーンテキストの説明。 |
input_schema | ツールの期待されるパラメータを定義する JSON Schema オブジェクト。 |
シンプルなツール定義の例
シンプルなツール定義の例
JSON
get_weather
は、必須の location
文字列と、“celsius” または “fahrenheit” のいずれかでなければならないオプションの unit
文字列を含む入力オブジェクトを期待します。ツール使用システムプロンプト
tools
パラメータを使用して Anthropic API を呼び出すと、ツール定義、ツール設定、およびユーザー指定のシステムプロンプトから特別なシステムプロンプトを構築します。構築されたプロンプトは、指定されたツールを使用し、ツールが適切に動作するために必要なコンテキストを提供するようにモデルに指示するように設計されています:
ツール定義のベストプラクティス
Claude でツールを使用する際に最高のパフォーマンスを得るには、以下のガイドラインに従ってください:- 極めて詳細な説明を提供する。 これはツールのパフォーマンスにおいて最も重要な要因です。説明には以下を含むツールに関するすべての詳細を説明する必要があります:
- ツールが何をするか
- いつ使用すべきか(そしていつ使用すべきでないか)
- 各パラメータが何を意味し、ツールの動作にどのように影響するか
- ツール名が不明確な場合にツールが返さない情報など、重要な注意事項や制限。Claude にツールについてより多くのコンテキストを提供するほど、いつどのように使用するかをより適切に決定できるようになります。ツールの説明には少なくとも3〜4文を目指し、ツールが複雑な場合はそれ以上にしてください。
- 例よりも説明を優先する。 ツールの説明や付随するプロンプトにツールの使用例を含めることはできますが、これはツールの目的とパラメータの明確で包括的な説明を持つことよりも重要ではありません。説明を完全に肉付けした後にのみ例を追加してください。
良いツール説明の例
良いツール説明の例
JSON
悪いツール説明の例
悪いツール説明の例
JSON
ticker
パラメータが何を意味するかを明確に説明しています。悪い説明は簡潔すぎて、Claude にツールの動作と使用法について多くの未解決の質問を残しています。
Claude の出力の制御
ツール使用の強制
場合によっては、Claude がツールを使用せずに答えを提供できると考えていても、ユーザーの質問に答えるために特定のツールを使用させたい場合があります。これは、次のようにtool_choice
フィールドでツールを指定することで実行できます:
auto
は、提供されたツールを呼び出すかどうかを Claude に決定させます。これはtools
が提供された場合のデフォルト値です。any
は、提供されたツールのいずれかを使用する必要があることを Claude に伝えますが、特定のツールを強制しません。tool
は、常に特定のツールを使用するように Claude を強制できます。none
は、Claude がツールを使用することを防ぎます。これはtools
が提供されていない場合のデフォルト値です。
プロンプトキャッシングを使用する場合、
tool_choice
パラメータの変更はキャッシュされたメッセージブロックを無効にします。ツール定義とシステムプロンプトはキャッシュされたままですが、メッセージコンテンツは再処理する必要があります。
tool_choice
が any
または tool
の場合、ツールの使用を強制するためにアシスタントメッセージを事前入力することに注意してください。これは、明示的に要求された場合でも、モデルが tool_use
コンテンツブロックの前に思考の連鎖 text
コンテンツブロックを出力しないことを意味します。
ツール使用で拡張思考を使用する場合、
tool_choice: {"type": "any"}
と tool_choice: {"type": "tool", "name": "..."}
はサポートされておらず、エラーが発生します。拡張思考と互換性があるのは tool_choice: {"type": "auto"}
(デフォルト)と tool_choice: {"type": "none"}
のみです。tool_choice
に {"type": "auto"}
(デフォルト)を使用し、user
メッセージに明示的な指示を追加できます。例:ロンドンの天気はどうですか?応答でget_weatherツールを使用してください。
JSON出力
ツールは必ずしもクライアント関数である必要はありません — 提供されたスキーマに従うJSON出力をモデルに返させたい場合はいつでもツールを使用できます。例えば、特定のスキーマを持つrecord_summary
ツールを使用する場合があります。完全な動作例については、Claude でのツール使用を参照してください。
思考の連鎖
ツールを使用する場合、Claude はしばしば「思考の連鎖」、つまり問題を分解し、どのツールを使用するかを決定するために使用する段階的な推論を示します。Claude Opus 3(非推奨)モデルは、tool_choice
が auto
に設定されている場合にこれを行います(これはデフォルト値です。ツール使用の強制を参照)。Sonnet と Haiku はプロンプトでこれを行うように促すことができます。
例えば、「サンフランシスコの現在の天気はどうで、そこの時間は何時ですか?」というプロンプトが与えられた場合、Claude は次のように応答する場合があります:
JSON
並列ツール使用
デフォルトでは、Claude はユーザークエリに答えるために複数のツールを使用する場合があります。この動作は次の方法で無効にできます:- tool_choice タイプが
auto
の場合にdisable_parallel_tool_use=true
を設定すると、Claude が最大1つのツールを使用することが保証されます - tool_choice タイプが
any
またはtool
の場合にdisable_parallel_tool_use=true
を設定すると、Claude が正確に1つのツールを使用することが保証されます
完全な並列ツール使用の例
完全な並列ツール使用の例
メッセージ履歴で並列ツール呼び出しを適切にフォーマットする方法を示す完全な例は次のとおりです:並列ツール呼び出しを含むアシスタントメッセージは次のようになります:
並列ツールの完全なテストスクリプト
並列ツールの完全なテストスクリプト
並列ツール呼び出しが正しく動作していることをテストおよび検証するための完全で実行可能なスクリプトは次のとおりです:このスクリプトは以下を実証します:
- 並列ツール呼び出しと結果を適切にフォーマットする方法
- 並列呼び出しが行われていることを検証する方法
- 将来の並列ツール使用を促進する正しいメッセージ構造
- 避けるべき一般的な間違い(ツール結果の前のテキストなど)
並列ツール使用の最大化
Claude 4 モデルはデフォルトで優れた並列ツール使用機能を持っていますが、対象を絞ったプロンプトですべてのモデルで並列ツール実行の可能性を高めることができます:並列ツール使用のシステムプロンプト
並列ツール使用のシステムプロンプト
Claude 4 モデル(Opus 4.1、Opus 4、Sonnet 4)の場合、システムプロンプトに以下を追加してください:さらに強力な並列ツール使用(デフォルトが十分でない場合に推奨)には、以下を使用してください:
ユーザーメッセージプロンプト
ユーザーメッセージプロンプト
特定のユーザーメッセージ内で並列ツール使用を促すこともできます:
Claude Sonnet 3.7 での並列ツール使用Claude Sonnet 3.7 は、
disable_parallel_tool_use
を設定していない場合でも、応答で並列ツール呼び出しを行う可能性が低い場合があります。これを回避するために、トークン効率的ツール使用を有効にすることをお勧めします。これにより、Claude が並列ツールを使用することが促進されます。このベータ機能は、レイテンシを削減し、出力トークンを平均14%節約します。トークン効率的ツール使用ベータにオプトインしたくない場合は、他のツールへの呼び出しを同時にラップするメタツールとして機能する「バッチツール」を導入することもできます。このツールが存在する場合、モデルはそれを使用して複数のツールを並列で同時に呼び出すことがわかります。この回避策の使用方法については、クックブックのこの例を参照してください。ツール使用とツール結果コンテンツブロックの処理
Claude の応答は、クライアントツールまたはサーバーツールを使用するかによって異なります。クライアントツールからの結果の処理
応答にはtool_use
の stop_reason
と、以下を含む1つ以上の tool_use
コンテンツブロックがあります:
id
:この特定のツール使用ブロックの一意の識別子。これは後でツール結果をマッチアップするために使用されます。name
:使用されているツールの名前。input
:ツールのinput_schema
に準拠して、ツールに渡される入力を含むオブジェクト。
`tool_use` コンテンツブロックを含むAPI応答の例
`tool_use` コンテンツブロックを含むAPI応答の例
JSON
tool_use
ブロックからname
、id
、input
を抽出します。- そのツール名に対応するコードベース内の実際のツールを実行し、ツール
input
を渡します。 user
のrole
と、tool_result
タイプと以下の情報を含むcontent
ブロックを持つ新しいメッセージを送信して会話を続けます:tool_use_id
:これが結果となるツール使用リクエストのid
。content
:文字列としてのツールの結果(例:"content": "15度"
)、ネストされたコンテンツブロックのリスト(例:"content": [{"type": "text", "text": "15度"}]
)、またはドキュメントブロックのリスト(例:"content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15度"}]
)。これらのコンテンツブロックはtext
、image
、またはdocument
タイプを使用できます。is_error
(オプション):ツール実行がエラーになった場合はtrue
に設定します。
重要なフォーマット要件:これは正しいです:「tool_use ids were found without tool_result blocks immediately after」のようなエラーが発生した場合は、ツール結果が正しくフォーマットされていることを確認してください。
- ツール結果ブロックは、メッセージ履歴内で対応するツール使用ブロックの直後に続く必要があります。アシスタントのツール使用メッセージとユーザーのツール結果メッセージの間にメッセージを含めることはできません。
- ツール結果を含むユーザーメッセージでは、tool_result ブロックがコンテンツ配列の最初に来る必要があります。テキストはすべてのツール結果の後に来る必要があります。
成功したツール結果の例
成功したツール結果の例
JSON
画像を含むツール結果の例
画像を含むツール結果の例
JSON
空のツール結果の例
空のツール結果の例
JSON
ドキュメントを含むツール結果の例
ドキュメントを含むツール結果の例
JSON
サーバーツールからの結果の処理
Claude はツールを内部で実行し、追加のユーザーインタラクションを必要とせずに結果を応答に直接組み込みます。他のAPIとの違いツール使用を分離したり、
tool
や function
などの特別な役割を使用する API とは異なり、Anthropic の API はツールを user
と assistant
メッセージ構造に直接統合します。メッセージには text
、image
、tool_use
、tool_result
ブロックの配列が含まれます。user
メッセージにはクライアントコンテンツと tool_result
が含まれ、assistant
メッセージには AI 生成コンテンツと tool_use
が含まれます。max_tokens
停止理由の処理
Claude の応答が max_tokens
制限に達したために切り捨てられ、切り捨てられた応答に不完全なツール使用ブロックが含まれている場合、完全なツール使用を取得するために、より高い max_tokens
値でリクエストを再試行する必要があります。
pause_turn
停止理由の処理
ウェブ検索などのサーバーツールを使用する場合、API は pause_turn
停止理由を返すことがあり、これは API が長時間実行されるターンを一時停止したことを示します。
pause_turn
停止理由を処理する方法は次のとおりです:
pause_turn
を処理する場合:
- 会話を続行する:一時停止された応答をそのまま後続のリクエストに渡して、Claude にターンを続行させます
- 必要に応じて変更する:会話を中断またはリダイレクトしたい場合は、続行前にオプションでコンテンツを変更できます
- ツール状態を保持する:機能を維持するために、継続リクエストに同じツールを含めます
エラーのトラブルシューティング
Claude でツールを使用する際に発生する可能性のあるエラーにはいくつかの種類があります:ツール実行エラー
ツール実行エラー
ツール自体が実行中にエラーをスローした場合(例:天気データを取得する際のネットワークエラー)、Claude はこのエラーをユーザーへの応答に組み込みます。例:「申し訳ございませんが、天気サービス API が利用できないため、現在の天気を取得できませんでした。後でもう一度お試しください。」
"is_error": true
と共に content
でエラーメッセージを返すことができます:JSON
無効なツール名
無効なツール名
Claude のツール使用の試行が無効な場合(例:必須パラメータの欠如)、通常は Claude がツールを正しく使用するための十分な情報がなかったことを意味します。開発中の最善の策は、ツール定義でより詳細な ツールリクエストが無効または不足しているパラメータがある場合、Claude はユーザーに謝罪する前に修正を加えて2〜3回再試行します。
description
値を使用してリクエストを再試行することです。ただし、エラーを示す tool_result
で会話を前進させることもでき、Claude は不足している情報を埋めてツールを再度使用しようとします:JSON
<search_quality_reflection> タグ
<search_quality_reflection> タグ
Claude が <search_quality_reflection> タグで検索品質を反映することを防ぐには、プロンプトに「返された検索結果の品質について応答で反映しないでください」を追加してください。
サーバーツールエラー
サーバーツールエラー
サーバーツールがエラーに遭遇した場合(例:ウェブ検索でのネットワーク問題)、Claude はこれらのエラーを透過的に処理し、ユーザーに代替応答または説明を提供しようとします。クライアントツールとは異なり、サーバーツールの
is_error
結果を処理する必要はありません。ウェブ検索に関して、可能なエラーコードには以下が含まれます:too_many_requests
:レート制限を超過invalid_input
:無効な検索クエリパラメータmax_uses_exceeded
:最大ウェブ検索ツール使用回数を超過query_too_long
:クエリが最大長を超過unavailable
:内部エラーが発生
並列ツール呼び出しが機能しない
並列ツール呼び出しが機能しない
期待される場合に Claude が並列ツール呼び出しを行わない場合は、これらの一般的な問題を確認してください:1. 不正なツール結果フォーマット最も一般的な問題は、会話履歴でツール結果を不正にフォーマットすることです。これは Claude に並列呼び出しを避けるように「教える」ことになります。特に並列ツール使用について:その他のフォーマット規則については、上記の一般的なフォーマット要件を参照してください。2. 弱いプロンプトデフォルトのプロンプトでは十分でない場合があります。より強い言葉を使用してください:3. 並列ツール使用の測定並列ツール呼び出しが機能していることを確認するには:4. モデル固有の動作
- ❌ 間違い:各ツール結果に対して別々のユーザーメッセージを送信
- ✅ 正しい:すべてのツール結果が単一のユーザーメッセージに含まれている必要があります
- Claude Opus 4.1、Opus 4、Sonnet 4:最小限のプロンプトで並列ツール使用に優れています
- Claude Sonnet 3.7:より強いプロンプトまたはトークン効率的ツール使用が必要な場合があります
- Claude Haiku:明示的なプロンプトなしでは並列ツールを使用する可能性が低いです