AIエージェントのツール使用:関数呼び出し、スキーマ、安全な実行
AIエージェントのツール使用とは、LLMが外部関数 — ウェブ検索、データベースクエリ、API呼び出し、ファイル操作 — の実行を要求する仕組みであり、構造化されたツール呼び出しJSONを出力し、ランタイムがそれをインターセプトしてJSONスキーマに対して検証し、ツール結果を返す前に実行する。LLMは何も実行しない。要求するだけである。ランタイムは実行前にスキーマ検証、ACLチェック、ステップバジェットを適用する。tau-bench(2025年)は、引数構築エラーがツール使用の最も多い失敗モードであることを示している。
AIエージェントのツール使用とは、大規模言語モデルが外部関数 — ウェブ検索、データベースクエリ、API呼び出し、ファイル操作、またはカスタムビジネスロジック — の実行を要求する仕組みであり、出力に構造化されたツール呼び出しを出力し、ランタイムがそれをインターセプトしてJSONスキーマ定義に対して検証し、実行して次のコンテキストターンでツール結果として返す。
ツール呼び出しの仕組み:リクエスト-実行-リターンループ
ツール呼び出しのライフサイクル
すべてのツール呼び出しは、フレームワークやプロバイダーに関わらず同じ5ステップのループに従う:
- コンテキスト設定 — エージェントはタスクと利用可能なツールのリストを受け取る。各ツールは名前、自然言語による説明、パラメータのJSONスキーマ定義で記述されている。
- LLMの決定 — モデルは出力にツール呼び出しブロックを出力する:宣言されたスキーマに一致する関数名とJSONオブジェクトの引数。
- ランタイムのインターセプト — フレームワークは実行前にツール呼び出しをインターセプトする。引数はスキーマに対して検証される。エージェントのACLが確認される:このエージェントはこのツールを呼び出す権限があるか?
- 実行 — 検証と権限チェックが通過した場合、ランタイムは関数を実行し出力を収集する。
- コンテキスト注入 — ツール結果はツール結果ターンとして会話コンテキストに注入される。LLMはこの豊富なコンテキストから推論を継続する。
重要なアーキテクチャ上の事実:LLMは何も実行しない。要求するだけである。ファイルの書き込み、APIの呼び出し、メールの送信など、すべての安全でないアクションはランタイムによって制御される。
プロバイダーのフォーマットの違い:OpenAI vs Anthropic vs Google
3つの主要なLLMプロバイダーはネイティブでツール使用をサポートしているが、JSONフォーマットが異なる:
OpenAI(openai/openai-python、30,941スター、Apache-2.0):ツール定義はJSONスキーマオブジェクトの配列としてtoolsパラメータに入る。モデルはアシスタントメッセージのtool_callsフィールドにツール呼び出しを返す。クライアントはrole: "tool"のメッセージとしてツール結果を送り返す。Responses API(2025年3月)はサーバーサイドで実行される組み込みツール(web_search、file_search、computer_use)を追加した。
Anthropic(anthropic-sdk-python、3,595スター、MIT):ツール定義はトップレベルのtoolsパラメータに入る。モデルはアシスタントターン内にtool_useコンテンツブロックを返す。クライアントはこれらのブロックを解析し、次のヒューマンターンでtool_resultコンテンツブロックを返す必要がある。
Google Gemini:ツール定義はtoolsパラメータ内のfunctionDeclarationsを使用する。モデルはfunctionCallパーツを返す;クライアントはfunctionResponseパーツを送る。GeminiはANYモード(モデルに常にツールを呼び出させる)とAUTOモードのtool_configをサポートする。
フォーマットは意味的に等価だが、構文的に十分に異なるため、1つのプロバイダーの規則をハードコードするとモデルを変更したときに機能しなくなる。
実際にツールを実行するのは誰か(そしてなぜセキュリティに重要か)
LLMはツールを実行できない。要求することしかできない。ランタイムがすべてのツール実行前にACLゲートを適用する場合、どのようなLLM出力も権限チェックをバイパスできない。モデルはどのような引数でもdelete_all_records()を要求できるが、エージェントの権限マトリックスにそのツールが含まれていない場合、ランタイムは実行前にリクエストを拒否する。
LLMが正しく使用するツールスキーマの定義
tau-bench(ServiceNow Research、2025年)はGPT-4oがリテールのツール使用タスクで44% pass@1を記録したことを測定した。最大の失敗カテゴリはツールの選択ではなく — モデルは正しいツールを選んでいた — 引数の構築だった。スキーマの品質が信頼性の主要なレバーである。
ツール定義のためのJSONスキーマの解剖
最小限の有効なツールスキーマには4つのフィールドが必要である:
{
"name": "search_web",
"description": "最新情報を求めて公開ウェブを検索する。タスクがトレーニングカットオフ後のファクト、リアルタイムデータ、またはトレーニングデータにないソースを必要とするときに使用する。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "検索クエリ。具体的で的を絞った用語を使用する。完全な文章ではない。"
},
"max_results": {
"type": "integer",
"description": "返す結果の最大数。デフォルト5、最大20。",
"default": 5
}
},
"required": ["query"]
}
}
required配列が重要:requiredにないパラメータはオプションである。必須パラメータが頻繁に省略される場合、スキーマの説明に問題があることを示している。
引数エラーを減らす説明の書き方
引数構築精度を向上させるツール説明の3つのルール:
- 動詞-名詞のペアで命名する:
search_web、create_ticket、read_file。類似ツール間の曖昧さを回避する。 - 説明で明確化する:2つのツールが似ている場合、それぞれをいつ使用するかを明示する。
- 例を使ってパラメータを説明する:
"検索クエリ。例:'LangGraph v0.2 並列ツール呼び出し'"は精度で"クエリ文字列"を上回る。
よくあるスキーマの間違いとその修正方法
| 間違い | 効果 | 修正 |
|---|---|---|
カテゴリ値に無制約な"type": "string" | モデルが無効な値を作り出す | "enum": ["option_a", "option_b"]を使用する |
パラメータのdescriptionが欠如 | モデルが引数のセマンティクスを推測する | 例を含む明示的な説明を書く |
すべてのパラメータがrequiredにある | オプションフィールドが不明なときモデルが呼び出しを拒否する | 本当に必須なパラメータのみリストする |
曖昧なツール名(process、handle) | モデルが類似ツールを区別できない | 動詞-名詞を使う:submit_form、parse_date |
required配列がない | JSONスキーマが無効 | 空([])でも常にrequiredを含める |
厳密モード:正確なスキーマ遵守の適用
OpenAIの構造化出力の厳密モード(ツール定義に"strict": true)は、モデルの出力JSONが宣言されたスキーマに正確に一致することを保証し、引数構築エラーのカテゴリ全体を排除する。
並列および順次ツール呼び出し
並列ツール呼び出しを使う場面
OpenAIのResponses API(2025年3月)は並列ツール呼び出しをデフォルトにした。1回のLLMターンで、モデルは複数のツール実行を同時に要求できる。独立したツールの場合、並列ディスパッチはN回の順次ターンから1回の並行バッチにラウンドトリップを削減する。
例:リサーチエージェントが現在の株価、最近のニュース、企業のSEC提出書類が必要。3つすべてが独立している。順次:3つのLLMターン x 10秒 = 30秒。並列:1つのLLMターン + max(ツールレイテンシ)約10秒。
前提条件:ツールは真に独立していなければならない。ツールBがツールAの出力を引数として必要とする場合、順次でなければならない。
依存操作のための順次ツール呼び出し
ツールチェーニング — 1つのツールの出力を次のツールの入力として使用する — は順次実行を必要とする。パターン:search_web(クエリ) → fetch_page(検索結果のURL) → extract_data(ページコンテンツ) → summarize(抽出データ)。
ステートフルリソースとの並行リスク
ステートフルリソースへの並列ツール呼び出しはロック保証が必要である。ルール:ツールが読み取り専用または独立したリソースへの書き込みである場合、並列ディスパッチは安全である。
ツール出力の解析とエラー回復
ツール呼び出しは失敗する。外部APIが503を返す。データベースクエリがタイムアウトする。よく設計されたツール使用実装は、回復可能なエラーに対して人間の介入なしに失敗を処理する。
ツール出力の検証
HTTP 200を返すツールは、正しく有用な結果を返すツールと同じではない。エージェントのコンテキストに注入する前に、期待されるスキーマに対して出力を検証する。
リトライ戦略:いつどのように再呼び出しするか
異なる失敗モードのための3つのリトライパターン:
- 一時的失敗のリトライ(ネットワークタイムアウト、レートリミット):短いバックオフ後に同じ引数で同じツールを再呼び出しする。
- 引数明確化リトライ:引数が拒否された理由を説明する構造化エラーをLLMに返す。
- フォールバックツール:ツールAがN回のリトライ後に失敗した場合、同等の機能を持つツールBにルーティングする。
ツール失敗をオーケストレーターに報告する
回復不可能なエラーはオーケストレーターに報告されなければならない。マルチエージェントパイプラインの場合、オーケストレーターは構造化された失敗シグナルが必要である。AIエージェントオーケストレーションパターンでは、これがエスカレーションパスである。
ツール権限スコーピングとセキュリティ
最小権限ツール割り当て
各エージェントはその特定のタスクが必要とするツールのみを持つべきである。プロンプトインジェクションに成功したエージェントの爆発半径は、許可されたツールセットによって制限される。OWASP LLM Top 10 v1.1(2025年)はLLMアプリケーションの最大リスクとしてプロンプトインジェクション(LLM01)を挙げている。
実行前の入力検証
ツール呼び出し引数を2つの層で検証する:スキーマ検証(引数が宣言された型と制約に一致するか)とセマンティック検証(引数はこの実行コンテキストに意味をなすか)。fetch_pageツールはSSRFを防ぐためにfile://またはlocalhostURLの引数を拒否すべきである。
ツールレベルの攻撃ベクターの完全な分類については、AIエージェントセキュリティ脅威モデルを参照。
不可逆アクション:ヒューマンインザループゲート
不可逆な副作用を持つツール呼び出し — メールの送信、レコードの削除、資金の転送、コンテンツの公開 — は実行前に明示的なヒューマン確認ゲートまたは冪等性チェックが必要である。
OpenLegionの見解:ツールレジストリとACLゲート
すべての主要なLLMプロバイダーは異なるツール呼び出しAPIを持っている。正しい抽象化:ツールを一度定義し、フレームワークが呼び出し時に正しいプロバイダーの規則に変換する。
OpenLegionのツールレジストリはこの抽象化を実装している。search_webを一度定義する。メッシュは設定されたモデルに応じてOpenAI tools、Anthropic tools、またはGemini functionDeclarationsに変換する。ACLゲートは非オプションである。すべてのツール呼び出し — 組み込み、MCP、またはカスタム — は実行前にエージェントごとの権限マトリックスを通過する。
| 次元 | OpenLegion | LangChain / LangGraph | OpenAI Agents SDK | CrewAI | Anthropic直接 |
|---|---|---|---|---|---|
| ツール定義フォーマット | 単一スキーマ、プロバイダー変換 | プロバイダー固有のラッパーが必要 | OpenAIフォーマットのみ | CrewAIツールデコレーター | Anthropic tool_useフォーマットのみ |
| プロバイダー抽象化 | あり — GPT-4o、Claude、Gemini統一 | 部分的 — LangChain統合経由 | なし — OpenAIモデルのみ | 部分的 | なし — Anthropicのみ |
| ACL適用 | エージェントごとの権限マトリックス、構造的 | 組み込みなし | 組み込みなし | 組み込みなし | 組み込みなし |
| 並列ツール呼び出し | サポート | サポート(プロバイダー依存) | あり — Responses APIのデフォルト | サポート | あり — Claudeがサポート |
| 組み込みツール | ブラウザ、ファイル、HTTP、シェル、画像生成 | LangChainコミュニティツール経由 | web_search、file_search、computer_use | 組み込みなし | 組み込みなし |
| MCP統合 | ネイティブ — 同じACL/バジェットパイプライン | LangChain MCPアダプター経由 | 実験的 | ネイティブでない | ネイティブでない |
MCPの仕様、サーバーアーキテクチャ、サーバーごとの権限要件については、Model Context Protocolガイドを参照。
組み込みツール vs MCPツール vs カスタムツール
組み込みランタイムツール
組み込みツールはランタイムによって事前強化されている:ブラウザ自動化、ファイル操作、HTTPリクエスト、シェルコマンド、画像生成。最初に組み込みツールを使用する。
MCPツールサーバー
MCPツールはstdioまたはHTTP経由のJSON-RPCでツールを公開するModel Context Protocolサーバーによって提供される。MCPツールは明示的なサンドボックスとサーバーごとの権限スコーピングが必要である。
カスタムツール登録
カスタムツールはエージェントのツールレジストリに書いて登録するPython(またはTypeScript)関数である。完全な柔軟性を提供する;トレードオフは検証、エラー処理、冪等性、セキュリティコントロールを自分で所有することである。
よくある質問
AIエージェントのツール使用とは何ですか?
AIエージェントのツール使用とは、大規模言語モデルが外部関数 — ウェブ検索、API呼び出し、データベースクエリ、ファイル操作 — の実行を要求する仕組みであり、ランタイムがインターセプト、検証、実行する構造化されたツール呼び出しJSONを出力する。LLMは直接何も実行しない;何を呼び出すべきか、どんな引数を使うかを説明するだけである。
AIエージェントにおける関数呼び出しはどのように機能しますか?
関数呼び出しはリクエスト-実行-リターンループで機能する:エージェントはタスクと利用可能なツールのリストを受け取る;LLMは関数を命名し引数を提供するツール呼び出しを出力する;ランタイムはそれらの引数を検証し関数を実行してコンテキストにツール結果として結果を注入する。
AIエージェントのための良いツールスキーマとは何ですか?
良いツールスキーマは動詞-名詞の名前(search_web、create_ticket)、いつ使用するかを明確に示す説明、可能な限り列挙型を持つ強く型付けされたパラメータ、必須パラメータをリストするrequired配列を使用する。tau-bench(2025年)は引数の不正な構築が最も一般的な失敗モードであることを示している。
並列ツール呼び出しとは何ですか?いつ使うべきですか?
並列ツール呼び出しはエージェントが1回のLLMターンで複数のツール実行を要求できるようにし、ランタイムが並行してディスパッチする。ツールが独立している場合 — 出力が互いに依存せず、共有ステートフルリソースに書き込まない場合 — に並列呼び出しを使用する。
AIエージェントでのツール呼び出しループをどう防ぎますか?
ツール呼び出しループは、エージェントが最終的な回答に収束せずにツールを呼び出し続けるときに発生する。唯一の信頼できる防止策は、インフラストラクチャレベルで適用されるステップバジェット:オーケストレーターによって適用されるエージェント実行ごとのツール呼び出しの厳密な最大値。
AIエージェントのツール使用のセキュリティリスクは何ですか?
主要なリスクはツール結果インジェクション:エージェントがエージェントの動作をリダイレクトできる攻撃者制御コンテンツを返すツールを呼び出すとき。OWASP LLM Top 10 v1.1(2025年)はLLMアプリケーションの最大リスクとしてプロンプトインジェクションをリストしている。緩和策には出力サニタイズ、最小権限ツール割り当て、不可逆アクションのためのヒューマンインザループゲートが含まれる。
組み込みツール、MCPツール、カスタムツールの違いは何ですか?
組み込みツールはACL適用がすでに適用されているエージェントランタイムによって提供される。MCPツールはJSON-RPCで外部機能を公開するModel Context Protocolサーバーによって提供される;サンドボックスとサーバーごとの権限スコーピングが必要。カスタムツールは書いて登録する関数で、完全な柔軟性があるが検証とセキュリティの責任は自分にある。
異なるLLMプロバイダーはツール使用をどのように実装しますか?
OpenAIはtoolsパラメータ、アシスタント応答のtool_calls、role: "tool"結果メッセージでツール使用を実装する。Anthropicは次のヒューマンターンでtool_resultブロックとともにtool_useコンテンツブロックを使用する。Google Geminiは応答にfunctionCallパーツ、フォローアップターンにfunctionResponseパーツとともにfunctionDeclarationsを使用する。3つのフォーマットは意味的に等価だが構文的に異なる。
ツールを一度定義し、どこでも安全に実行する
tau-bench(2025年)はGPT-4oをツール使用タスクで44% pass@1に置き、引数構築を支配的な失敗カテゴリとして挙げる。動詞-名詞の名前、型付き列挙型、パラメータ例を持つ正確なスキーマはそのギャップの大部分を埋める。
エージェントワークフローパターンとAIエージェント評価ベンチマークは、このページがカバーする基礎を拡張する。