ChatGPTやClaudeのようなLLM(大規模言語モデル)は、文章を作るのは得意でも、それ単体では「今日の天気を調べる」「社内システムに発注する」といった実際の行動はできません。この壁を越えて、LLMに外部のツールやAPIを呼び出させる仕組みが Function Calling(ファンクションコーリング) です。Anthropicなどは同じ仕組みを Tool Use(ツール使用) と呼んでいます。
Function Callingは、いま話題のAIエージェントやMCPを支える土台にあたる、地味だが極めて重要な技術です。この記事では、Function Callingとは何か、LLMがどうやって外部ツールを呼び出すのか、その仕組みと使いどころを、Anthropicの公式ドキュメントなどをもとに非専門家向けに整理します。前提となるLLMの基礎とあわせて読むと理解が深まります。
なぜ必要か:LLM単体には「行動する力」がない
LLMは、与えられた文章の続きを予測して自然な文章を生み出すことに特化したAIです。膨大な知識を持っていますが、その知識は学習した時点で止まっており、「リアルタイム情報の取得や計算、外部システムとの連携はできない」3という限界があります。たとえば「今日の東京の天気は?」と聞いても、LLM自身は気象データにアクセスできません。
ここを補うのがFunction Callingです。NTTPCの解説は、これを「ユーザーの入力からLLMが『特定のツール(関数)』の実行が必要かどうかを判断し、必要な引数を関数に渡す仕組み」2と説明しています。天気APIや検索、社内の在庫システムといった「外部の道具」をLLMに使わせることで、Tool Useにより「LLMが外部ツールを呼び出せるようになり、実用的なアプリケーションの幅が大きく広がる」3わけです。文章を作るだけのAIが、調べたり計算したり手続きを進めたりと、行動できるシステムへと変わります。
仕組み:LLMは「どの道具を使うか」を決め、実行はアプリ側
Function Callingで最も大切なのは、LLMが実際にプログラムを実行しているわけではないという点です。役割は2つに分かれています。
NTTPCの解説によれば、おおまかな流れは次の4ステップです2。
- ユーザーが指示を出す(例:「ニューヨークの観光スポットを3つ教えて」)
- LLMが必要な関数(例:観光スポット取得の関数)を選び、引数を指定する
- 関数が実行され、APIから結果を取得する
- LLMが結果を自然言語に変換して返答する
このうちLLMが担当するのは、2の「どの関数を、どんな引数で呼ぶべきか」を決める部分だけです。別の技術解説も、LLMが行うのは「ツール選択」と「パラメータ抽出」であり、「実際のツール実行はアプリケーション側で担当します」3と整理しています。
LLMはこの判断結果を、人間向けの文章ではなく 構造化されたJSON という決まった形式で返します。たとえば {"tool": "ツール名", "arguments": {"パラメータ名": "値"}} のような形で関数名と引数を明示し、それを受け取ったプログラム側が実際に関数を実行する、という分業です3。LLMは「司令塔」として何をすべきか指示を出し、実行という「手足」はアプリケーションが担う——この役割分担が、Function Callingの核心です。
クライアントツールとサーバーツール
Anthropicの公式ドキュメントは、ツールの実行場所によって2種類に分けて整理しています。
ひとつは クライアントツール で、これはアプリ側で実行されます。Claudeはツールを使うべきと判断すると stop_reason: "tool_use"(ツール使用で停止した、という合図)と、呼び出す内容を記した tool_use ブロックを返します。アプリのコードがその操作を実行し、結果を tool_result として返すと、Claudeがそれを踏まえて回答を続けます1。自社の在庫システムや独自APIを使わせたい場合がこれにあたります。
もうひとつが サーバーツール で、Web検索やコード実行など、Anthropicのインフラ上で実行され結果が直接返るタイプです1。アプリ側で実行処理を書く必要がありません。
呼び出すかどうかの判断も制御できます。標準設定では tool_choice が auto になっており、Claudeは毎回「ツールを呼ぶか、そのまま答えるか」を自分で判断します。リクエストがツールの能力に合致し、答えがまだ手元の情報にない場合にツールを呼び、安定した知識や創造的なタスク、雑談のようなやり取りには直接答えます1。なお、ツール定義に strict: true を加えると、Claudeのツール呼び出しが必ず指定したスキーマ(形式)どおりになることが保証されます1。
RAGとの使い分け
外部の情報をLLMに使わせる技術としては、RAG(検索拡張生成)もよく知られています。両者は似て非なるもので、目的が異なります。
NTTPCの整理では、Function Callingの目的は「処理を実行する」こと、RAGの目的は「出力精度の向上」です2。RAGは社内文書やFAQから関連情報を探してきてLLMの回答の正確さを高める仕組みであるのに対し、Function Callingは発注や予約のように実際に何かを実行させる仕組み、という違いです。
両者は排他的ではなく、組み合わせも有効です。NTTPCは、RAGで在庫情報を検索し、その結果をもとにFunction Callingで不足分を自動発注する、といった「組み合わせ運用」を例に挙げています2。調べる(RAG)と動く(Function Calling)を連携させることで、より実用的なAIアプリケーションが組み立てられます。
AIエージェントとMCPの土台として
Function Callingの重要性は、それ自体の便利さ以上に、近年のAI活用の潮流を支える基盤になっている点にあります。
LLMが自律的にタスクを進めるAIエージェントは、「状況を見て次にどのツールを使うかを判断し、実行し、結果を見てまた次を考える」という動作を繰り返します。この一つひとつのツール呼び出しを成り立たせているのがFunction Callingです。Anthropic自身も、ツールを使えるようにすることはエージェントに与えられる最も効果の大きい要素のひとつだと位置づけています1。
また、ツールやデータソースへの接続を標準化するMCP(Model Context Protocol)も、その先でLLMがツールを呼び出す部分はFunction Callingの考え方の上に成り立っています。AIエージェントやMCPといった話題を追うとき、その根っこに「LLMがどの道具をどう使うかを判断し、実行はアプリが担う」というこの分業があると知っておくと、それぞれの技術が何を解決しているのかが見通しやすくなります。
Sources
- Tool use with Claude - Anthropic公式ドキュメント(tool_use/tool_result・tool_choiceの仕様)
- Function CallingでLLMを「業務アシスタント」に!RAGとの使い分け、導入の課題、最新動向を解説 - NTTPCによる日本語解説
- Tool Use / Function Callingの仕組みと実装 - 技術ブログ「機械学習と情報技術」による日本語解説