OpenAI DevDay 2026 の API 更新後、既存の JSON Tool Calling をどう移行するか
モデル名の前に、書き戻しの形を変える。対象が gpt-6-astra か gpt-6.1-sol なら、ツール呼び出しは Chat Completions を離れ、Responses API に移る。分類か経路だけを決める一手は、10 月 6 日にパブリックベータになった Decisions API に移せる。照会は lookup_order のまま。モデルは JSON を埋めるだけ。実行は宿主。
読む前の早見
| 対象 | 公式の事実 | 移行で変えるもの |
|---|---|---|
| 入口 | Astra と GPT-6.1 Sol のツール呼び出しは Responses。Sol と Luna は reasoning_effort が none のときだけ Chat Completions で関数を呼べる | POST /v1/responses に移す。残すなら none を明示する |
| ツール定義 | Responses では name が type と同じ階層。strict を省くと厳密モードを試し、合わなければ戻して strict: false を付ける | strict を明示する。宿主の検証は残す |
| 書き戻し | function_call と function_call_output は call_id で対になる。async: true は実行をモデルに渡さない | role:tool を function_call_output に変える |
| 経路 | Decisions は 2026-10-06 にパブリックベータ。モデルは gpt-6-luna のみ。choice はツールを実行しない | 列挙を選ぶ一手だけを移す |
事実は 2026-10-08 時点の公式ドキュメント。Using GPT-6、Migrate to the Responses API、Decisions、Async tool calling。注文 A-1042 は架空。Decisions の確率は例示の数字。
先に書き戻しの形を変え、それからモデル名を変える
DevDay のあとで移すのはフィールドである。Agent とは何かをもう一度書く話ではない。公式の移行注意は四つに収まる。第一、対象が gpt-6-astra か gpt-6.1-sol なら、ツール呼び出しは Responses に移る。この二つは、ツールのない Chat Completions リクエストをまだ送れる。gpt-6-sol と gpt-6-luna は、reasoning_effort が none のときだけ Chat Completions で関数を呼べる。推論しながらツールを使うなら Responses。第二、name は入れ子の function から出て、type と同じ階層に置かれる。第三、書き戻しの id は tool_calls[].id から call_id に変わる。第四、分類か経路だけの一手は Decisions に移せる。Decisions はツールを実行しない。
- Astra / GPT-6.1 Sol:ツール呼び出しは
/v1/chat/completionsを離れる。Responses の推論欄はreasoning.effort。 - 定義を平らにし、strict を書く。Chat Completions は既定で非厳密。Responses は
strictを省くと厳密モードを試す。 - 経路と照会を分ける。
choiceは列挙を返す。照会はlookup_orderのまま。
9 月 29 日に何が出たかは DevDay 2026 で何が出たか。Responses と Agents の入口の差は Agents API と Responses API の違い。本篇はあの二本を書き直さない。既存の JSON Tool Calling のフィールドだけを書く。
今読んでいる呼び出しを先に名指す
Chat Completions の返答では、呼び出しはこう並ぶ。id は外側、name は function の中。arguments は文字列。架空の注文であり、本物の秘密は置かない:
{
"id": "call_3c91",
"type": "function",
"function": {
"name": "lookup_order",
"arguments": "{\"order_id\":\"A-1042\"}"
}
}
Responses のツール定義は name を type と同じ階層に置く。strict は省かない。省くと厳密モードを試し、Schema が合わなければ戻り、返ったツールに strict: false が付く。非厳密のままにするなら false を明示する。宿主は実行前に arguments を検証する:
{
"type": "function",
"name": "lookup_order",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"order_id": { "type": "string", "pattern": "^[A-Z]-\\d{4}$" }
},
"required": ["order_id"],
"additionalProperties": false
}
}
書き戻しは call_id だけを見る
モデルが出すのは function_call であり、tool_calls 配列ではない。パーサはこの四つを読む:
{
"type": "function_call",
"call_id": "call_3c91",
"name": "lookup_order",
"arguments": "{\"order_id\":\"A-1042\"}"
}
宿主は arguments を解析し、Schema を通し、lookup_order を実行し、同じ call_id で書き戻す。失敗も文字列の中のオブジェクトである。履歴を手で送るときは、前ターンの reasoning 項と function_call を結果と一緒に返す。結果だけを送らない。短い道は previous_response_id:
{
"type": "function_call_output",
"call_id": "call_3c91",
"output": "{\"order_id\":\"A-1042\",\"status\":\"paid\"}"
}
遅いツールは定義に async: true を付けられる。公式の記述:モデルは推論を続けるか、その結果に依存しない部分に答えられる。対応する呼び出し項には async: true が付く。あとで元の call_id を使って function_call_output を送る。実行は宿主のまま。組み込みツールと programmatic tool calling は async を使えない。Multi-agent では async と並列ツール呼び出しを重ねない。ドキュメントが名指すのは GPT-6 Astra 以降のモデル。
五つのループを、一度のアップグレードにまとめない
今の書き戻しの形ごとに移す。オブジェクト名が違うなら、パーサは共有しない:
| 今のループ | どこへ移すか |
|---|---|
| Chat Completions + tools。対象は Astra か GPT-6.1 Sol | POST /v1/responses に移す。tool_calls[].id は call_id。name は function から出す。 |
| Chat Completions + tools。gpt-6-sol か gpt-6-luna に残す | reasoning_effort が none のときだけ残せる。推論してからツールを呼ぶなら Responses。 |
| すでに Responses の function_call | ループは残す。モデル ID を替える。Astra と GPT-6.1 Sol は none を受けない。low を使う。推論が none でないときは temperature、top_p、top_logprobs を外す。 |
| lookup / hold / escalate だけを返すツール | その一手を POST /v1/decisions へ。モデルは gpt-6-luna。照会は function_call のまま。 |
| Agents API の session | 管理された harness が要るなら Agents に残す。書き戻しは turn_id であり、function_call_output ではない。 |
経路の一手は Decisions の choice を使う。リクエストは 10 月 6 日のパブリックベータの形。注文は架空。9 月 30 日の記事で自作した答えの契約を、そのまま /v1/decisions に POST しない:
{
"model": "gpt-6-luna",
"input": "Order A-1042 is paid. What should the host do next?",
"questions": [{
"type": "choice",
"name": "next_step",
"instructions": "Pick the next host action. Do not invent a tool name.",
"choices": [
{ "value": "lookup", "description": "Read the order. No refund." },
{ "value": "hold", "description": "Stop and wait." },
{ "value": "escalate", "description": "Hand the case to a person." }
]
}]
}
例示の返答の欄名は公式の choice 例に合わせた。確率は架空。宿主は choice が lookup のときだけ lookup_order を送る。hold は止める。escalate は人へ渡す。type が refusal ならツールを呼ばない。しきい値は自分で決める。画像はインラインの base64 data URL。https の画像 URL と file_id はこの端点では使えない:
{
"answers": [{
"type": "choice",
"name": "next_step",
"choice": "lookup",
"probabilities": [
{ "value": "lookup", "probability": 0.91 },
{ "value": "hold", "probability": 0.05 },
{ "value": "escalate", "probability": 0.04 }
],
"confidence": 0.88
}]
}
Ultrafast は gpt-6-astra の service_tier で、値は ultrafast。米国のデータ所在とグローバル処理だけを支え、EU とその他の地域端点は支えない。ツール JSON は変えない。GPT-6.1 Sol の Ultrafast は 9 月 29 日の公式まとめでは「まもなく」のままだ。本篇は出荷済みと書かない。Agents API は 9 月 29 日に、OpenAI がホストするブラウザの Computer Use を足した。サイトの承認とログインはアプリが扱う。それは Responses の function_call_output を別の形に替える理由にならない。ずれの監視は警告するか、会話を止めることがある。止まったら、同じツール呼び出しを盲目に再送しない。
六ステップを終えてから流量を切る
Ultrafast を先に開けない。書き戻しの形から書く:
- 今の書き戻しを名指す。
role: toolとtool_call_idか、function_call_outputか、Agents のturn_idか。三つでパーサを共有しない。 - 入口を決める。Astra と GPT-6.1 Sol のツール呼び出しは
POST /v1/responses。Sol と Luna はreasoning_effortがnoneのときだけ Chat Completions に残れる。 - ツール定義を平らにし、strict を書く。厳密モードが拒む Schema なら
strict: falseにし、宿主の検証は残す。照会はorder_idだけを受ける。 - call_id を揃え、サンプリング引数を外す。
argumentsは文字列のまま。Astra と GPT-6.1 Sol はnoneの代わりにlow。推論が none でないときはtemperature、top_p、top_logprobsを外す。Chat Completions ではlogprobsも外す。Responses のincludeからmessage.output_text.logprobsを外す。GPT-5.5 以前から移すならprompt_cache_retentionをprompt_cache_options.ttlの30mに替える。会話の途中で推論を変えるときはconfiguration_updateを送り、リクエストのreasoning.effortは動かさない。 - 列挙だけを選ぶ一手を Decisions に移す。モデルは
gpt-6-luna。宿主はlookupをlookup_orderに写す。遅いツールにだけasync: trueを付け、書き戻しは元のcall_id。 - 二つの JSON を Diff してから流量を切る。
argumentsとanswers[].choiceを Schema で検証する。合わなければモデル ID を替えない。
Schema を門にする話は Agents API + JSON Schema。門をプロンプトだけに置けない理由は AI が JSON Schema を要する理由。Agents の書き戻しの形は Agents API のツール JSON。
流量を切る前に、三つの JSON を広げる
失敗の多くは、id が揃わない、name が function の中に残る、choice を照会済みの注文として扱う、のどれかである。
- 古い tool call と新しい function_call を 整形 し、Schema 検証 で
argumentsとanswers[0].choiceが門に入るか見る。 - JSONPath 抽出 で
$.call_id、$.name、$.answers[0].choiceを抜く。 - 移行の前後のペイロードを JSON Diff する。プロンプトの前に
call_idを直す。 call_3c91が呼び出しとfunction_call_outputで同じ id かを見る。- 注文、トークン、リポジトリのパスを公開の整形サイトに貼らない。JSONSort はブラウザのローカルで動く。
三つのオブジェクトが Schema で組み立て直せたら、移行は終わっている。Ultrafast はこの検査の代わりにならない。
よくある誤り
- Decisions を新しい Tool Calling とみなす。返るのは
choice、probability、scoreである。ツール引数は Responses の関数呼び出し。自分の Schema に従うオブジェクトは Responses の Structured Outputs。 - ツール定義に function を一枚残す。Responses は古い
function.nameを読まない。name は type と同じ階層。 - strict を省き、非厳密のままだと思う。Responses は厳密モードを試し、合わなければ戻して
strict: falseを付ける。欲しい振る舞いを書く。宿主の検証は残す。 - Astra か GPT-6.1 Sol に none や temperature を残す。この二つは
noneを受けない。GPT-6.1 Sol はminimalも受けない。lowを使う。推論が none でないときはサンプリング引数を外す。 - Computer Use のために Responses のループを Agents API へ丸ごと移す。9 月 29 日に足されたのはホストされたブラウザである。承認はアプリに残る。Agents の書き戻しは
turn_id。 - async: true を、モデルが自分で実行すると読む。宿主がツールを走らせ、未完了の呼び出しを持つ。あとで元の
call_idに書き戻す。
FAQ
Chat Completions は閉じなければならないか?
ツール付きで、モデルが gpt-6-astra か gpt-6.1-sol なら、その呼び出しは Responses に移す。この二つの Chat Completions は、ツールのないリクエストをまだ送れる。gpt-6-sol と gpt-6-luna は reasoning_effort が none のときだけ、Chat Completions で関数を呼べる。推論してからツールを使うなら Responses。
Decisions は function_call を出せるか?
出せない。返すのは型付きの答えである。predicate の probability、choice、または score。宿主が choice を既存の関数に写す。パブリックベータの端点は POST /v1/decisions で、今のモデルは gpt-6-luna だけ。公式は Responses よりおよそ 10 倍速いと書く。それは分類の速さであり、注文照会ではない。
strict を書かないとどうなるか?
Chat Completions は既定で非厳密。Responses は strict を省くと厳密モードを試す。Schema が合わなければ戻り、返ったツールは strict: false。非厳密を保つなら false を明示する。モデル側が厳密かどうかにかかわらず、宿主は arguments を再検証する。
既存の Agents session の書き戻しは変えるか?
変えない。Agents API はパブリックベータのまま。書き戻しは turn_id。Computer Use はホストされたブラウザ上の別の権限で、サイト承認とログインはアプリが扱う。一手ずつ自分で持つなら、Responses の function_call_output を続ける。
Ultrafast はツール JSON を変えるか?
変えない。gpt-6-astra の service_tier: ultrafast であり、米国のデータ所在とグローバル処理だけを支える。ツール定義、call_id、Schema はそのまま。GPT-6.1 Sol の Ultrafast を、すでに使えるとは書かない。
結論
DevDay 2026 のあとの JSON Tool Calling の移行は、書き戻しの形を替えることである。Astra と GPT-6.1 Sol のツール呼び出しは Responses。name は type と同じ階層。結果は call_id で戻す。列挙だけを選ぶ一手は Decisions に移せる。照会は宿主が実行する。
A-1042 が lookup_order の arguments に入るのか、Decisions の input に入るのかを先に書く。call_3c91 と answers[0].choice を指せたら、流量を切る。
あわせて読む
- OpenAI DevDay 2026 で何が出たか 9 月 29 日の公式一覧。本篇の移行手順ではない
- Agents API vs Responses API 二つの入口で書き戻しが違う
- OpenAI Agents API と JSON Tool Calling パブリックベータの対象。本篇は書き直さない
- Agents API + JSON Schema 安定し、検証でき、実行できる
- AI はなぜ JSON Schema を要るか Schema は門
- JSONSort のローカル道具 整形、検証、Diff、Schema
- すべての記事 JSON と AI 開発のほかのノート
更新記録: 初出