ツール呼び出し(Function Calling)とは
LLMが外部の関数やAPIを「使いたい」と構造化データで指示する仕組み
ツール呼び出し(Function Calling / Tool Use)は、大規模言語モデル(LLM)が、天気の取得やデータベース検索、メール作成などの外部の機能を使えるようにする仕組みです。モデル自体が直接システムを操作するのではなく、「この関数を、この引数で呼んでほしい」という構造化されたデータを返し、それをアプリケーション側が実行する、という役割分担になっています。AIエージェントの土台となる重要な技術です。
基本の流れ
OpenAI と Anthropic の公式ドキュメントで説明されている流れは、おおむね共通しています。
- ツールを定義してリクエスト:アプリは、ユーザーの質問と一緒に「使えるツールの一覧」をモデルに送ります。各ツールには名前、説明、入力の形式(JSON Schema)を書きます。
- モデルがツール呼び出しを返す:モデルは必要だと判断すると、ツール名と引数をJSON形式で返します(Anthropic の API では
stop_reasonがtool_useになり、tool_useブロックが返されます)。 - アプリが実行:アプリ側のコードが実際に関数やAPIを実行します。
- 結果を返す:実行結果をモデルに送り返します(Anthropic では
tool_result、OpenAI の Responses API ではfunction_call_output)。 - 最終回答:モデルは結果を踏まえて回答を作るか、さらに別のツールを呼びます。
ツール定義の例(イメージ)
名前: get_weather
説明: 指定した都市の現在の天気を取得する
入力: { "location": 文字列(例:「東京都渋谷区」)}ユーザーが「渋谷の天気は?」と聞くと、モデルは get_weather を {"location": "東京都渋谷区"} で呼ぶよう返し、アプリがお天気APIに問い合わせます。
良いツール定義のコツ
- 説明文を丁寧に:いつ使うべきか、何が返るかを具体的に書くと、モデルが正しく選びやすくなります。
- 選択肢は列挙型(enum)で:「low / medium / high」など値が決まっているものは列挙型にすると、誤った値を防げます。
- ツールを増やしすぎない:OpenAI のガイドでは、ターン開始時に使えるツールは20個程度未満に抑えることが推奨されています。
- 厳密モード(strict):両社とも、出力を定義したスキーマに確実に一致させる「strict」設定を用意しています。
クライアントツールとサーバーツール
Anthropic のドキュメントでは、アプリ側で実行する「クライアントツール」と、Web検索やコード実行のように提供元のインフラで実行される「サーバーツール」を区別しています。サーバーツールは実行処理を自分で書く必要がない一方、利用量に応じた追加料金がかかる場合があります。
MCPとの関係
複数のAIアプリで同じツールを使い回したい場合は、ツールの提供方法を標準化した MCP を使う方法があります。ツール呼び出しは「モデルとアプリの間の会話の形式」、MCPは「アプリと外部ツールの接続の共通ルール」と整理できます。
安全に使うための注意点
- 実行はアプリが判断する:モデルが返したのはあくまで「提案」です。削除・送金・外部送信など影響の大きい操作は、実行前に人の確認を挟みましょう。
- 引数を検証する:モデルが想定外の値を作る可能性があります。権限チェックや入力チェックはアプリ側で必ず行います。
- 必須情報が足りないとき:モデルが勝手に値を推測して埋めることがある、と Anthropic のドキュメントでも注意されています。必要なら「不明な場合はユーザーに聞く」よう指示します。
- 外部データ由来の指示に注意:ツールの結果に含まれる文章に悪意ある指示が紛れていることがあります(プロンプトインジェクション)。
参考リンク
編集: AI Play 編集部 最終更新: 2026-10-25