← Claudeエージェント実装:深掘り編
LESSON 02 / 06

Tool Use 深掘り:複数ツールの調停

所要時間 15分 上級レベル

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の詳細を比較」のような、依存関係のない処理は並列化でレイテンシが大幅短縮できます。