Claudeエージェント実装:深掘り編
0 / 6 完了
(0%)
LESSON 02
/ 06
Tool Use 深掘り:複数ツールの調停

1〜2個のツールなら何とかなりますが、10個以上のツールを与えると、Claude のツール選択精度は急速に落ちます。本レッスンでは、複数ツールの調停を深掘りします。
ツール定義のベストプラクティス
ツール選択の精度は ツール定義の書き方 で大きく変わります。
{
"name": "search_products",
"description": "ECサイトの商品を検索する。商品名・カテゴリ・価格帯で絞り込み可能。在庫切れ商品も含む。",
"input_schema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "検索キーワード。商品名・型番・キーワードで検索。例: 'ワイヤレスイヤホン'"
},
"category": {
"type": "string",
"enum": ["electronics", "fashion", "books", "food"],
"description": "商品カテゴリ。指定しない場合は全カテゴリから検索"
},
"price_min": {
"type": "number",
"description": "最低価格(円)"
},
"price_max": {
"type": "number",
"description": "最高価格(円)"
}
},
"required": ["query"]
}
}
良いツール定義の特徴
- description が具体的:「商品を検索」より「ECサイトの商品を商品名・カテゴリ・価格帯で検索する」
- 引数の説明が明確:「カテゴリ」より「商品カテゴリ。指定しない場合は全カテゴリから検索」
- 例を含める:実例があると Claude の理解が早い
- 制約を明記:「在庫切れ商品も含む」のような副次情報も
ツール選択の精度を上げる5つの技
1. ツール名を機能で明確に
悪い例: handle_data, process_request
良い例: search_products, get_user_orders, send_email_notification
2. システムプロンプトでツール選択ガイダンス
システムプロンプト:
あなたは ECサイトのカスタマーサポート支援エージェントです。
【ツール選択の指針】
- ユーザーが商品を探している → search_products
- 注文履歴の確認 → get_user_orders
- 返品手続き → start_return_process
- 配送状況の確認 → check_shipping_status
【複数ツール使用】
- 商品レビューの照合 → search_products → get_product_reviews
- 返品理由の保存 → start_return_process → log_return_reason
【判断に迷う場合】
- 確信が持てなければユーザーに確認質問
- 個人情報が必要な処理は authenticate_user を先に呼ぶ
3. ツールのカテゴリ分け
10個以上のツールがあるなら、カテゴリで分類 し、システムプロンプトで提示。
【利用可能なツール】
## 商品検索系
- search_products: 商品検索
- get_product_details: 商品詳細
- get_product_reviews: レビュー
## 注文系
- get_user_orders: 注文履歴
- check_shipping_status: 配送状況
- cancel_order: キャンセル
## サポート系
- start_return_process: 返品開始
- escalate_to_human: 人間担当者へエスカレ
- send_email_notification: メール通知
4. Few-shot examples で示す
システムプロンプトに具体例を:
【ツール使用の例】
ユーザー: 「先週注文したワイヤレスイヤホンの配送状況を教えて」
判断: 注文履歴 + 配送状況の組み合わせ
1. get_user_orders(filter="last_week", category="electronics")
2. 該当注文を特定
3. check_shipping_status(order_id="...")
ユーザー: 「ノイキャン付きで2万円以下のヘッドホン教えて」
判断: 商品検索のみで完結
1. search_products(query="ノイズキャンセリング ヘッドホン", price_max=20000)
5. 並列ツール呼び出しの活用
独立した複数のツールを 並列実行 させることで、レイテンシを大幅短縮。
# Claude API の parallel_tool_use を活用
# プロンプトで明示
システムプロンプト:
独立したツール呼び出しは並列で実行してください。
例:商品Aと商品Bの詳細を比較する場合、
get_product_details(A) と get_product_details(B) は同時実行可能。
ツール間の依存関係の扱い
「Aの結果を使ってBを呼ぶ」という依存関係は、2回のターン に分けるのが基本。
Turn 1: search_products → 商品IDリスト取得
Turn 2: 取得したIDで get_product_details を並列呼び出し
ツール選択ミスの検知と修正
# 実行後の検証ステップを必須化
ツール実行後の評価プロンプト:
ツール呼び出し: {tool_name}({args})
結果: {result}
【評価】
1. このツール呼び出しで意図した情報が得られたか?
2. 引数が適切だったか(typo・範囲外の値はないか)?
3. もし不適切なら、次に試すべきツール・引数は?
評価結果を踏まえて、次のアクションを決定。
ツール定義のメンテナンス
| 状況 | 対応 |
|---|---|
| 同じツールが頻繁に誤呼び出しされる | description・引数説明を改善 |
| 使われていないツールがある | description が不明瞭、または不要 |
| 新しい機能追加 | 既存ツールへの引数追加か新ツール作成か判断 |
| ツールの結果スキーマが変わった | description で破壊的変更を明記 |
このレッスンのまとめ
ツール選択の精度は「ツール定義の質」「システムプロンプトの指針」「Few-shot例」「並列実行」の4要素で決まります。次のレッスンでは、メモリ・状態管理を学びます。
よくある質問
この記事に関連する質問と答えをまとめました。
Q.ツール定義の書き方のコツは?
A.
description を具体的に・引数説明を明確に・例を含める・制約を明記。これだけで Claude のツール選択精度が劇的に上がります。10ツール以上ならカテゴリ分類も追加。
Q.並列ツール実行はいつ使う?
A.
独立した複数のツール呼び出しがある時です。「商品Aと商品Bの詳細を比較」のような、依存関係のない処理は並列化でレイテンシが大幅短縮できます。