Function Calling
Function Callingとは
Function Calling(関数呼び出し)は、[[生成AI・LLM]] に**「どの関数を、どんな引数で呼びたいか」を構造化データで出力させる仕組みです。LLM は文章を生成することしかできませんが、この仕組みにより「天気APIを呼ぶ」「データベースを検索する」といった外部機能の利用を指示**できるようになります。
重要なのは、関数を実行するのは LLM ではなくアプリケーション側だという点です。LLM はあくまで「この関数をこの引数で呼んでください」というリクエストを出力するだけです。
動作の流れ
- アプリが LLM に、質問と一緒に使える関数の定義(名前・説明・引数の形式)を渡す
- LLM が必要と判断すると、通常の文章の代わりに関数呼び出しの指示を [[JSON]] 形式で出力する
- アプリがその指示どおりに関数を実行する(APIを呼ぶ、DBを検索する、など)
- 実行結果を LLM に返す
- LLM が結果を踏まえて最終的な回答文を生成する
{
"name": "get_weather",
"arguments": { "city": "Tokyo", "unit": "celsius" }
}
このような構造化された出力なので、アプリ側が機械的に処理できます。
なぜ重要なのか
- 最新情報・社内データへのアクセス — 学習データにない情報を、APIやDB経由で取得して回答できます
- 行動できるAI — 「調べる」だけでなく「予約する」「登録する」など実世界への操作が可能になります
- [[AIエージェント]] の基礎 — 「考えて → 道具を使い → 結果を見てまた考える」ループは Function Calling の繰り返しで実現されています
初学者向けポイント
- 関数の説明文の書き方が精度を左右します。LLM は説明文を読んで「いつこの関数を使うべきか」を判断するためです
- LLM が引数を間違えることもあるため、実行前のバリデーションは必須です
- 削除や送金のような影響の大きい操作は、人間の確認を挟む設計が安全です。ツール接続の標準化については [[MCP(Model Context Protocol)]] も参照してください
関連技術とのつながり
- [[生成AI・LLM]] — Function Calling は LLM の出力形式の拡張
- [[AIエージェント]] — Function Calling のループがエージェントの行動を実現する
- [[MCP(Model Context Protocol)]] — ツール接続を標準化する上位の仕組み
- [[JSON]] — 関数呼び出し指示の記述形式
- [[REST API]] — 呼び出し先としてよく使われる外部機能
- [[プロンプトインジェクション]] — 外部データの指示で意図しないツール実行が起きる
Q: Function Callingで関数を実際に実行するのは誰?
- [ ] LLM自身
- [x] アプリケーション側
- [ ] エンドユーザー
解説: LLM は「どの関数をどんな引数で呼ぶか」の指示を出力するだけで、実行するのはアプリ側です。
Q: LLMが関数呼び出しの指示を出力する形式はどれ?
- [x] JSONなどの構造化データ
- [ ] 音声データ
- [ ] 画像データ
解説: 関数名と引数を構造化データで出力するため、アプリ側が機械的に解釈して実行できます。
Q: 影響の大きい操作(削除や送金など)をFunction Callingで扱うときの適切な設計はどれ?
- [ ] LLMの判断を信頼して自動実行する
- [ ] バリデーションを省略して高速化する
- [x] 実行前に引数を検証し、人間の確認を挟む
解説: LLM は引数を間違えることがあるため、検証と人間の確認を挟むのが安全な設計です。