Function Calling は、大規模言語モデルが外部の機能を利用するための最も一般的な仕組みです。開発者はまず JSON Schema で「どんな関数があり、引数はどのような形か」を記述しておき、モデルは会話の途中でデータ取得や操作が必要になると、構造化された呼び出し要求を出力します。プログラムが実際の関数を実行し、その結果をモデルに戻すことで回答が続けられます。要点は一言で言えばこうです。モデルが決めるのは「何を呼び出すか、引数に何を入れるか」だけであり、実際にコードを実行するのは常にあなたのプログラムです。
何の問題を解決するのか
モデルは本来テキストを出力することしかできません。天気の確認、データベースの読み取り、注文といった「手を動かす」ことはできません。Function Calling はその間に橋を架けます。モデルは自然言語で要求を理解し、「どの関数を、どの引数で呼び出したいか」を構造化された形式で表現し、実行はプログラムに任せます。これこそツール呼び出しが成り立つ土台です。
Function Calling の一連の流れ
- 定義:リクエストに tools 配列を含め、各関数の名前、説明、引数の構造(JSON Schema)を記述します。
- 判断:モデルは外部機能が必要だと判断すると、直接回答せずに tool_calls(関数名+引数の JSON)を返します。
- 実行:あなたのプログラムが tool_calls を解釈し、実際の関数を呼び出します。API の呼び出し、データベースの読み取り、スクリプトの実行などです。
- 返却:実行結果を tool メッセージとして会話に戻し、モデルはそれをもとに最終回答を作ります。
主な構成要素
- tools 定義:モデル向けの「関数マニュアル」。説明が明確なほど、引数の精度が上がります。description は人ではなくモデルに向けて書くものです。
- tool_choice:モデルがある関数を「必ず呼ぶ/呼んでもよい/呼ばない」のどれにするかを制御します。auto、none、関数名の指定が一般的です。
- 並列呼び出し:一度に複数の tool_calls を返し、一巡で複数の独立した用事を済ませられます。
- 構造の制約:引数は正当な JSON でなければならず、型が間違っているとプログラム側でエラーになります。Schema の制約は厳格です。
ツール呼び出し・MCP・プラグイン呼び出しとの本当の違い
| 観点 | Function Calling | ツール呼び出し | MCP | プラグイン呼び出し |
|---|---|---|---|---|
| 本質 | 呼び出しの仕組み | 総称 | 接続プロトコル | 機能の配布形態 |
| ツールの定義者 | リクエスト内で開発者が定義 | 場合による | MCP server が公開 | プラットフォームが提供 |
| 解決する問題 | モデルがどう呼び出しを始めるか | モデルが外部機能をどう使うか | ツールをどう見つけ、統一的につなぐか | 機能をユーザーにどう届けるか |
Function Calling は 2023 年に OpenAI が広め、現在は主要なモデルが互換実装を備えています。ツール呼び出しはもっと大きな枠で、Function Calling、コード実行、MCP ツールなどを内包します。覚えておくべきは一言です。MCPは「どうつなぐか」、プラグインは「どう配るか」、Function Calling は「どう呼び出し始めるか」を担います。三者は連鎖の関係であり、置き換え合うものではありません。プラグイン呼び出しとの境界も同じ考え方で整理できます。
境界と制限
- 引数のハルシネーション:モデルは存在しない引数名をでっち上げたり、型を間違えたりします。プログラム側での検証は必須です。
- トークンと遅延:呼び出しごとに会話が一往復増え、tools 定義自体もコンテキストを消費します。ツールが増えるほど高く、遅くなります。
- 安全のレッドライン:データベースの削除、送金、一斉メール送信のような不可逆な操作をモデルに直接させてはいけません。重要な操作には人の確認を挟みます。
- 対応度の差:Function Calling への対応の成熟度はモデルによって異なり、小さなモデルは「話すだけで呼ばない」ことや、形式を間違えることがよくあります。
よくある誤解
- 「モデルが実際にコードを実行している」——違います。モデルが出力するのは呼び出し要求だけで、実行はあなたのプログラムの中で行われます。
- 「Function Calling は MCP と同じ」——違います。MCP はプロトコル層であり、MCP が公開するツールも Function Calling のような仕組みを経由してモデルに使わせることができます。
- 「Function Calling があればプラグインは不要」——プラグインはユーザーへの配布形態、Function Calling は開発者向けの仕組みであり、層が違います。
- 「定義すればモデルは必ず呼ぶ」——デフォルトは auto で、モデルが必要ないと判断すれば呼びません。強制したい場合は関数名を明示します。
FAQ
Q:Function Calling は各社の API のツール引数と同じものですか?
A:同系統です。「モデルが構造化呼び出しを出力し、プログラムが実行する」という考え方は共通で、違うのはフィールド名やパッケージングです。移行時は主に定義の書き換えになります。
Q:すでに MCP を使っていますが、Function Calling も気にする必要がありますか?
A:必要です。MCP はツールをどうつなぐかを解決し、Function Calling はモデルがどう呼び出し始めるかを解決します。上流と下流の関係であり、二者択一ではありません。
Q:Function Calling でローカルスクリプトを呼べますか?
A:呼べます。関数はあなたのプログラムの入口にすぎず、裏側が API 呼び出しでもスクリプト実行でもデータベース参照でも、モデルは関知しません。モデルが言うのは「どれを、どの引数で」だけです。