読み込み中
読み込み中

Claudeが選ぶツールを作成する

要約トランスクリプト

Claudeが間違ったツールを選んだときは、まずツールの定義を確認しましょう。この動画では、架空のエンジニアリングコンサルティング会社Meridianを例に見ていきます。Meridianはツール定義を書き直し、書き直す前と後で同じ30問を実行します。

この動画のデモは2026年9月に収録されました。使用したのはClaude Sonnet 5(claude-sonnet-5)です。新しいモデルでは結果が異なる場合があります。

ツールループが機能しているとして、次のようなことが起こったとします。

  • Claudeが間違ったツールを呼び出す。
  • 1つの事実を得るために3回のツール呼び出しを行う。
  • コード側がMEG-2026-0142を求めているのに0142を渡す。

Claudeはツールを実行する関数そのものを受け取ることはありません。Claudeが目にするのは、あなたが送る定義と、あなたが返す結果だけです。そのため、Claudeがツールを誤って使用したときは、まず定義を確認してください。

Meridianには、社員がプロジェクト、許認可、請求に関する質問をするための社内アシスタントがあります。ツール定義を書き直したことで、同じモデルのまま、30問のテストのスコアが14問から26問に上がりました。

Claudeがツールについて目にするもの

ツール定義とは、ツールが存在することをClaudeに伝えるJSONのブロックです。 これは各リクエストのtoolsリストで送信します。

以下は、Meridianのプロジェクトツールを書き直した定義です。これには4つの要素があります。

json
{
  "name": "lookup_project_status",
  "description": "Returns current facts about a single Meridian …",
  "input_schema": {
    "type": "object",
    "properties": {
      "project_id": {
        "type": "string",
        "description": "Full Meridian job number in the format MEG-YYYY-NNNN, e.g. MEG-2026-0142."
      },
      "fields": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": ["phase", "status", "lead", "hours", "deadline", "site", "client"]
        },
        "description": "Which fields to return. Omit to return everything."
      }
    },
    "required": ["project_id"]
  },
  "input_examples": [
    {"project_id": "MEG-2026-0142", "fields": ["phase", "status"]},
    {"project_id": "MEG-2025-0417", "fields": ["lead", "hours"]},
    {"project_id": "MEG-2024-0233"}
  ]
}
  • nameは、Claudeがそのツールを呼び出す際に使う名前です。
  • descriptionは、あなたが書きClaudeが読むプレーンテキストです。ここでは短く省略していますが、次のセクションで全文を示します。
  • input_schemaは、ツールのパラメータをJSON Schemaで列挙したもので、それぞれに名前、型、固有の説明があります。requiredはどのパラメータが必須かを示します。
  • input_examplesは任意です。これは、完全なジョブ番号のような、良い入力がどのようなものかをClaudeに示します。各例はinput_schemaに対して有効でなければならず、そうでない場合APIは400エラーを返します。

Claudeは、ユーザーのリクエストと各ツールの説明を読んで、ツール呼び出しを行うかどうかを判断します。

詳細な説明を書く

4つの要素のうち、説明文が最も重要な役割を果たします。

少なくとも3〜4文を目指し、ツールが複雑な場合はさらに増やしましょう。以下の4点をカバーしてください。

  1. そのツールが何をするか
  2. いつ使うべきか、いつ使うべきでないか
  3. 各パラメータが何を意味するか
  4. 何を返さないか

以下はMeridianの完全な説明です。

text
Returns current facts about a single Meridian project: phase,
schedule status, project lead, hours budgeted and consumed,
deadline, site city, and client. Use this only when the user asks
about a specific project by name or job number; if only a partial
number is given (e.g. 'the 0142 job'), normalize it to the full
MEG-YYYY-NNNN format before calling. Pass the fields parameter to
fetch just the fields the question needs instead of the whole
record. This tool does not return permit or invoicing information.
Use get_permit_status or get_billing_summary for those.
Meridianのツールの説明。4つの要素のうちどれをカバーしているかに応じて、各部分が色分けされている。

Meridianの説明文は、良い説明に必要な4つの要素すべてをカバーしています。

そのツールをいつ使うべきか、いつ使うべきでないかを述べておくと、Claudeが間違ったツールを呼び出すのを防ぐのに役立ちます。Meridianの説明文は、このツールを1つのプロジェクトに関する質問に限定しています。許認可と請求については、使用すべきツールの名前を明示しています。

重複するツールを1つにまとめる

複数のツールがほぼ同じ仕事をしている場合、どれほど優れた説明文を書いても、あまり助けにはなりません。

Meridianの最初のツールセットには、それぞれ1行の説明しかない薄いツールが6つありました。そのうち4つは、それぞれ1つのプロジェクトの事実を返すものでした。この4つは重複していたため、Claudeはある質問にどのツールが必要かを推測するしかありませんでした。

この解決策は、4つを1つのツールlookup_project_statusにまとめ、どの事実を返すかを指定するfieldsパラメータを持たせることです。 許認可と請求を扱う残りの2つは、異なる仕事をしているためそのまま残します。6つのツールが3つになります。

評価(eval)で変化を測定する

evalとは、正解がわかっている固定のテスト問題集であり、Claudeに対して実行され採点されるものです。 これにより、新しい定義のほうが優れているかどうかがわかります。

Meridianのevalは、Claudeが正しいツールを呼び出しているかどうかを確認します。社員が尋ねそうな30の質問があり、それぞれに正しいツール呼び出しがラベル付けされています。Meridianはこの30問を、claude-sonnet-5上で、ツールセットごとに1回ずつ、計2回実行しました。

ツールセットツールの数スコア
薄いツール614/30(47%)
統合済み326/30(87%)

問題のある部分だけを修正する

1つの失敗を修正するには、定義のうちどの部分に問題があるかを見極め、その部分だけを変更し、evalを再実行します。

Claudeの誤った挙動変更すべき部分対処法
間違ったツールを呼び出す、または質問に必要な以上のツールを呼び出す説明文各ツールが何をするか、いつ使うべきかを記述する。重複するツールは統合する。
間違った型や形式の値を渡すスキーマと例パラメータ自身のdescriptionに形式を明記する。input_examplesを追加する。

ツール使用のトラブルシューティングには、さらに多くの症状と対処法が記載されています。

重要なポイント

  • 少なくとも3〜4文の説明文を書き、そのツールを使うべきでない場合についても記述する。
  • 重複するツールは、パラメータを持つ1つのツールにまとめる。
  • evalで変化を測定する。
  • 1つの失敗を修正するには、問題のある部分だけを変更する。