ツール呼び出し:エージェントに行動させる

エージェントが外部関数を確実に選択・実行する仕組み——スキーマ設計、引数検証、失敗からの回復。

beginner · Claude / GPT-5 / Gemini
#ツール#関数呼び出し#エージェント

テキストから行動へ

言語モデル単体ではテキストしか生成できません。ツール呼び出しこそがエージェントにする仕組みです。モデルが構造化リクエストを出し、コードが実行し、結果がコンテキストに戻ります。

model → { name: "search_orders", args: { customer_id: "C1024" } }
コード → 実行 → 行を返す
model → 行を根拠に推論 → 回答

モデル自身は何も実行しません。実行するのはあなたのコード です。モデルが決めるのは「何を呼ぶか」と「どの引数か」だけです。

スキーマ設計がすべて

ツールの説明はプロンプトです。説明が弱いと、呼び方を誤るか、そもそも呼ばれません。

「何をするか」と「境界はどこか」を書きましょう。

悪い例:get_data — データを取得する。

良い例:get_order_history — 1 顧客の注文履歴を新しい順に返す。受け取るのは顧客 id で、メールや氏名ではない。最大 50 行。より古い履歴は before でページングする。

失敗の大部分は次の 3 規則で防げます:

  1. 列挙は全列挙。 day|week|month なら並べる。「期間」と書かない。
  2. 受け取らないものを明記。 「メールではなく顧客 id」で誤呼び出しの一群が消える。
  3. 制限を書く。 最大行数、既定の並び、ページ方向。API 契約は推測できません。

無限リトライを避ける失敗処理

失敗の理由は決まっています:不正な引数、一時エラー、権限不足。失敗は データとしてモデルに返し、ターンを殺す例外にしてはいけません。

{ ok: false, error: "顧客 ID C1024 が見つかりません", hint: "id は C1000-C9999 の形式です" }

モデルは説明的なエラーから自己修正できますが、スタックトレースからは何もできません。

無限ループ対策:ターンごとの呼び出し回数に上限を設け、同一の (名前, 引数) の繰り返しを検出します。同じ失敗が 2 回出たら停止して人に委ねます。

よくある失敗パターン

症状推定原因
ツールが呼ばれない説明にユーザーが使う語がない
毎回引数が違う列挙していない、単位が書いていない
複数ツールで選び間違える説明が重複。差を際立たせる
エラー時に無限リトライ例外として投げている
結果を捏造する戻り値をコンテキストに戻していない