Function Calling
関数呼び出し
かんすうよびだし
Definition
Function calling is a mechanism where a model outputs a function name and arguments to request an external operation, enabling safer and more reliable execution by the application. It is key for connecting LLMs to tools and systems.
LLMは文章を生成する能力に優れていますが、それだけでは「今日の天気を調べる」「データベースを検索する」といった現実世界の操作はできません。関数呼び出し(Function Calling)とは、LLMが「この関数をこの引数で呼び出してほしい」という構造化された要求を出力し、外部処理を実行できるようにする仕組みです。
LLMに「手足」を与える
従来のLLMは、テキストを入力として受け取り、テキストを出力するだけの存在でした。「東京の天気を教えて」と聞かれても、学習データに基づいた推測を返すしかありません。関数呼び出しでは、開発者があらかじめ「天気を取得する関数」「データベースを検索する関数」などの定義をLLMに渡しておきます。LLMはユーザーの質問を分析し、適切な関数名と引数をJSON形式で返します。開発者側のアプリケーションがその関数を実行し、結果をLLMに渡すと、LLMがそれを自然言語で回答にまとめます。
具体的な流れ
実際の処理フローを見てみましょう。ユーザーが「明日の東京の天気は?」と質問すると、LLMは学習済みの知識で回答を試みるのではなく、`get_weather(location="東京", date="明日")` という関数呼び出しを返します。アプリケーションが天気APIを叩いて結果(「晴れ、最高気温22度」)を取得し、それをLLMに渡すと、「明日の東京は晴れで、最高気温は22度の予想です」のように自然な回答が生成されます。
APIごとの実装
OpenAIは2023年にFunction Callingを導入し、API リクエストの`tools`パラメータで関数定義を渡す形式を採用しています。Anthropicも同様の「Tool Use」機能を提供しており、関数のスキーマ(名前、説明、パラメータの型)をJSON Schemaで定義します。Googleも同様のAPIを提供しています。各社の実装は細部が異なりますが、「関数を定義→LLMが選択→結果を返す」という基本的な流れは共通です。
MCPとの関係
関数呼び出しは各AIプラットフォーム固有の機能であり、あるプラットフォーム向けに作ったツール連携を別のプラットフォームでそのまま使うことはできませんでした。この互換性の問題を解決するために生まれたのがMCP(Model Context Protocol)です。MCPは関数呼び出しの上位概念として、ツールの定義・発見・実行を標準化するプロトコルを提供します。MCPに対応したツールは、対応するあらゆるLLMから利用可能になります。
エージェントの基盤
関数呼び出しはAIエージェントの基盤技術です。エージェントが自律的にタスクを実行するためには、外部ツールを呼び出す能力が不可欠です。Web検索、ファイル操作、API呼び出し、コード実行など、関数呼び出しを通じてLLMは「考える」だけでなく「行動する」ことができるようになります。LLMを「便利なチャットボット」から「仕事を遂行するエージェント」に変えた技術が、関数呼び出しです。