Function Calling(ファンクションコーリング)とは?読み方・仕組み・実装例を徹底解説

Function Calling (ファンクションコーリング)

Function Calling(ファンクションコーリング)とは

Function Calling(ファンクションコーリング)とは、大規模言語モデル(LLM)が事前に定義された外部関数やAPIを、自然言語の指示から適切に「選んで・引数を作って・呼び出す」ための仕組みのことです。OpenAIが2023年6月に最初に正式リリースし、その後AnthropicのTool Use、GoogleのGemini Function Calling、MetaのLlama Toolsなど各社が同様の機能を実装したことで、2026年現在ではLLMアプリ開発の標準機能になっています。Agentic AIやMCPの土台として、最も重要なプリミティブのひとつです。

身近な例えでいうと、Function CallingはLLMに「使える道具箱」を渡すようなイメージです。ユーザーが「明日東京の天気を教えて」と聞いたとき、モデルは自分で天気を知っているふりをするのではなく、道具箱の中から「天気API」を選び、`{“city”: “Tokyo”, “date”: “2026-04-15”}` という引数を作って開発者に返します。開発者はその引数で実際のAPIを呼び、結果をLLMに戻すと、LLMが最終的な返答を生成します。ここが重要なポイントで、LLMは「道具を使う判断」だけを行い、実際の実行は外部に任せる責任分担になっています。

Function Callingの読み方

ファンクションコーリング

ツール呼び出し

ツールユース(Tool Use)

Function Callingの仕組み

Function Callingの実行は以下の流れで進みます。注意してほしいのは、LLM自体は関数を実行しない点です。LLMは「この関数をこの引数で呼ぶべき」という意思決定だけを返し、実際のコード実行はアプリケーション側が担当します。

Function Callingの基本フロー

① ツール定義を渡す
② LLMが呼出選択
③ アプリが実行
④ 結果をLLMに戻す
⑤ LLMが最終応答

ツール定義(JSON Schema)

関数の「名前・説明・引数スキーマ」をJSON Schema形式でLLMに渡します。LLMはこの定義を読み取り、ユーザーの入力に応じて「どの関数を使うか」「どんな引数にするか」を判断します。スキーマが明確で簡潔なほど、LLMの選択精度は上がります。

引数の自動生成

LLMは文脈から引数の値を推論します。例えば「明日3時から東京でミーティングをカレンダーに入れて」という入力から、`{“title”: “ミーティング”, “start”: “2026-04-15T15:00:00+09:00”, “location”: “東京”}` を自動生成できます。実務では、この引数生成の精度がモデルの品質を決める大きな要素です。

ループと再呼び出し

1回の呼び出しで終わらない場合、LLMが結果を観測してさらに別のツールを呼び出す「エージェントループ」になります。これがAgentic AIの基本動作です。覚えておきましょう。

Function Callingの使い方・実例

以下はOpenAIのPython SDKでのシンプルな実装例です。天気を取得するツールを1つ定義し、LLMに選ばせるパターンです。

from openai import OpenAI
import json

client = OpenAI()

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "指定都市の天気を取得する",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "都市名"},
                "date": {"type": "string", "description": "YYYY-MM-DD"}
            },
            "required": ["city"]
        }
    }
}]

messages = [{"role": "user", "content": "明日の東京の天気は?"}]

response = client.chat.completions.create(
    model="gpt-4.1",
    messages=messages,
    tools=tools
)

msg = response.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    args = json.loads(call.function.arguments)
    # 実際のAPI呼び出し
    result = fetch_weather(args["city"], args.get("date"))
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps(result)
    })
    final = client.chat.completions.create(model="gpt-4.1", messages=messages, tools=tools)
    print(final.choices[0].message.content)

このコードでLLMが `get_weather` を選び、引数を自動生成して返してきます。アプリ側で実際のAPIを呼び、結果を戻すと、最終的な自然言語の応答が得られます。

主要プロバイダの仕様比較

プロバイダ 呼称 特徴
OpenAI Function Calling / Tools 最も歴史が長い。並列呼び出し対応
Anthropic Tool Use XMLベースのchain-of-thoughtで判断根拠が見える
Google Function Calling OpenAPIスキーマ直接対応
Meta Llama Tools OSS、ローカル実行可能

Function Callingのメリット・デメリット

メリット

  • LLMが実世界と接続できる:API呼び出し、DB参照、ファイル操作をLLMのふるまいに組み込める。
  • 構造化出力が保証される:JSON Schemaに従った確実な引数が得られるため、パース失敗のリスクが激減する。
  • ハルシネーションを減らせる:数値計算や最新情報は外部関数に任せることで誤情報を防げる。
  • 標準化された共通IF:各社仕様は似ており、ツールの移植性が高い。

デメリット

  • 誤った関数選択のリスク:似たような関数が多いと誤選択する。定義の明確さが重要です。
  • 引数の誤生成:型や値域の誤りが起きうるため、アプリ側でバリデーションが必須。注意してください。
  • レイテンシが増える:ツール呼び出し→結果戻し→再推論で複数回のAPI呼出しが必要。
  • ツール数の上限:多すぎるとLLMが混乱する。15〜20個が実務の上限。

Function Callingと従来APIの違い

Function Callingは「LLMが関数を選ぶ」仕組みである点が最大の特徴です。従来はアプリ開発者が `if ユーザーが天気を聞いたら → fetch_weather を呼ぶ` というコードを書いていましたが、Function CallingではルーティングをLLMに任せられるようになりました。この違いを理解しておきましょう。

観点 Function Calling 従来のルーティング
分岐ロジック LLMが判断 if/else で手書き
柔軟性 自然言語に対応 定型文のみ
開発工数 スキーマ定義のみ パーサ+分岐

よくある誤解

誤解1:LLMが実際に関数を実行している

実行しません。LLMは「この関数をこの引数で呼ぶべき」という判断を返すだけで、実際のコード実行は必ずアプリケーション側が行います。ここがセキュリティ設計上も重要なポイントです。

誤解2:Function CallingはFine-tuningの代替

目的が違います。Function Callingは外部知識を呼び出す方法、Fine-tuningはモデル自体の振る舞いを変える方法です。単純比較ではなく、用途で使い分けるのが実務です。

誤解3:関数定義を多く渡すほど賢くなる

逆です。関数が多すぎるとLLMが選択を誤ります。実務では15〜20個までに絞るのが経験則です。タスク別にツールセットを切り替える設計が推奨されます。

実務での活用シーン

チャットボットの機能拡張

CRMやDB・在庫システムと連携し、「この顧客の未払金額は?」のような質問に自律応答できます。サポートBotの完成度を大きく上げる技術です。

データ分析ツール

「2025年の売上を地域別に見せて」のような自然言語リクエストから、SQL生成→実行→可視化までを自動化できます。BIツールのインターフェースがチャット化している背景にはこれがあります。

ワークフロー自動化

Slack・メール・カレンダー・Jiraなど複数サービスを横断する作業を、自然言語指示からこなせます。MCPやNotion AIもこの系統です。

ローカル開発エージェント

Claude CodeやGitHub Copilot Workspaceは、`read_file` `edit_file` `run_tests` のようなツールを通じてコードベースを操作します。これもFunction Callingの応用です。

よくある質問(FAQ)

Q1. Function CallingとMCPの違いは?

Function Callingは「LLM APIの機能」、MCPは「ツールを共通IFで接続するプロトコル」です。MCPを使うとFunction Callingで呼ぶツール定義を標準化できます。

Q2. 並列呼び出しはできますか?

OpenAIやAnthropicは並列ツール呼び出し(Parallel Tool Calling)に対応しており、独立したツールを同時に呼ぶことでレイテンシを短縮できます。

Q3. セキュリティで気をつけるべきことは?

LLMが危険なツール(`delete_user`等)を選ばないよう、ツールのスコープ制限・人間承認・権限別ツールセットが必須です。

Q4. ローカルLLMでも使えますか?

LlamaやMistralの一部、Qwenなど最新のOSSモデルはFunction Callingに対応しています。Ollamaや vLLM 経由で扱えます。

まとめ

  • Function Calling(ファンクションコーリング)は、LLMが外部関数を構造化された形で呼び出す仕組み。
  • 読み方は「ファンクションコーリング」、別名「ツール呼び出し」「Tool Use」。
  • OpenAI・Anthropic・Google・Metaが各自の仕様で提供。
  • ツール定義(JSON Schema)→ LLM判断 → アプリ実行 → 結果返却 → 最終応答のフロー。
  • Agentic AIやMCPの基盤技術。
  • メリットは実世界接続と構造化出力、デメリットは誤選択リスクとレイテンシ。
  • 実務ではバリデーション・スコープ制限・ツール数の絞り込みが品質を左右する。

参考文献・出典

📚 参考文献・出典

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA