← PC・IT用語集へ戻る

ツール呼び出し

Function Calling
ai development beginner
生成AIが処理の名前と引数を返し、アプリ側がその処理を実行して結果を戻す仕組み。
ツール呼び出し (Function Calling)

概要(サマリー)

ツール呼び出しとは、LLMが外部の処理を直接実行するのではなく、処理の名前と引数を返し、アプリケーション側がそれを実行する仕組みである。OpenAIでは function calling または tool calling、Claudeでは tool use、Geminiでは function calling と呼ばれる。名前は違っても、モデルが「この処理をこの値で使いたい」と返す点は共通である。

モデルは「注文番号 A100 の状況を調べたい」と判断し、get_order_status と引数だけをJSONで返す。データベースを開くのは、こちらのプログラムである。結果を再びモデルへ渡すと、人に見せる文章へまとめる。

AIエージェントがファイルを読んだりコマンドを提案したりできるのも、この往復が繰り返されていることが多い。

詳細解説

モデルは関数を実行しない

普通のチャットは、学習した範囲と、渡した文章から文章を返す。今日の注文状況や、こちらのパソコンの中のファイルは、渡さなければ見えない。

ツール呼び出しは、モデルに「使える道具の一覧」を先に渡す。モデルは、その中から道具が要ると判断したとき、道具の名前と引数を返す。実行、権限の確認、失敗時の扱いはアプリケーションの仕事である。

OpenAIのガイドでは、流れを次の5段で説明している。

  1. 使えるツールを添えてモデルへ依頼する
  2. モデルからツール呼び出しを受け取る
  3. 引数を使って、アプリ側のコードを実行する
  4. 実行結果を添えて、もう一度モデルへ送る
  5. 文章の回答、または追加のツール呼び出しを受け取る

1回で終わらないことがある。調べる、計算する、その結果で次の道具を選ぶ、というループになる。

道具の定義

道具は、名前、説明、引数の形で伝える。説明が曖昧だと、似た道具の選び間違いが起きる。

tools = [
    {
        "type": "function",
        "name": "get_order_status",
        "description": "注文番号から配送状況を返す。注文番号は英数字だけを受け取る。",
        "parameters": {
            "type": "object",
            "properties": {
                "order_number": {
                    "type": "string",
                    "description": "注文番号。例: A100"
                }
            },
            "required": ["order_number"],
            "additionalProperties": False
        }
    }
]

この定義を渡したあと、利用者の「A100は今どこですか」というプロンプトに対して、モデルは文章の代わりに get_order_status と {"order_number": "A100"} を返すことがある。こちらが注文システムを引き、返ってきた状況をモデルへ戻す。

引数はモデルが作った文字列である。実在する注文番号とは限らない。実行前に、形式、桁、権限を検査する。

結果を戻してから文章になる

ツールの結果は、利用者へそのまま見せるログではない。モデルへの次の入力である。

tool_result = {"order_number": "A100", "status": "配送中", "eta": "11月2日"}

このJSONを戻すと、モデルは「A100は配送中で、到着予定は11月2日です」のような文章を作れる。結果にない日付を、モデルが補って書くこともある。画面へ出す前に、結果と文章が食い違っていないかを見る余地を残す。

返してはいけない情報も、結果に混ぜない。モデルへ戻した内容は、その後の返答に使われる。顧客の住所や内部の管理メモを、必要がないのに戻さない。

MCPとの違い

MCPは、AIアプリと外部の道具をつなぐ接続の取り決めである。ツール呼び出しは、モデルが「この関数を、この引数で使いたい」と返すやり取りである。

OpenAIの組み込みツールには、MCPサーバーの機能を使うものもある。接続の規格と、モデルが返す呼び出しは、重なることもあるが同じ名前の機能ではない。

危険な処理は人が確認する

読み取りは比較的安全でも、削除、送金、メール送信、本番への反映は、モデルの判断だけで実行しない。呼び出しが返ってきた時点で止め、引数を人に見せてから実行する。

モデルは、一覧にない道具を要求したり、説明にない副作用を期待したりすることがある。実行できる関数は、こちらが登録したものだけに限定する。

AIコーディングとの関係

コーディング支援がファイルを開き、テストを走らせ、修正案を出すとき、裏側ではツール呼び出しに近いループが動いている。モデルがターミナルを「実行した」ように見えても、実行しているのはツール側である。

AIに道具を設計させるときは、読み取りと書き込みを分けるよう指定する。read_file と delete_file を同じ「ファイル操作」にまとめない。説明文には、いつ使うかと、いつ使わないかを書く。

返ってきた引数は、適用前に差分として見る。パスが作業フォルダの外を指していないか、コマンドが広すぎないかを、モデルの説明ではなく引数そのもので確認する。

よくある勘違い

AIがデータベースを直接更新する?

基本の仕組みでは、しない。モデルは名前と引数を返す。更新するのは、その引数を受け取ったアプリケーションである。

関数を渡せば、正しい引数になる?

形はそろいやすいが、値の正しさまでは保証されない。存在しないIDや、説明と違う単位が入ることがある。実行前の検査が要る。

MCPと同じもの?

接続の取り決めと、モデルが返す呼び出し要求は別である。MCPで道具を配り、モデルはツール呼び出しでその道具を要求する、という組み合わせになる。

エージェントとは違う?

エージェントは、目的に向かってツール呼び出しを繰り返す進め方である。ツール呼び出しは、その1往復の仕組みである。

まとめ

  • ツール呼び出しは、モデルが関数名と引数を返し、アプリが実行する仕組みである
  • モデル自身は、外部のデータベースやファイルを勝手には開けない
  • 道具は名前、説明、引数の形で定義し、説明の具体さが選択を左右する
  • 実行結果を戻してから、人に見せる文章が作られる
  • 削除や送信など元に戻しにくい処理は、実行前に人の確認を挟む

情報ソース

より詳しくAIに聞いてみよう

  • ツール呼び出しの5段の流れを、注文状況の問い合わせで説明してください。
  • モデルが関数を実行しないとはどういうことか、具体例で教えてください。
  • ツール呼び出しとMCPの違いを、初心者向けに整理してください。
  • 引数を実行前に検査するとき、最低限見る項目を挙げてください。
  • AIコーディングのエージェントに、削除だけは人の確認後に実行させる指示文を書いてください。