マスターレッスン / Level 5 — API / レッスン 5-3
Level 5 — APIFunction Calling(関数呼び出し)
所要時間: 10分 | 更新: 2026-05-06

要約 — このレッスンの要点
- Function Calling とは、GPT がユーザー定義の外部関数を呼び出せる仕組み。モデルが判断し、実行はアプリ側が行うという役割分担が基本。
- ツールは JSON Schema で定義する。
name/description/parametersの 3 項目が必須。 - モデルが関数呼び出しを返したら、アプリ側で関数を実行して結果をメッセージとして送り返す。この往復を agentic loop と呼ぶ。
- OpenAI 提供のビルトインツール(Web 検索・コードインタプリタ等)もあり、API レベルで透過的に呼び出せる。
- コード例はOpenAI: Function Callingを一次情報とする。
Function Calling の仕組み
GPT はテキスト生成に特化した言語モデルです。しかし Function Calling を使うと、 GPT がリアルタイムのデータ取得・計算・外部サービスへの操作を「依頼」できます。 実際の処理はアプリ側が担い、GPT は「何をいつ呼ぶか」を判断する役割を担います (OpenAI: Function Calling 参照)。
ツール定義(JSON Schema)
ツールは tools パラメータに配列で渡します。
各ツールの parameters は JSON Schema 形式で記述します。
# ツール定義の例(Python / Chat Completions スタイル)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の現在の天気を取得します。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "都市名。例: Tokyo, Japan",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度単位",
},
},
"required": ["location"],
},
},
}
]
Python — 最小コード例
以下は公式ドキュメントのコード例に準拠した構成です。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "東京の天気を教えてください"}],
tools=tools, # 上記で定義したツール
)
choice = completion.choices[0]
print(choice.finish_reason) # => "tool_calls"
print(choice.message.tool_calls) # 関数呼び出しの配列
Responses API でも同様に tools パラメータでツール定義を渡せます(API バージョンによりフィールド名が異なる場合があるため公式ドキュメントを確認)。
agentic loop の流れ
Function Calling を使う場合の基本的なやりとりは以下の順序です。
- アプリがツール定義を添えて GPT にリクエスト送信
- GPT が
finish_reason: "tool_calls"とtool_callsを返す - アプリが
tool_callsのnameとargumentsを読み取り、対応する関数を実行 - 実行結果を
role: "tool"のメッセージとしてメッセージ配列に追加し、再度 API に送信 - GPT が最終的な回答テキストを生成して返す
詳細な実装手順はOpenAI: Function Calling Guide を参照してください。
tool_choice でツール使用を制御する
tool_choice パラメータで GPT のツール選択を制御できます。
"auto"(デフォルト) — モデルがツールを使うかどうかを判断する"required"— 提供されたツールのいずれかを必ず使う{"type": "function", "function": {"name": "..."}}— 指定したツールを必ず使う"none"— ツールを使わない
ツール設計のポイント
description はモデルがツールをいつ使うかを判断する最大の根拠です。
「何をするか」「いつ使うべきか」「何を返すか」を 3〜4 文以上で丁寧に書くと、
精度が大幅に向上します。
また、parameters の各プロパティに具体的な description と enum を添えるほど、
正確な引数生成が期待できます。