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の基本フロー
ツール定義(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で判断根拠が見える |
| 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の基盤技術。
- メリットは実世界接続と構造化出力、デメリットは誤選択リスクとレイテンシ。
- 実務ではバリデーション・スコープ制限・ツール数の絞り込みが品質を左右する。
参考文献・出典
📚 参考文献・出典
- ・OpenAI「Function calling」 https://platform.openai.com/docs/guides/function-calling
- ・Anthropic「Tool use」 https://docs.anthropic.com/en/docs/build-with-claude/tool-use
- ・Google「Gemini Function Calling」 https://ai.google.dev/gemini-api/docs/function-calling
- ・JSON Schema 公式 https://json-schema.org/
- ・OpenAI Cookbook「How to call functions with chat models」 https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models
Read this article in English:
What Is Function Calling? Meaning, Pronunciation, and How It Works →



































コメントを残す