関数呼び出し(ツール使用)とは

この記事の結論

  • 関数呼び出し(ツール使用)とは、LLMが、あらかじめ定義された関数の中から使うものを選び、名前と引数を決まった形式で出力し、実際の実行はアプリ側が行う連携の方式のことです。
  • モデルが出すのは「この関数を、この引数で呼んでほしい」という依頼までです。コードを動かして結果を返すのは、呼び出す側のプログラムです。
  • 関数は名前・説明・引数の型(JSON Schema)で定義します。説明の書き方でモデルの選び方が変わり、定義そのものも入力トークンとして数えられます(2026-09-26 時点)。

かんすうよびだし/Function Calling

LLMが、あらかじめ定義された関数の中から使うものを選び、名前と引数を決まった形式で出力し、実際の実行はアプリ側が行う連携の方式です。

最終更新: 2026-09-26

01

関数呼び出し(ツール使用)とは(意味と読み方)

関数呼び出し(ツール使用)とは、LLMが、あらかじめ定義された関数の中から使うものを選び、名前と引数を決まった形式で出力し、実際の実行はアプリ側が行う連携の方式のことです。読みは「かんすうよびだし」。英語では Function Calling や Tool Use と呼ばれ、提供元によって呼び名が違うだけで、指している仕組みはほぼ同じです。

LLMは文章を作るのが得意な一方、正確な計算や最新情報の取得、ファイルの操作は、それ自体ではできません。そこで「天気を調べる関数」「データベースを検索する関数」のような道具を用意し、必要なときにモデルに選ばせます。AIエージェントが外の世界に触る手段は、ほとんどがこの仕組みです。

言語モデルが「どのAPIを、いつ、どんな引数で呼び、結果をどう取り込むか」を自ら学ぶ研究としては、2023年の論文 Toolformer(arXiv:2302.04761)があり、電卓・検索・翻訳・カレンダーなどの道具を扱っています。

02

関数呼び出しの往復の流れ

ある提供元の公式ガイドは、流れを次の5段階で説明しています(公式ガイド(関数呼び出しの流れ))。

  1. 呼び出せる関数の定義を添えて、モデルにリクエストを送る。
  2. モデルから「この関数をこの引数で」という呼び出しの依頼を受け取る。
  3. その引数を使って、アプリ側でコードを実行する。
  4. 実行結果を添えて、もう一度モデルにリクエストを送る。
  5. モデルから最終的な回答(または追加の呼び出し依頼)を受け取る。

別の提供元のドキュメントでも、モデルは tool_use という形で呼び出しを返し、アプリ側が実行して tool_result として結果を送り返す、という同じ往復が示されています。あわせて、提供元のサーバー上で実行される検索などの「サーバー側ツール」と、利用者のアプリで実行する「クライアント側ツール」の違いも説明されています(公式ドキュメント(ツール連携の説明))。

03

関数定義の書き方と具体例

関数は、名前・説明・引数の型の3点で定義します。引数の型は JSON Schema という書式で表すのが一般的です。たとえば、リポジトリ内のファイルを検索する道具なら次のようになります。

  • 名前:search_code
  • 説明:「リポジトリ内のファイルから文字列を検索し、該当するパスと行番号を返す。ファイルの中身は返さない」
  • 引数:{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}

「ログイン処理はどこにある?」と聞かれたモデルは、答えを想像で書く代わりに search_code を {"query":"login"} で呼ぶよう依頼します。アプリが検索を実行して結果を返すと、モデルはそのパスをもとに回答を組み立てます。AIコーディングエージェントのファイル編集やコマンド実行も、同じ往復で動いています。

04

関数呼び出しについてのよくある誤解

  • 誤解:モデルが関数を実行している → 実際:モデルが出すのは呼び出しの依頼だけです。実行するのはアプリのコードなので、実行してよいかの判断や入力の検査もアプリ側で行えます。
  • 誤解:出てくる引数はいつも定義どおり → 実際:通常はできるだけ合わせる動作で、型が崩れることもあります。スキーマに厳密に従わせる設定(strict)を持つ提供元もありますが、受け取った側でも検証しておくと安全です。
  • 誤解:関数をたくさん渡すほど便利になる → 実際:関数の名前・説明・スキーマも入力トークンに数えられます。似た説明の関数が並ぶと、モデルが取り違える原因にもなります。
05

関数呼び出しを設計するときのコツ

  • 説明に「いつ使うか」「何を返すか」を書く:モデルは説明文を読んで関数を選びます。返さないもの(上の例なら「中身は返さない」)も書いておくと、使い分けがはっきりします。
  • 引数は必須と任意を分ける:required に必要な項目を並べ、足りないときはモデルに聞き返させる指示を添えます。
  • 失敗も結果として返す:例外で処理を止めず、「該当なし」「権限がない」といった内容を結果として返すと、モデルが次の手を選べます。
  • 書き込み系は確認を挟む:削除や送信のような関数は、実行前に人の承認を求める作りにします。
06

関連用語

07

関連記事

08

出典・参考資料

09

よくある質問

Q1. 関数呼び出し(ツール使用)とは何ですか?
LLMが、あらかじめ定義された関数の中から使うものを選び、名前と引数を決まった形式で出力し、実際の実行はアプリ側が行う連携の方式です。計算や検索、ファイル操作など、モデル単体ではできない処理を道具として使わせるために使います。

Q2. Function Calling と Tool Use は違うものですか?
呼び名が違うだけで、ほぼ同じ仕組みを指しています。提供元によって、関数呼び出しと呼ぶところと、ツール使用と呼ぶところがあります。どちらも、モデルが呼び出しを依頼し、アプリが実行して結果を返す往復です。

Q3. 関数を実行するのはモデルですか?
いいえ。モデルは関数名と引数を出力するだけで、実行するのは呼び出す側のアプリです。そのため、実行してよいかの確認や引数の検査をアプリ側に組み込めます。提供元のサーバーで実行されるツールもありますが、その場合も実行するのはモデルではなく提供元の環境です。

Q4. 関数呼び出しとMCPはどう違いますか?
関数呼び出しは、モデルとアプリの間で「この道具をこの引数で」とやり取りする方式です。MCPは、その道具やデータをアプリに提供するサーバーとの接続方法を共通化した規格です。MCPサーバーの道具も、最終的にはモデルからは関数呼び出しの形で使われます。