AI・機械学習
中級

Function Calling / Tool Use(LLM)(ファンクションコーリング ツールユース)

Function Calling(Tool Use)とは、LLMが外部関数やAPIを呼び出すための構造化されたリクエストを生成する機能で、OpenAI Functions・Claude Tool Use・Gemini Function Callingなど各社が実装し、LLMエージェント開発の基盤技術となっている。

0 回閲覧
0 いいね

Function Calling / Tool Use とは

Function Calling(ファンクションコーリング)は、LLMが事前に定義された関数(ツール)の中から適切なものを選択し、引数を構造化データとして生成する機能である。モデルは関数を実際に実行するのではなく、「どの関数を、どのような引数で呼び出すべきか」を JSON 形式で出力する。アプリケーション側がその出力に基づいて関数を実行し、結果をモデルに返すことで、LLMと外部システムの連携が実現する。AnthropicではこれをTool Use(ツールユース)と呼称している。

主要プロバイダの実装比較

OpenAI Functions / Tools API

OpenAIは2023年6月にFunction Callingを導入し、2024年にTools APIへ進化させた。

  • tools パラメータ: tools配列に関数定義(名前・説明・パラメータスキーマ)を記述
  • tool_choice: "auto"(モデル判断)、"required"(必ず呼び出し)、{type: "function", function: {name: "..."}}(特定関数指定)から選択
  • 並列呼び出し(Parallel Function Calling): GPT-4o以降、1回のレスポンスで複数の関数を同時に呼び出し可能。parallel_tool_calls: true(デフォルト有効)
  • Strict Mode: strict: trueで引数がJSON Schemaに100%準拠することを保証

Anthropic Tool Use

Anthropicは2024年4月にTool Use(旧Function Calling)をClaude 3で導入した。

  • tools パラメータ: tools配列にツール定義(name・description・input_schema)を記述。input_schemaはJSON Schema形式
  • tool_choice: {type: "auto"}(モデル判断)、{type: "any"}(いずれかのツールを必ず呼び出し)、{type: "tool", name: "..."}(特定ツール指定)
  • 並列ツール呼び出し: Claude 3.5以降で対応。1つのレスポンスブロック内に複数のtool_useコンテンツブロックが含まれる
  • ストリーミング: content_block_start/content_block_deltaイベントでツール呼び出しの部分データをリアルタイム受信可能
  • Claude 4の強化点: discriminated union型への対応、再帰的スキーマ(深度制限付き)、ツール結果のキャッシュ最適化

Google Gemini Function Calling

GeminiはfunctionDeclarationsでツール定義を行う。

  • Tool定義: tools配列内のfunctionDeclarationsに関数名・説明・パラメータ(OpenAPI 3.0形式)を記述
  • toolConfig: function_calling_configでmodeを指定(AUTO/ANY/NONE)。allowed_function_namesで呼び出し可能な関数を制限可能
  • 並列呼び出し: Gemini 2.0以降で対応
  • Code Execution: Function Callingに加え、Geminiはサンドボックス内でPythonコードを実行するcode_executionツールも提供
機能OpenAIAnthropicGeminiMistral
基本FC○ tools API○ Tool Use○ functionDeclarations○
並列呼び出し○ (GPT-4o+)○ (Claude 3.5+)○ (Gemini 2.0+)○
Strict Mode○ strict: true○ input_schema○ responseSchema×
ストリーミング○○ content_block○○
ツール結果キャッシュ○○ (Claude 4)△×
最大ツール数1286412864

Function Callingの実装パターン

基本的な実装フロー

  1. ツール定義をAPIリクエストに含める
  2. モデルがツール呼び出しを含むレスポンスを返す
  3. アプリケーションがツールを実行し結果を取得
  4. ツール実行結果をモデルに返す(tool_result / function role)
  5. モデルが最終回答を生成

マルチターン・ツールチェーン

1つのタスクを完遂するために複数のツールを順次呼び出すパターン。

  • 逐次呼び出し: 検索→データ取得→計算→書式化のように、前のツール結果を次のツール引数に使う
  • 条件分岐: ツール結果に基づいてモデルが次のアクションを判断。if/else的な制御フローをLLMが自律的に実行
  • ループ: 結果が不十分な場合にパラメータを変更して再呼び出し。最大ループ回数の制限が推奨される

エージェント開発での活用

Function Callingは LLM エージェントの「手」として機能する。

  • ReAct パターン: Reasoning(推論)とAction(ツール呼び出し)を交互に繰り返す。各ステップでモデルが「次に何をすべきか」を推論し、適切なツールを選択
  • Plan-and-Execute: まず全体計画を立て、計画に沿ってツールを順次実行。OpenAI Assistants API のRun機能がこのパターンをネイティブ実装
  • Multi-Agent: 複数のエージェントが異なるツールセットを持ち、協調してタスクを遂行。AutoGen・CrewAI・LangGraphなどのフレームワークが対応

セキュリティと注意点

  • プロンプトインジェクション: ツール引数にユーザー入力が混入すると、意図しないツール呼び出しが発生するリスク。入力のサニタイズとツール実行前のバリデーションが必須
  • 過剰な権限付与: ツールに削除・更新などの破壊的操作権限を与える場合は、確認ステップを挟む設計が推奨される
  • レート制限: 並列呼び出しで外部APIを大量に叩く場合、レート制限やコスト管理の仕組みが必要
  • ハルシネーション: モデルが存在しない関数名や不正な引数を生成することがある。tool_choiceの適切な設定とスキーマバリデーションで軽減

よくある質問(FAQ)

Q1: Function CallingとTool Useの違いは何ですか? A: 技術的には同じ概念で、プロバイダによる呼称の違いである。OpenAIは「Function Calling」から「Tools API」に移行し、Anthropicは一貫して「Tool Use」と呼んでいる。GoogleのGeminiは「Function Calling」を使用。いずれもLLMが構造化されたツール呼び出しリクエストを生成する機能を指す。

Q2: 並列Function Callingのメリットは何ですか? A: 独立した複数のデータ取得を1回のAPIコールで同時に実行できるため、レイテンシとAPIコール数を削減できる。例えば天気情報と株価情報を同時に取得する場合、逐次呼び出しでは2ラウンドトリップかかるが、並列呼び出しでは1ラウンドトリップで完了する。

Q3: Function Callingで定義できるツール数の上限はありますか? A: OpenAIは最大128ツール、Anthropicは最大64ツールが実用上の上限。ただし、ツール数が増えるとモデルの選択精度が低下する傾向がある。実用的には20〜30ツール以内に抑え、必要に応じてツールのルーティング層を設ける設計が推奨される。

まとめ

  • Function Calling / Tool Useは、LLMが外部関数を呼び出すための構造化リクエストを生成する機能
  • OpenAI Tools API、Anthropic Tool Use、Gemini Function Callingの3社が主流
  • 並列呼び出し・Strict Mode・ストリーミング対応が2026年の標準スペック
  • LLMエージェント開発(ReAct・Plan-and-Execute・Multi-Agent)の基盤技術
  • セキュリティ(プロンプトインジェクション・権限管理)への配慮が重要