developers.openai.com/api/docs/guides/function-calling、2026年6月時点)を基にしています。両方のエンドポイント向けの例は、そのままコピーして使えます。
完全なコールループ
1
関数を定義する
関数名、説明、パラメータ JSON Schema をリクエストと一緒に送信します
2
モデルが呼び出しを返す
モデルが呼び出しを行うと判断すると、関数名と JSON 引数を返します
3
ローカルで実行する
コードが引数をパースし、実際に関数を実行します(DB を照会する、外部 API を呼び出す…)
4
結果を送り返す
結果を会話とともに 2 回目のリクエストで送信すると、モデルはそれに基づいて回答します
2 つのエンドポイント間のキー形式の違い
同じ機能ですが、/v1/chat/completions と /v1/responses ではフィールド形式が異なります。これが最もよくある統合の落とし穴です:
Chat Completions の完全な例
完全な define → call → execute → return ループを通じた天気の検索:完全な例: 応答
3つの違いに注目してください。ツール定義はフラットで、呼び出しはトップレベルのfunction_call アイテムとして返され、結果は function_call_output として返されます。previous_response_id を使うと、2回目のリクエストで完全な履歴を再送する必要はありません:
strict モード (構造化出力)
strict: true は、モデルの引数が JSON Schema に厳密に一致する ことを保証します — 幻覚によるフィールドや欠落したフィールドはありません。要件は 3 つです:
- スキーマには
"additionalProperties": falseを含める必要があります - すべてのフィールドは
requiredに必ず含める必要があります(オプションは"type": ["string", "null"]で表します) - サポートされている JSON Schema のサブセットのみ(基本型、enum、配列、ネストされたオブジェクト、…)
parallel_tool_calls と tool_choice
並列呼び出し
parallel_tool_calls はデフォルトでオンです: モデルは1回のターンで複数の関数を要求できます(例: 北京と上海の天気を同時に取得するなど)。それぞれを実行したら、次のリクエストの前に すべての結果を返してください — 各結果は、その call_id (レスポンス) または tool_call_id (チャット) に対応していなければなりません。
tool_choice の戦略
allowed_tools の部分集合
多くのツールがあるものの、このターンでは一部だけ公開したい場合は、allowed_tools 形式の tool_choice を使って呼び出し可能なサブセットを制限します — これは tools リスト自体を変更しない ため、キャッシング の安定したプレフィックスを壊しません:
ストリーミング中の関数呼び出し
チャット補完: インデックスごとに組み立てる
関数引数は断片ごとにストリーミングされます。index ごとに arguments 文字列を蓄積し、ストリーム終了後に json.loads します:
Responses: セマンティックイベントを監視する
response.function_call_arguments.delta イベントは引数の増分を運び、response.function_call_arguments.done が完全な引数を返します — インデックスを手動で組み立てる必要はありません。
ベストプラクティスと落とし穴
優れたツール定義の書き方:- 名前と説明はモデル向けに書く: 「いつ呼び出すか」を明確に記述します。例:
"Get real-time weather; call only when the user explicitly asks about weather" - enum でパラメータを絞り込む: 値を列挙できるなら、自由形式の文字列は使わないでください。これで幻覚による引数の大半を防げます
- ツール定義はプロンプトの早い段階に置き、安定させる: ツールはキャッシュプレフィックスに参加します。安定した定義にすると入力が 90% オフになります(キャッシュ課金 を参照)
- エージェントループに上限を設ける: 最大ラウンド数を設定し、モデルが call → return → call の循環で無駄に課金を発生させないようにします
モデル対応と選択
gpt-5シリーズ全体で関数呼び出しに対応しています。シナリオ別には次のとおりです。関連リンク
- このグループ: Native Calls · Compatible Mode · Cache Billing
- token の取得 / 管理:
https://api.apiyi.com/token - OpenAI 公式ドキュメント:
developers.openai.com/api/docs/guides/function-calling