LLM Function Calling(エルエルエム ファンクション コーリング)
LLMが外部ツール・APIを呼び出せるようにする機能。モデルはユーザーの意図に応じてJSON形式の関数呼び出し命令を生成し、アプリ側がその結果を受け取って実行する。OpenAI GPT-4・Claude・Geminiが対応する。
概要
LLM Function Calling(関数呼び出し)は、大規模言語モデルが事前に定義された外部ツールや関数を呼び出す命令をJSON形式で生成する機能である。2023年6月にOpenAIがGPT-4/GPT-3.5-turboに導入し、以降Anthropic(Claude Tool Use)・Google(Gemini Function Calling)・Mistral・Llamaファミリーへと普及した。
従来のLLMはテキスト生成に特化していたが、Function Callingにより外部API・データベース・コードインタープリタ・Webブラウザなどのツールを呼び出せるようになり、「AIエージェント」の実装が現実的になった。2025年現在、主要なLLM APIすべてが何らかの形でFunction Calling/Tool Useをサポートする。
動作の仕組み
- 関数定義: 開発者がJSONスキーマ形式で使用可能な関数一覧をモデルに渡す
- 意図判定: モデルがユーザー入力を解析し、必要な関数とパラメータを特定
- 呼び出し命令生成: モデルが
{"name": "get_weather", "arguments": {"city": "Tokyo"}}形式のJSONを出力 - アプリ側実行: アプリが実際の関数を実行してAPIを叩く
- 結果フィードバック: 実行結果をモデルに返し、最終回答を生成
主要プロバイダの実装比較表
| プロバイダ | 名称 | 並列呼び出し | ストリーミング | 最大関数数 |
|---|---|---|---|---|
| OpenAI | Function Calling | ○(Parallel) | ○ | 128 |
| Anthropic | Tool Use | ○ | ○ | 64 |
| Function Calling | ○ | ○ | 64 | |
| Mistral | Tool Calling | ○ | ○ | 制限なし |
| Ollama(Llama 3.1) | Tool Use | △ | △ | モデル依存 |
実装例(OpenAI Python SDK)
import openai
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の現在の天気を取得",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "都市名"}
},
"required": ["city"]
}
}
}]
response = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "東京の天気は?"}],
tools=tools
)
# response.choices[0].message.tool_calls でJSON呼び出し命令を取得
Parallel Function Calling
GPT-4o・Claude 3.5・Gemini 1.5は複数の関数を同時並列で呼び出す命令を1回のレスポンスで生成できる。例えば「東京と大阪と名古屋の天気を比較して」という質問に対し3つの天気API呼び出しを同時に生成し、レイテンシを1/3に短縮できる。
ユースケース
- RAGの強化: VectorDB検索関数を渡してリアルタイム知識取得
- CRMツール: Salesforce/HubSpotのAPIを関数として定義し、自然言語でCRM操作
- コードアシスタント: コード実行環境をツールとして渡してデバッグ自動化
- マルチエージェント: 複数のAIエージェントが関数として互いを呼び出すシステム構築
よくある質問(FAQ)
Q1: Function CallingとTool Useの違いは何ですか? A: 実質的に同じ概念で、OpenAIが「Function Calling」、AnthropicとGoogleが「Tool Use」と呼んでいます。仕様の細部が異なりますが、外部関数を呼び出す命令をJSONで生成する機能として同等です。
Q2: ローカルLLM(Ollama等)でも使えますか? A: Llama 3.1/3.2・Mistral・Qwen2.5等のOSSモデルはFunction Calling対応ですが、GPT-4oやClaude 3.5に比べ精度が低い傾向があります。llama.cpp/Ollamaでもtool_callsパラメータで利用可能です。
Q3: 悪意ある関数を定義されるリスクはありますか? A: Prompt Injectionでモデルを騙して意図しない関数を呼び出させる攻撃が存在します。ツール定義の検証・実行前の確認ステップ・サンドボックス実行環境の整備が重要です。
まとめ
- LLM Function Callingは外部API・ツールをJSONで呼び出す命令をモデルが生成する機能
- OpenAI/Anthropic/Google/Mistralの主要LLM全てが2025年時点でサポート
- Parallel Function Callingで複数ツールを同時呼び出ししレイテンシを削減
- AIエージェント・RAG強化・CRMツール統合の中核技術として急速に普及