ゲスト

マスターレッスン / Level 5 — API / レッスン 5-3

Level 5 — API

Function Calling(関数呼び出し)

所要時間: 10分  |  更新: 2026-05-06

Function Calling(関数呼び出し)

要約 — このレッスンの要点

  • 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 を使う場合の基本的なやりとりは以下の順序です。

  1. アプリがツール定義を添えて GPT にリクエスト送信
  2. GPT が finish_reason: "tool_calls"tool_calls を返す
  3. アプリが tool_callsnamearguments を読み取り、対応する関数を実行
  4. 実行結果を role: "tool" のメッセージとしてメッセージ配列に追加し、再度 API に送信
  5. GPT が最終的な回答テキストを生成して返す

詳細な実装手順はOpenAI: Function Calling Guide を参照してください。

tool_choice でツール使用を制御する

tool_choice パラメータで GPT のツール選択を制御できます。

  • "auto"(デフォルト) — モデルがツールを使うかどうかを判断する
  • "required" — 提供されたツールのいずれかを必ず使う
  • {"type": "function", "function": {"name": "..."}} — 指定したツールを必ず使う
  • "none" — ツールを使わない

ツール設計のポイント

description はモデルがツールをいつ使うかを判断する最大の根拠です。 「何をするか」「いつ使うべきか」「何を返すか」を 3〜4 文以上で丁寧に書くと、 精度が大幅に向上します。

また、parameters の各プロパティに具体的な descriptionenum を添えるほど、 正確な引数生成が期待できます。

さらに深く読む