Function Callingとは何か
LLM(大規模言語モデル)は本来、テキストを入力して次のテキストを生成するだけのシステムだ。しかしそれだけでは、最新の株価を調べたり、カレンダーに予定を追加したり、コードを実行したりといった「現実世界との連携」ができない。
Function Calling(Claudeでは「Tool Use」と呼ばれる)は、LLMが外部の関数やAPIを自律的に呼び出せるようにする仕組みだ。モデルがどんな関数が使えるかを理解し、ユーザーの意図に応じて適切な関数を選んで呼び出すことで、テキスト生成の枠を超えた動作が実現する。
仕組みの概要
スキーマの定義とモデルへの提示
Function Callingは次のような流れで動く。まず開発者が「使える関数のリスト」をスキーマ(JSON Schema形式)として定義し、APIリクエストに含める。スキーマには関数名・説明・パラメータの型・必須項目などを記述する。
例えば「現在の天気を取得する関数」なら、次のように定義する。
{
"name": "get_weather",
"description": "指定した都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名(例: Tokyo)"
}
},
"required": ["city"]
}
}
モデルが関数を「選んで」呼び出す
ユーザーが「東京の今日の天気は?」と聞くと、モデルはスキーマを参照してget_weather関数が適切だと判断し、呼び出す意図をJSON形式で返す。
ここで重要なのは、モデル自身が関数を実行するわけではないという点だ。モデルはあくまで「どの関数をどんな引数で呼び出すべきか」という指示をテキストとして返す。実際の関数実行は開発者のコード側が担い、その結果を再びモデルに渡すことで最終的な回答を生成する。
会話の流れ
- ユーザー: 「東京の今日の天気は?」
- モデル:
{"function": "get_weather", "arguments": {"city": "Tokyo"}}を返す - コード:
get_weather("Tokyo")を実行し「晴れ、気温28度」という結果を得る - コード: その結果をモデルに渡す
- モデル: 「東京は今日晴れで、気温は28度です」と自然言語で回答する
Claude・OpenAIでのAPI実装
Claudeのtool use
Anthropic APIではtoolsパラメータに関数スキーマを渡す。モデルが関数の呼び出しを判断した場合、レスポンスのstop_reasonが"tool_use"になり、呼び出すツールとパラメータがcontentブロックに含まれる。
その結果をtool_resultとして次のリクエストに含めると、モデルが結果を受け取って最終回答を生成する設計になっている。
OpenAIのfunction calling
OpenAI APIではtoolsパラメータに同様のスキーマを渡す。モデルが関数呼び出しを判断した場合、レスポンスのfinish_reasonが"tool_calls"になる。使い方の基本的な流れはClaudeと同様だが、パラメータ名やレスポンス構造に差異がある。
Parallel Tool Calling
複数の関数を並行して呼び出す「Parallel Tool Calling」もサポートされている。「東京と大阪の天気を教えて」と聞かれた場合、get_weather("Tokyo")とget_weather("Osaka")を同時に呼び出して効率化できる。エージェント型のシステムでは、この並行呼び出しがレイテンシの削減に重要な役割を果たす。
活用できるユースケース
外部APIとの連携
天気・株価・ニュースなど、外部APIからリアルタイムデータを取得してLLMの回答に反映させるのが最もシンプルな活用例だ。LLMのトレーニングデータは過去のものなので、最新情報が必要なユースケースでは特に有効だ。
データベースの操作
「先月の売上を教えて」という質問に対して、SQLクエリを生成して実行し、その結果を自然言語で説明するシステムが作れる。ビジネスインテリジェンスツールのNL2SQL機能に広く使われている。
カレンダー・メール操作
「来週月曜の午後2時に会議を追加して」という指示に対して、カレンダーAPIを呼び出して予定を作成するアシスタントが実現できる。Google Calendar APIやMicrosoft Graph APIをFunction Callingでラップするだけで、音声・テキストベースのスケジューリングアシスタントになる。
コード実行環境
コードインタープリターを関数として定義し、LLMが生成したPythonコードを実行して結果を返す構成も一般的だ。ChatGPTのCode Interpreterは、この仕組みをプロダクトとして実装した例だ。
MCPとの関係
MCP(Model Context Protocol)はFunction Callingを標準化・拡張したプロトコルと見なせる。個別のAPIリクエストに関数を定義する代わりに、再利用可能なMCPサーバーとして関数をパッケージ化し、複数のAIクライアントから利用できる。Function Callingが「一つのアプリ内の仕組み」なら、MCPは「ツールのエコシステム」だ。
まとめ
Function Callingは、テキスト生成しかできなかったLLMに「外の世界を動かす手」を与える技術だ。開発者が関数スキーマを定義し、モデルが状況に応じて適切な関数を選んで呼び出す。実際の実行はコード側が担い、結果をモデルに戻すというループで、API連携・DB操作・カレンダー操作など幅広いユースケースを実現できる。AIエージェントの自律性を高める基盤技術として、今後さらに重要性が増す分野だ。