LLMが外部APIや関数を構造化された形式で呼び出す機能。モデルが自然言語の入力から適切な関数名と引数を推論し、JSON形式で出力することで外部システムとの連携を実現する。
Function Calling(関数呼び出し)は、LLMが自然言語の指示を解釈し、事前に定義された関数(ツール)の中から適切なものを選択して構造化された引数とともに呼び出す機能である。2023年6月にOpenAIがGPT-3.5/GPT-4のAPIで初めて正式サポートし、以降Anthropic Claude、Google Gemini、Mistral等の主要LLMが相次いで対応した。
Function Callingの処理フローは以下の3段階で構成される:
| ステップ | 実行主体 | 内容 |
|---|---|---|
| 関数スキーマ送信 | 開発者 | tools パラメータで関数定義を渡す |
| 関数選択・引数推論 | LLM | ユーザー入力から最適な関数と引数を判断 |
| JSON出力 | LLM | tool_calls として構造化データを返す |
| 関数実行 | クライアント | 返されたJSON通りに実際のAPIを呼び出す |
| 結果返却 | 開発者 | 実行結果をtool roleメッセージとしてモデルに送信 |
| 最終応答生成 | LLM | 関数の実行結果を踏まえて自然言語で回答 |
| LLMプロバイダ | 関数名 | 最大関数数 | Parallel対応 | Strict mode |
|---|---|---|---|---|
| OpenAI GPT-4o | tools | 128 | ○ | ○(Structured Outputs) |
| Anthropic Claude 4 | tools | 制限なし | ○ | ○(tool_choice) |
| Google Gemini 2.5 | function_declarations | 128 | ○ | ○ |
| Mistral Large | tools | 制限なし | ○ | × |
| Meta Llama 3.1+ | tools(via vLLM等) |
天気情報API、株価API、データベースクエリ等、外部データを取得してユーザーに提供する。最も基本的なパターン。
メール送信、カレンダー予約、ECサイトでの注文処理等、ユーザーの代わりにアクションを実行する。確認ステップの組み込みが重要。
複数の関数を順次呼び出して複合的なタスクを完遂する。例:「東京の天気を調べて、雨なら室内レストランを予約」→ get_weather → search_restaurants → make_reservation の3段階。
ベクトルDBの検索関数をFunction Callingで呼び出し、検索結果をコンテキストとしてモデルに渡す。RAGパイプラインの柔軟な構築に使われる。
A: Function Callingはモデルが学習時に関数呼び出しパターンを訓練しており、スキーマ準拠率が格段に高い。プロンプトでの指示は不安定でJSON構文エラーやスキーマ逸脱が頻発する。本番システムでは必ずFunction Callingを使うべきである。
A: 実用的には10-30関数が最適レンジ。関数数が増えるほどモデルの選択精度が下がり、トークンコストも増大する。100以上の関数がある場合は、事前にカテゴリ分類してサブセットのみを渡すルーティング層を設けるのが一般的。
A: Llama 3.1以降、Qwen2.5、Mistral等の主要オープンソースモデルはFunction Calling対応の訓練を受けている。vLLMやTGI等の推論エンジンがtoolsパラメータをサポートしており、OpenAI互換APIとして利用可能。
| 実装依存 |
| △ |
| × |