「LLMってネットに繋がってないのに、なんで天気とか調べられるの?」
そう思ったことありませんか?実は ChatGPT や Claude がリアルタイム情報を取ってこられる裏側には、Function Calling(関数呼び出し) という仕組みがあります。今回はその内部動作を、できるだけかみ砕いて解説していきます! 🔍
Function Calling とは?ざっくりいうと

イメージとしては、「LLMが自分で実行できないことを、外部ツールにお願いするための”指示書”を書く」感じです。
たとえば「東京とベルリンの天気を比べて」と聞いたとき、LLM自体はインターネットにアクセスできません。でも 「このAPIをこの引数で呼んでね」という構造化された指示を出力する ことはできます。実際の API 呼び出しはアプリ側が行い、結果をまた LLM に渡す、という流れです。
トークンレベルで何が起きているか
LLM が Function Calling を行うとき、内部ではざっくりこんな流れが起きています。
- ユーザーのメッセージを受け取る
- 利用可能なツール(関数)の定義を一緒にプロンプトへ埋め込む
- モデルが「ツールを呼ぶべき」と判断したら、JSON 形式のツール呼び出し指示をトークンとして出力する
- アプリ側がその JSON を解析して実際の関数を実行する
- 実行結果を「ツールの返答」としてモデルに渡す
- モデルが最終的な回答を生成する
つまり、LLM が直接 API を叩いているわけではないんですよね。あくまでも「何をどう呼ぶか」を決めているのがモデルの役割です。
実際のコードで見てみよう(OpenAI API の例)
OpenAI の API を使った簡単なサンプルで確認してみましょう。ポイントは tools パラメータにツール定義を渡すところです 👇
import openai
import json
client = openai.OpenAI()
# 🔧 ツール(関数)の定義
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名(例: Tokyo, Berlin)"
}
},
"required": ["city"]
}
}
}
]
# 💬 ユーザーからの質問
messages = [
{"role": "user", "content": "東京とベルリンの天気を教えて"}
]
# 🤖 モデルにツール付きでリクエスト
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto" # モデルが自動でツールを選ぶ
)
# 📦 モデルがツール呼び出しを選んだ場合の確認
tool_calls = response.choices[0].message.tool_calls
if tool_calls:
for call in tool_calls:
func_name = call.function.name
args = json.loads(call.function.arguments)
print(f"呼び出す関数: {func_name}")
print(f"引数: {args}")
ポイントをまとめるとこんな感じです。
- ✅ tools に関数のスキーマ(仕様)を渡す ことで、モデルが何を呼べるか把握する
- ✅ モデルは JSON 形式で「どの関数をどの引数で呼ぶか」を返してくる
- ✅
tool_choice="auto"でモデルが自動判断してくれる - ✅ 実際の関数実行はアプリ側の責任(モデルはあくまで指示を出すだけ)
並列呼び出しもできる!
冒頭の「東京とベルリンの天気を比べて」というケースでは、同じターンで2回の関数呼び出しが発生します。最近のモデルは Parallel Function Calling(並列ツール呼び出し)に対応しており、tool_calls の配列に複数のツール呼び出しが含まれることがあります。これがいわゆる ツールオーケストレーション(複数ツールの協調制御)の入口になります 🎻
まとめ
LLM の Function Calling は「モデルが直接 API を叩く」のではなく、「モデルが呼び出し指示をトークンとして出力 → アプリが実行 → 結果をモデルへ返す」 というループで動いています。この仕組みを理解しておくと、AI エージェントや自動化ツールの設計がグッとやりやすくなりますよ。ぜひ手元で動かしながら試してみてください! 🚀
📡 Arduinoをもっと深く学ぼう!
Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。





