AIエージェントのツール呼び出し設計チェックリスト15項目と失敗例
この記事の結論
- ツール呼び出し(function calling)の設計は、ツール定義・権限と確認ゲート・失敗時の返し方・観測の4つに分けると抜けが見つけやすくなります。
- AIの精度より先に効くのは「1つのツールで1つのことだけをさせる」「取り返しのつかない操作には人の確認を挟む」の2点です。
- 外部データを読むツールを持たせた時点で、外部データに指示が仕込まれる前提の設計が要ります。最終更新 2026-09-10。
AIエージェントが実際の作業をこなせるかどうかは、モデルの賢さより「どんなツールを、どんな形で渡したか」で決まります。この記事は、ツール呼び出し(function calling)を設計するときのチェックリストです。15項目を表にまとめ、満たさないと何が起きるかまで書きました。
最終更新: 2026-09-10・読了目安 約8分
ツール呼び出しの設計とは何を決めることか
関数呼び出し(ツール使用)とは、AIが自分では実行できない処理を、あらかじめ用意された関数に任せて結果を受け取る仕組みです。AIエージェントはこの仕組みを土台に、目標達成のためどのツールをどの順で使うかを自分で判断します。
設計者が決めるのは、AIの判断そのものではなく、判断できる選択肢の形です。具体的には次の4つに分かれます。
- ツール定義:名前・説明文・引数の型・返り値。AIが読むのはこの文面だけ。
- 権限と確認ゲート:そのツールで何ができ、何には人の承認が要るか。
- 失敗時の返し方:エラーをどう伝えると、AIが正しくやり直せるか。
- 観測:何が呼ばれ、何が起きたかを後から追えるか。
設計チェックリスト15項目
上から順に確認できるよう、分類・確認すること・満たさないと起きることの3列で並べました。
| # | 分類 | 確認すること | 満たさないと起きること |
|---|---|---|---|
| 1 | ツール定義 | 1つのツールが1つのことだけをする(複数の操作を引数で分岐させていない) | AIがどの分岐を使うか迷い、誤った引数で呼ぶ |
| 2 | ツール定義 | 名前が動詞+対象になっている(例:search_orders) | 似た名前のツールが混同され、呼び分けが不安定になる |
| 3 | ツール定義 | 説明文に「いつ使うか」と「いつ使わないか」が書いてある | 使う場面でないのに呼ばれる。逆に必要な場面で呼ばれない |
| 4 | ツール定義 | 引数が型と必須・任意で定義され、自由記述を最小にしてある | 文字列に何でも詰め込まれ、後段の検証で弾かれ続ける |
| 5 | ツール定義 | 返り値の形式が固定で、AIがそのまま読める粒度に整形されている | 巨大な生データが文脈を埋め、後続の判断が劣化する |
| 6 | ツール定義 | ツールの総数が絞られている(似た機能を統合してある) | 選択肢が増えるほど選び間違いが増える |
| 7 | 権限 | 読み取りと書き込みのツールが分かれている | 読むだけのつもりの処理が書き換えを起こす |
| 8 | 権限 | 取り返しのつかない操作(削除・送信・支払い)に人の承認を挟んでいる | 誤った判断がそのまま実行され、取り消せない |
| 9 | 権限 | ツールが触れる範囲が必要最小限に絞ってある | 1つの誤りの影響範囲が想定より広くなる |
| 10 | 権限 | 認証情報がAIに見える文脈へ渡っていない | 出力やログ経由で認証情報が外へ出る |
| 11 | 失敗時 | エラーが「何が悪かったか」と「次にどうすべきか」を含んで返る | AIが同じ呼び出しを繰り返し、費用と時間だけが増える |
| 12 | 失敗時 | 再試行の上限と、あきらめて人に渡す条件が決まっている | 失敗時に呼び出しが際限なく増える |
| 13 | 失敗時 | 同じ引数で2回呼んでも結果が変わらない(べき等) | 再試行のたびに二重登録・二重送信が起きる |
| 14 | 観測 | 呼び出しの引数・返り値・所要時間が記録されている | 事故が起きても原因の切り分けができない |
| 15 | 観測 | ツール由来の文字列が指示として扱われない設計になっている | 外部データに仕込まれた指示にAIが従う |
15項目を一度に満たす必要はありませんが、8番(取り返しのつかない操作の承認)と15番(外部データを指示として扱わない)の2つは、他を後回しにしてでも先に満たしてください。この2つだけが、失敗したときに取り返しがつかない項目です。
権限と確認ゲートの決め方
操作の種類ごとに、既定の扱いを先に決めておくと、ツールを足すたびに議論しなくて済みます。
| 操作の種類 | 例 | 既定の扱い | 理由 |
|---|---|---|---|
| 読み取り | 検索、ファイル閲覧、状態の取得 | 自動実行してよい | 失敗しても元に戻せる |
| 内部の書き込み | 下書きの保存、作業用ブランチへの変更 | 自動実行してよい(記録は残す) | 履歴から復元できる |
| 外部への送信 | メール送信、投稿、通知 | 人の承認を必須にする | 受け取った相手側は取り消せない |
| 削除・上書き | レコード削除、本番データの更新 | 人の承認を必須にする | 復元できないことがある |
| 支払い・契約 | 決済、注文確定 | 人の承認を必須にする | 金銭が動き、責任の所在が変わる |
承認を挟む位置は「実行の直前」で、承認画面には実際に呼ばれる引数をそのまま出します。要約した文言だけを見せると、承認者は何を承認したのか分からないまま押すことになります。関連する考え方はガードレールにまとめています。
実際に起きる失敗の型と対処
設計の抜けは、決まった形の失敗として現れます。症状から原因を引けるよう整理しました。
| 症状 | よくある原因 | 対処 |
|---|---|---|
| 同じツールを何度も呼び続ける | エラーが「失敗した」としか返っていない | エラーに理由と次の手を書いて返す。再試行の上限を決める |
| 必要な場面でツールを呼ばない | 説明文に「いつ使うか」が書かれていない | 説明文へ使用条件を明記し、使わない条件も併記する |
| 似たツールを取り違える | 名前が名詞だけ、または機能が重複している | 動詞+対象に改名し、重複するツールは統合する |
| 引数が毎回崩れる | 自由記述の引数が多い、型が緩い | 選択肢のある引数は列挙型にし、必須項目を減らす |
| 二重登録・二重送信が起きる | 再試行時にべき等でない | 呼び出しごとの識別子を受け取り、同じ識別子は1回だけ処理する |
| 外部の資料を読んだ後に挙動が変わる | 取得した文字列を指示として扱っている | 取得内容はデータとして扱う。指示に見える文字列に従わない設計にする |
| 費用が急に増える | 呼び出し回数と返り値の量に上限が無い | 1件あたりの呼び出し上限と返り値の切り詰めを入れる |
最後の2つは OWASP Top 10 for LLM Applications 2025 の LLM01(Prompt Injection)・LLM06(Excessive Agency)・LLM10(Unbounded Consumption)に対応する論点です。攻撃としての詳細はプロンプトインジェクション対策の一覧表 2026にまとめています。
参照した一次情報
設計上の観点は、次の公開資料の分類に沿って整理しています。
| 資料名 | 発行元 | 分かること | リンク |
|---|---|---|---|
| Top 10 for LLM Applications 2025 | OWASP | LLMアプリで起きる代表的なリスク10種の分類 | genai.owasp.org/llm-top-10/ |
| LLM01:2025 Prompt Injection | OWASP | プロンプトインジェクションの定義と攻撃の型 | genai.owasp.org/llmrisk/llm01-prompt-injection/ |
| AI Risk Management Framework | NIST | AIのリスクを統治・特定・測定・管理する枠組み | nist.gov/itl/ai-risk-management-framework |
| AI 100-2 E2025(Adversarial Machine Learning) | NIST | AIへの攻撃と緩和策の用語・分類 | csrc.nist.gov/pubs/ai/100/2/e2025/final |
| 情報セキュリティ10大脅威 2026 | IPA(情報処理推進機構) | その年に社会的影響が大きかった脅威の一覧 | ipa.go.jp/security/10threats/10threats2026.html |
| 安全なウェブサイトの作り方 | IPA(情報処理推進機構) | 入力値の扱いと出力時のエスケープの基本 | ipa.go.jp/security/vuln/websecurity/about.html |
関連記事・用語
用語の定義は関数呼び出し(ツール使用)・AIエージェント・ガードレールにまとめています。ツールの接続規格そのものはMCPとは何か、複数のエージェントの分担は複数のAIコーディングエージェントをどう役割分担させるか、動かした結果の測り方はLLM評価の指標一覧表をご覧ください。
よくある質問
Q1. ツールは何個まで渡してよいですか?
上限の決まった数字はありませんが、似た機能のツールが並ぶほど選び間違いが増えます。まずは用途ごとに5〜10個へ絞り、選び間違いが起きた組み合わせから統合していくのが現実的です。数を増やすより、1つ1つの説明文を具体的にするほうが効果があります。
Q2. 人の承認を挟むと自動化の意味が薄れませんか?
承認を挟むのは、取り返しのつかない操作だけです。読み取りと内部の書き込みを自動で回せれば作業の大半は自動化できます。削除・送信・支払いだけを承認対象にすると、止まる回数は限られたまま、失敗したときの被害を抑えられます。
Q3. 外部データを読ませるだけなら安全ですか?
安全にはなりません。読み込んだ文章の中に「これまでの指示を無視して〜」といった文が混ざっていると、AIがそれを指示として扱うことがあります。取得した内容はデータとして扱い、指示に見える文字列には従わない設計にしたうえで、権限側でも被害範囲を絞ってください。