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形式で返す。

ここで重要なのは、モデル自身が関数を実行するわけではないという点だ。モデルはあくまで「どの関数をどんな引数で呼び出すべきか」という指示をテキストとして返す。実際の関数実行は開発者のコード側が担い、その結果を再びモデルに渡すことで最終的な回答を生成する。

会話の流れ

  1. ユーザー: 「東京の今日の天気は?」
  2. モデル: {"function": "get_weather", "arguments": {"city": "Tokyo"}} を返す
  3. コード: get_weather("Tokyo") を実行し「晴れ、気温28度」という結果を得る
  4. コード: その結果をモデルに渡す
  5. モデル: 「東京は今日晴れで、気温は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エージェントの自律性を高める基盤技術として、今後さらに重要性が増す分野だ。