

PCパーツ・ガジェット専門
自作PCパーツやガジェットの最新情報を発信中。実測データに基づいた公平なランキングをお届けします。
Function Callingとは、LLMがユーザーの意図を解釈し、外部APIや自作関数を呼び出すために必要な「関数名」と「引数(パラメータ)」を正確なJSON形式で生成する能力のことです。AIエージェント実装における最大のボトルネックは、モデルが不適切な引数を生成したり、呼ぶべきでないタイミングでツールを呼び出したりすることにあります。この性能を客観的に評価するのがBerkeley Function-Calling Leaderboard (BFCL)であり、Simple(単一)からParallel(並列)、Relevance(妥当性)まで、実務的な精度を数値化しています。
多くの開発者が「GPT-4oやClaude 3.5 Sonnetなら問題ない」と考えがちですが、実際には複雑なネスト構造を持つJSONの出力安定性や、数百個の関数定義から正解を導き出すコンテキスト制御能力にモデル間で大きな格差が存在します。この記事を読み終えることで、BFCLの評価軸に基づいた「エージェント用途に最適なモデル」の選定基準が明確になり、実行エラー率を最小限に抑える実装戦略を習得できます。
Function Calling(関数呼び出し)とは、LLMがユーザーの意図を解釈し、定義された外部ツール(APIや自作関数)の中から「どの関数を」「どのような引数で」呼び出すべきかを決定して構造化データ(主にJSON形式)で出力する機能です。LLM自体がコードを実行するのではなく、実行すべき命令書を作成し、それをアプリケーション側で処理して結果をLLMに差し戻すことで、静的な学習データを超えたリアルタイム情報の取得や外部操作を実現します。
AIエージェントの実装において、Function Callingは「脳(推論)」と「手足(ツール)」を繋ぐインターフェースとなります。例えば、「東京の現在の気温を教えて」というリクエストに対し、LLMは内部知識で回答せず、get_weather(city="Tokyo") という関数呼び出しを選択します。この際、単に名前を出すだけでなく、スキーマ定義に基づいた厳格な型指定(String, Integer, Enum等)が求められます。2026年現在の最新モデルでは、このプロセスが推論パイプラインに深く統合されており、以前のような複雑なプロンプトエンジニアリングなしで高い精度を実現しています。
Function Callingの処理フローは以下のステップで完結します。
| ステップ | 役割 | 具体的な動作例 |
|---|---|---|
| 1. 定義送信 | スキーマ提供 | get_stock_price(ticker: string) の定義をシステムプロンプトに含める |
| 2. 意図解釈 | 関数選択 | 「NVIDIAの株価は?」 $\rightarrow$ get_stock_price を選択 |
| 3. 引数生成 | JSON出力 | {"name": "get_stock_price", "arguments": {"ticker": "NVDA"}} を出力 |
| 4. 外部実行 | APIコール | アプリ側でAPIを叩き、145.20 USD という結果を取得 |
| 5. 最終回答 | 回答合成 | 「NVIDIAの現在の株価は145.20ドルです」とユーザーに提示 |
この一連の流れにおいて最も重要なのが「JSON出力の頑健性(Robustness)」です。カンマ一つ、クォーテーション一つの欠落がパースエラーとなり、エージェント全体の停止を招きます。そのため、モデル選定時には単なる正解率ではなく、フォーマット違反率の低さを評価する必要があります。
BFCLは、LLMのツール利用能力を「Simple」「Multiple」「Parallel」「Relevance」という4つの難易度別カテゴリで定量化したベンチマークであり、実務的なエージェント開発におけるモデル選定の決定的な指標となります。単純な1つの関数呼び出し(Simple)ができても、複数の関数から最適なものを組み合わせる(Multiple)能力や、同時に複数のAPIを叩く(Parallel)能力は別次元の推論力を必要とするためです。
特に注目すべきは「Relevance(関連性)」の評価軸です。これは「提供されたツールの中に、ユーザーの要求を解決できるものが無い場合に、無理にツールを使わず『答えられない』と正しく判断できるか」を測定します。低性能なモデルは、無理やり似た関数を呼び出そうとする「幻覚(Hallucination)」を起こしやすく、結果として誤ったAPIリクエストを送信してシステムエラーやデータの汚染を引き起こします。
以下に、BFCLの評価軸に基づいた実装上の難所と、求められる能力をまとめます。
| 評価カテゴリ | 実装上の難所・ボトルネック | モデルに求められる具体的スペック |
|---|---|---|
| Simple | 基本的なJSONフォーマットの遵守 | 定義された型(int, float等)への厳格な準拠 |
| Multiple | 似た機能を持つ複数の関数からの正確な選択 | 関数記述(Description)間の微細な差異の識別力 |
| Parallel | 同時に呼ぶべき関数の抽出と順序付け | コンテキストウィンドウ内での依存関係の整理能力 |
| Relevance | 「ツールを使わない」という判断の閾値設定 | 外部知識と提供ツールの境界線の明確な認識 |
2026年時点でのモデル選定では、GPT-4oやClaude 3.5 Sonnet、Gemini 1.5 Proといったフラッグシップ級に加え、Llama 3.1 (70B/405B) や Mistral Large 2などのオープンウェイトモデルがBFCLで高スコアを記録しています。特にオンプレミス環境で推論サーバー(NVIDIA H100 80GB $\times$ 8基構成など)を構築する場合、量子化による精度低下がFunction CallingのJSON形式崩壊に直結するため、FP16またはBF16での運用が推奨されます。
Function Callingの実装で最も頻発する問題は、LLMが生成する引数の型不一致(Type Mismatch)と、複雑なネスト構造を持つJSONの崩壊です。例えば、API側が ISO 8601 形式の文字列 (2026-05-20T10:00:00Z) を期待しているにもかかわらず、LLMが「2026年5月20日」という自然言語で引数を生成してしまうケースです。これはプロンプトでの指示だけでは不十分であり、ツール定義(Tool Definition)の description 欄に具体的なフォーマット例を明記する必要があります。
また、「Parallel Function Calling(並列呼び出し)」における依存関係の無視も深刻な課題です。「ユーザーのIDを取得し、そのIDを使って注文履歴を検索する」というタスクにおいて、モデルが同時に get_user_id() と get_order_history(user_id=?) を出力してしまうケースがあります。後者は前者の結果を得るまで引数を確定できないため、逐次的な実行(Sequential Execution)が必要なワークフローを設計しなければなりません。
開発者が直面しやすい具体的な落とし穴は以下の通りです。
max_tokens を余裕を持って設定するか、ストリーミングパースを実装する必要があります。これらの問題を回避するためには、Pydanticなどのライブラリを用いてランタイムで型バリデーションを行い、エラーが出た場合にそのエラーメッセージ(例:ValueError: invalid date format)をそのままLLMにフィードバックして自己修正させる「Self-Correctionループ」の構築が定石となっています。
Function Callingを商用環境で運用する場合、レイテンシ(遅延)とAPIコストのバランスを最適化することが急務となります。ツール呼び出しが発生すると、「ユーザー要求 $\rightarrow$ モデル推論(1) $\rightarrow$ ツール実行 $\rightarrow$ モデル推論(2)」という最低2回のLLM往復が発生するため、単純なチャットよりも応答時間が大幅に増加します。例えば、平均的なTTFT(Time To First Token)が 200ms のモデルでも、ツール呼び出しを含めると実質的な応答時間は 2〜5秒に達することが一般的です。
コスト面では、ツール定義(スキーマ)を毎回プロンプトに含めるため、入力トークン数が恒常的に増加します。1つの関数定義が平均300トークンである場合、20個の関数を定義すると毎回6,000トークンのオーバーヘッドが発生し、数万リクエスト規模では無視できないコスト増となります。ここで有効なのが「Prompt Caching」技術です。Anthropic ClaudeやGoogle GeminiなどのAPIで提供されているキャッシュ機能を利用し、不変のツール定義部分をキャッシュすることで、入力コストを最大90%削減し、レイテンシを数百ms単位で短縮可能です。
運用最適化のための具体的なアプローチを以下に示します。
| 最適化項目 | 具体的手法 | 期待される効果 |
|---|---|---|
| 推論速度 | 小規模モデル(Llama 3.1 8B等)への蒸留/ファインチューニング | 処理時間の短縮 (ms単位) / コスト削減 |
| トークン節約 | Prompt Caching の導入 | 入力料金の低減 / TTFTの改善 |
| 精度向上 | Few-Shot Examples(正解例)の提示 | JSON形式エラー率の低下 ($\downarrow$ 5%以下へ) |
| 安定性 | 構造化出力(Structured Outputs)モードの強制利用 | パースエラーの完全排除 (100%準拠) |
さらに、エージェントの安定性を高めるためには、「推論専用モデル」と「ツール選択専用モデル」を分けるパイプライン構成が有効です。例えば、複雑な思考は GPT-4o などの高性能モデルに任せ、単純な関数選択のみを軽量で高速な gpt-4o-mini や Gemini 1.5 Flash に担当させることで、UX(ユーザー体験)を損なわずに運用コストを最適化できます。2026年のトレンドとしては、エージェントの動作ログを収集し、BFCLのような評価セットを自社専用に構築して、継続的にモデルの回帰テストを行う「LLMOps」の導入が標準となっています。
Function Callingの実装において、モデル選定の決定打となるのは「JSON形式の厳格な遵守」と「複雑な引数抽出の精度」です。2026年現在の主要LLMは、BFCL(Berkeley Function-Calling Leaderboard)で示される通り、単純な1つの関数呼び出しから、複数のツールを並列的に組み合わせる高度な推論まで性能が分かれています。
開発者は、単にベンチマークのスコアを見るのではなく、自身のアプリケーションが「定型的なAPI連携(Simple)」なのか、「動的なワークフロー構築(Parallel/Multiple)」なのかによってモデルを使い分ける必要があります。以下に、実装時に参照すべき5つの視点から比較データをまとめました。
最上位モデルは複雑な推論が可能ですが、トークンコストが高くなります。エージェントがループ回数を増やす設計の場合、入力・出力双方のコストが指数関数的に増大するため、軽量モデル(Small/Flash系)との併用が現実的です。
| モデル名 | コンテキスト窓 | 推論速度 (tokens/sec) | 入力コスト ($/1M tokens) | 出力コスト ($/1M tokens) | 主な用途 |
|---|---|---|---|---|---|
| GPT-4o | 128k | 高速 (Optimized) | $2.50 | $10.00 | 高精度エージェント・複雑なAPI連携 |
| Claude 3.5 Sonnet | 200k | 中速 | $3.00 | $15.00 | コード生成を伴うツール利用・精密制御 |
| Gemini 1.5 Pro | 2M | 高速 | $1.25 (≦128k) | $5.00 (≦128k) | 超長文ドキュメント参照+関数呼び出し |
| Llama 3.1 405B | 128k | 中速 (Self-hosted) | 変動 (GPUコスト) | 変動 (GPUコスト) | オンプレミス・機密データ処理 |
| Mistral Large 2 | 128k | 高速 | $2.00 | $6.00 | 多言語対応のツール呼び出し |
BFCLの4つの評価軸(Simple, Multiple, Parallel, Relevance)によって、求められる能力が異なります。特に「Relevance(呼ばない判断)」は、不要なAPI実行によるコスト増とエラーを防ぐために極めて重要です。
| 評価カテゴリ | 重要視される能力 | 推奨モデル (Tier 1) | 推奨モデル (Tier 2) | 選定の判断基準 |
|---|---|---|---|---|
| Simple | 単一関数の引数抽出精度 | GPT-4o mini / Gemini Flash | Llama 3.1 8B | 定型的なデータ取得のみで十分か |
| Multiple | 複数関数から最適なものを選択 | Claude 3.5 Sonnet | GPT-4o | 関数定義が20個以上に及ぶか |
| Parallel | 同時実行可能な関数の並列抽出 | GPT-4o / Gemini Pro | Llama 3.1 70B | 「AとBを同時に調べて」という要求があるか |
| Relevance | 関数を呼ばない判断(拒絶) | Claude 3.5 Sonnet | GPT-4o | ユーザーの曖昧な入力に対し、誤爆を防ぎたいか |
| JSON Robustness | 出力形式の厳格な遵守率 | GPT-4o / Gemini Pro | Mistral Large 2 | パースエラーによるリトライを最小化したいか |
Function Callingをクラウドで完結させるか、自前サーバーでホストするかは、レイテンシとデータプライバシーのトレードオフになります。特にローカルモデルの場合、Function Calling専用にファインチューニングされたモデル(Instruct版など)の選択が必須です。
| 比較項目 | クラウドAPI (Managed) | ローカルLLM (Self-hosted) | 選定基準 |
|---|---|---|---|
| 導入速度 | 即時 (API Key発行のみ) | 低速 (GPU調達・環境構築が必要) | 開発サイクルの速さを優先するか |
| データ機密性 | プロバイダに依存 (Opt-out可) | 完全制御可能 (エアギャップ化可) | PII(個人情報)を外部に出せないか |
| 推論レイテンシ | ネットワーク遅延あり | GPU性能に依存 (極めて高速な場合あり) | ミリ秒単位の応答速度が求められるか |
| 運用コスト | 従量課金 (変動費) | 初期投資+電気代 (固定費) | 月間数億トークンの大量消費があるか |
| 更新頻度 | 自動的に最新モデルに更新可能 | 手動でウェイトを更新・量子化が必要 | 最新のSOTA性能を常に追いたいか |
Function Calling単体の精度だけでなく、周辺エコシステム(SDKの充実度やオーケストレーターとの相性)が実装工数に直結します。LangChainやLlamaIndexなどのフレームワークを利用する場合、対応状況を確認してください。
| 対応規格/ツール | OpenAI API (GPT) | Anthropic API (Claude) | Google Vertex AI (Gemini) | Open Source (vLLM等) |
|---|---|---|---|---|
| Tool Use Definition | JSON Schema (Strict) | Tool-use XML/JSON | Function Declaration | Prompt-based / Fine-tuned |
| LangChain互換性 | 完全対応 (Native) | 完全対応 (Native) | 対応 (VertexAI wrapper) | 概ね対応 (Custom Prompt) |
| ストリーミング出力 | 対応 (Partial JSON) | 対応 (Tool use blocks) | 対応 | モデル・サーバーに依存 |
| システムプロンプト制御 | 強固 (System Message) | 極めて強固 (Pre-fill可能) | 標準的 | プロンプトテンプレート依存 |
| 関数定義の最大数 | 多い (100+ 可能) | 中程度 | 多い | 少ない(コンテキスト圧迫) |
単一のモデルですべてを解決しようとせず、ルーター(Router)となる軽量モデルと、実行を担う重量モデルを組み合わせる「ハイブリッド構成」が2026年のトレンドとなっています。
| ユースケース | 推奨構成 (Router $\rightarrow$ Executor) | 期待される効果 | 重要指標 | 判断基準 |
|---|---|---|---|---|
| 社内ドキュメント検索AI | Gemini Flash $\rightarrow$ Gemini Pro | 長文コンテキストの効率的処理 | Retrieval Precision | 文書量 $\times$ 参照関数数 |
| 高度な自動コーディング | GPT-4o mini $\rightarrow$ Claude 3.5 Sonnet | 低コストでの意図解釈+高精度実装 | Code Correctness | コード量 $\times$ API複雑性 |
| リアルタイム顧客対応bot | Llama 3.1 8B (Local) $\rightarrow$ GPT-4o | 低遅延応答+エスカレーション時の高精度化 | Time to First Token | 平均応答速度 $\times$ 解決率 |
| 完全自律型AIエージェント | GPT-4o $\rightarrow$ GPT-4o (Self-Correction) | 自己修正ループによる完遂率向上 | Task Success Rate | 自律的なリトライ回数 |
| 多言語API連携ハブ | Mistral Large 2 $\rightarrow$ Claude 3.5 Sonnet | 非英語圏での意図抽出+厳密なJSON出力 | Translation Accuracy | 対応言語数 $\times$ JSON遵守率 |
これらの比較表から明らかなように、Function Callingのモデル選定は「精度」という単一の指標ではなく、「コスト」「レイテンシ」「頑健性(Robustness)」のバランスで決定されます。特にBFCLで高いスコアを出しているClaude 3.5 SonnetやGPT-4oなどのTier 1モデルは、Parallel(並列)呼び出しにおいて圧倒的な安定性を誇りますが、単純なAPI叩きであればGPT-4o miniのような軽量モデルに十分代替可能です。実装前に、想定される関数定義の数と、ユーザー入力の複雑性を定量化し、最適な構成を選択してください。
トークン消費量が増えるため、概ね1.2倍〜1.5倍程度のコスト増が見込まれます。理由は、システムプロンプトにツール定義(JSON Schema)を記述して送信する必要があり、GPT-4oやClaude 3.5 Sonnetなどのモデルでは、関数定義の文字数分だけ入力トークン課金が発生するためです。特に定義する関数数が10個を超えるような複雑なエージェント構成の場合、リクエストごとのベースコストが数百トークン単位で底上げされます。
小規模なモデル(SLM)に特化してファインチューニングを行うか、GPT-4o-miniのような軽量・高性能モデルを採用するのが最適解です。例えばGPT-4o-miniは、従来のGPT-3.5 Turboよりも格段に低い価格設定でありながら、BFCLのSimpleカテゴリにおいて高い正解率を維持しています。また、関数定義を簡素化し、不要な説明文(description)を削ることで入力トークン数を削減し、コストを最適化することが可能です。
いいえ、BFCLの結果はあくまでベンチマークであり、実際の動作は「関数の定義文(Description)」の書き方に強く依存します。例えばGemini 1.5 ProがBFCLで高スコアであっても、プロンプト内で引数の制約を曖昧に記述すれば、型不一致のエラーが発生します。実運用では、モデル選定後に少量のテストデータを用いて、自社固有のドメイン知識に基づいた「Few-Shot提示」を行うことで、精度を実用レベルまで引き上げる必要があります。
可能です。特にLlama 3.1(8B/70B)などの最新モデルは、トレーニング段階でツール利用能力が強化されており、vLLMやOllamaなどの推論サーバーを介してJSONモードを有効にすれば、商用APIに近い挙動を実現できます。ただし、Parallel Calling(並列呼び出し)のような高度な機能については、モデル単体よりもLangChainなどのフレームワーク側で制御する実装が必要になるケースが多い点に注意してください。
基本的には互換性がなく、各社独自のJSONフォーマットを採用しています。OpenAIはtools配列の中にfunctionを定義する形式ですが、Claude 3.5 Sonnetなどは別のスキーマ構造を持ちます。この差異を吸収するために、多くの開発者は[LangChai](/glossary/chai-ai-2021)nの「Tool」抽象クラスや、[MCP(Model Context Protocol](/glossary/mcp-protocol))のような標準化規格を利用して、モデルを切り替えてもツール定義を再利用できる設計を採用しています。
一度作成したツール定義を、異なるLLM間で共有・再利用できるエコシステムを構築できる点です。従来はClaude向けに書いた関数定義をGPT-4o用に書き直す必要がありましたが、MCPを介せばサーバー側でツールを一元管理し、クライアント(IDEやチャットUI)側で共通して呼び出せます。これにより、CursorなどのAIエディタにおいて、外部DB接続やGitHub API連携などのツールをモデルに依存せずシームレスに提供可能です。
最大反復回数(Max Iterations)の上限設定と、ストップ条件の厳格化が必要です。例えばエージェントのループ回数を5回までに制限し、それを超えた場合は「解決不能」としてエラーを返す処理を実装してください。また、Relevance(呼ばない判断)が低いモデルでは、同じ関数を何度も呼び出す傾向があるため、BFCLのRelevanceスコアが高いモデルへ変更するか、プロンプトに「一度得られた回答を再利用せよ」という指示を追加することが有効です。
モデルの「JSON Mode」を強制的に有効にするか、制約付きサンプリング(Constrained Sampling)を利用してください。例えばvLLMなどの推論エンジンでは、出力形式をJSON Schemaに固定する機能があり、これにより構造的な破綻を100%防ぐことが可能です。また、プロンプトの末尾に {"tool_calls": [ と書き出しを誘導する手法や、Pydanticを用いてバリデーションを行い、エラー時にモデルへ再試行を促すリトライループの実装が一般的です。
静的な関数定義から、動的にツールを生成・検索して利用する「Dynamic Tool Retrieval」へ移行します。数千個の関数をすべてプロンプトに入れることは不可能なため、ユーザーのクエリに応じてベクトルDB(PineconeやMilvus等)から最適な関数定義だけを抽出してコンテキストに注入する手法が主流になります。これにより、モデル側は少数の最適化されたツールのみを扱うため、精度と速度が飛躍的に向上します。
目的によって使い分けるべきですが、「操作」が必要ならFunction Calling、「参照」が必要ならRAGです。例えば「最新の在庫数を照会して注文する」場合は、DB APIを叩くFunction Callingが必須となります。一方で「社内規定から回答を探す」場合は、数万件のドキュメントを検索するRAGが適しています。高度なエージェントでは、まずRAGで知識を得て、その結果に基づいてFunction Callingでアクションを起こすという複合的なワークフローが標準的です。
Function Callingは、LLMを単なるチャットボットから「実務を遂行するAIエージェント」へと進化させる不可欠な機能です。本記事で解説した通り、モデル選定においては単純なパラメータ数ではなく、BFCL(Berkeley Function-Calling Leaderboard)のような実用的ベンチマークに基づいた「ツールの選択精度」と「引数の生成能力」を重視する必要があります。
本記事の要点は以下の通りです。
AIエージェントの実装においては、まずBFCLで自社のユースケースに近いカテゴリのスコアを確認し、少数のプロンプトテストでJSON出力の安定性を検証することから始めてください。ツール定義の粒度を最適化することで、モデルの性能を最大限に引き出すことが可能です。

戦略コンサル(MBB)PC。Tableau、Excel達人、Pyramid Principle。

推論モデル(Reasoning Models)が通常LLMと何が違うのかを、Google-Proofな難問GPQAの観点で解説。思考予算とスコアの関係、Diamond 198問の意味、選び方の注意点を結論ファーストで示す。

AIエージェントを構築するフレームワークを比較。LangGraph、CrewAI、AutoGen、Semantic Kernelの設計思想・実装難度・ユースケースを具体コード例付きで解説

自作PCでローカルLLMの推論速度を正確に測定する方法。llama-bench・LM Studio組み込みベンチ・Ollama psコマンドの使い方、prompt eval/token/秒の見方、公平な比較条件の設定方法を解説。

画像・動画を理解できるマルチモーダルLLMをローカル自作PCで実行する方法。Vision Encoder付きモデルのVRAM要件・速度・精度をGPU別に比較する。

Ollama・LMStudioでローカルLLMを動かすサーバーPC構成。GPU・VRAM・ストレージ要件を解説。
この記事で紹介したAI PC向けGPU・メモリの商品情報をAmazonで確認できます。
Q: さらに詳しい情報はどこで?
A: 自作.comコミュニティで質問してみましょう。

ゲーミングノートPC
LM Studioで始める自分だけのローカルAI構築術: PCが最強の遊び相手になる!

写真
FRETONBA ポケットアルバム Lサイズ対応 透明度の高い フォト アルバム 軽量薄型 フォトブック 最大80枚収納 写真整理 収納便利 コンパクト 写真アルバム 携带便利 防塵 防水 縦写真収納 家族 子供 赤ちゃん 結婚式 卒業式 記念日 旅行 アルバム L判/L-W/ハガキ/DSCサイズ対応

PC関連アクセサリ
作って学ぶコンピュータアーキテクチャ —— LLVMとRISC-Vによる低レイヤプログラミングの基礎

化粧品
LABRIMP 倍拡大鏡付き卓上化粧鏡 吸盤式浴室用ライト付ミラー メイク細部確認に な映像と自然色再現 プレゼントにも適した高反射率ミラー

PCケース
医師のための知識整理・AI活用ガイド: Notebook LMで診療・学び・教育・仕事が変わる

CPU
Bffcnl シームリッパー ステッチリッパー スレッドカッター 耐久性のある針仕事縫製ツール ステッチアンピッカー 編み物用 刺繍縫製 かぎ針編み, オレンジ