AI-Entwicklung

Wie migriert man JSON Tool Calling nach dem OpenAI-DevDay-2026-API-Update?

Ca. 16 Min.

Zuerst die Rückgabe ändern, dann die Modell-ID. Ziel gpt-6-astra oder gpt-6.1-sol heißt: Tool Calling verlässt Chat Completions und nutzt die Responses API. Ein Sprung, der nur klassifiziert oder routet, kann zur Decisions API wechseln, öffentliche Beta seit dem 6. Oktober. Die Abfrage bleibt lookup_order. Das Modell füllt nur JSON. Der Host führt aus.

Vor dem Lesen

Objekt Offizielle Tatsache Was sich bei der Migration ändert
Endpunkt Tool Calls von Astra und GPT-6.1 Sol laufen über Responses. Sol und Luna dürfen Funktionen in Chat Completions nur bei reasoning_effort none aufrufen Nach POST /v1/responses wechseln oder none bewusst behalten
Tool-Objekt Bei Responses steht name neben type. Fehlt strict, wird Strict-Modus versucht; bei Inkompatibilität folgt Rückfall mit strict: false strict ausdrücklich setzen. Der Host prüft weiter
Rückgabe function_call und function_call_output teilen sich call_id. async: true führt das Tool nicht im Modell aus role:tool durch function_call_output ersetzen
Routing Decisions ist seit 2026-10-06 öffentliche Beta. Nur gpt-6-luna. Eine choice führt kein Tool aus Nur den Sprung verschieben, der ein Enum wählt

Fakten aus den offiziellen Docs, Stand 2026-10-08: Using GPT-6, Migrate to the Responses API, Decisions, Async tool calling. Bestellung A-1042 ist fiktiv. Die Wahrscheinlichkeiten in der Decisions-Probe sind Beispiele.

Zuerst die Form der Rückgabe ändern, dann die Modell-ID

Nach DevDay ist die Migration eine Feldänderung. Sie ist kein weiterer Text darüber, was ein Agent ist. Die offiziellen Hinweise lassen sich auf vier Zeilen bringen. Erstens: Ist das Zielmodell gpt-6-astra oder gpt-6.1-sol, wandert Tool Calling zu Responses. Beide können weiter Chat-Completions-Anfragen ohne Tools senden. gpt-6-sol und gpt-6-luna dürfen Funktionen in Chat Completions nur aufrufen, wenn reasoning_effort none ist. Reasoning plus Tools läuft über Responses. Zweitens: Der Name verlässt das verschachtelte Objekt function und steht neben type. Drittens: Die ID der Rückgabe wandert von tool_calls[].id zu call_id. Viertens: Ein Sprung, der nur klassifiziert oder routet, kann zu Decisions wechseln. Decisions führt kein Tool aus.

  • Astra / GPT-6.1 Sol: Tool Calling verlässt /v1/chat/completions. Bei Responses heißt das Feld reasoning.effort.
  • Definition flach machen und strict setzen. Chat Completions ist standardmäßig nicht strikt. Responses versucht den Strict-Modus, wenn strict fehlt.
  • Routing und Abfrage trennen. Eine choice liefert ein Enum. Die Abfrage bleibt lookup_order.

Was am 29. September ausgeliefert wurde: was DevDay 2026 ausgeliefert hat. Wie sich Responses und die Agents API als Einstiege unterscheiden: wie sich Agents API und Responses unterscheiden. Dieser Text schreibt die beiden nicht um. Er mappt nur die Felder einer bestehenden JSON-Tool-Calling-Schleife.

Benennen Sie den Call, den der Code heute liest

In einer Chat-Completions-Antwort sieht ein Call so aus. Die id steht außen. Der name steht in function. arguments ist eine Zeichenkette. Fiktive Bestellung, keine echten Geheimnisse:

{
  "id": "call_3c91",
  "type": "function",
  "function": {
    "name": "lookup_order",
    "arguments": "{\"order_id\":\"A-1042\"}"
  }
}

Ein Responses-Tool setzt name neben type. strict nicht weglassen. Sonst versucht Responses den Strict-Modus. Ein inkompatibles Schema fällt zurück, und das zurückgegebene Tool zeigt strict: false. Für nicht striktes Verhalten false setzen. Der Host prüft arguments vor der Ausführung:

{
  "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
  }
}

Die Rückgabe hängt an call_id

Das Modell liefert ein Item function_call, kein Array tool_calls. Der Parser liest diese vier Felder:

{
  "type": "function_call",
  "call_id": "call_3c91",
  "name": "lookup_order",
  "arguments": "{\"order_id\":\"A-1042\"}"
}

Der Host parst arguments, prüft das Schema, führt lookup_order aus und schreibt auf derselben call_id zurück. Ein Fehler ist ebenfalls ein Objekt in der Zeichenkette. Wer den Verlauf von Hand mitschickt, sendet die Reasoning-Items der vorigen Runde und den function_call zusammen mit dem Ergebnis. Nicht nur das Ergebnis. Der kürzere Weg ist previous_response_id:

{
  "type": "function_call_output",
  "call_id": "call_3c91",
  "output": "{\"order_id\":\"A-1042\",\"status\":\"paid\"}"
}

Ein langsames Tool darf async: true an der Definition setzen. Die Docs: Das Modell darf weiter reasoning betreiben oder Teile beantworten, die nicht von diesem Ergebnis abhängen. Das Call-Item trägt async: true. Später senden Sie function_call_output mit der ursprünglichen call_id. Der Host führt das Tool aus. Eingebaute Tools und Programmatic Tool Calling können async nicht nutzen. Im Multi-Agent-Modus async nicht mit parallelen Tool Calls kombinieren. Die Docs nennen GPT-6 Astra und spätere Modelle.

Fünf Schleifen. Nicht zu einem Upgrade zusammenkleben

Migrieren Sie entlang der Rückgabe, die Sie schon haben. Verschiedene Objektnamen brauchen verschiedene Parser:

Vorhandene Schleife Wohin sie geht
Chat Completions + Tools, Ziel Astra oder GPT-6.1 Sol Wechsel zu POST /v1/responses. tool_calls[].id wird call_id. name aus function herausheben.
Chat Completions + Tools, Verbleib auf gpt-6-sol oder gpt-6-luna Verbleib nur, solange reasoning_effort none ist. Reasoning plus Tools wechselt zu Responses.
Schon ein Responses-function_call Schleife behalten. Modell-ID tauschen. Astra und GPT-6.1 Sol unterstützen none nicht; low verwenden. Ist der Aufwand nicht none, temperature, top_p und top_logprobs entfernen.
Ein Tool, das nur lookup / hold / escalate liefert Diesen Sprung nach POST /v1/decisions auf gpt-6-luna legen. Die Abfrage bleibt ein function_call.
Eine Agents-API-Session Auf Agents bleiben, wenn Sie das verwaltete Harness wollen. Die Rückgabe bleibt turn_id, nicht function_call_output.

Der Routing-Sprung nutzt eine Decisions-choice. Die Anfrage folgt der öffentlichen Beta vom 6. Oktober. Die Bestellung ist fiktiv. Den selbst gebauten Antwortvertrag aus dem Text vom 30. September nicht an /v1/decisions POSTen:

{
  "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." }
    ]
  }]
}

Die Beispielantwort nutzt die offiziellen Choice-Feldnamen. Die Wahrscheinlichkeiten sind fiktiv. Der Host ruft lookup_order erst, wenn choice lookup ist. hold stoppt. escalate geht an einen Menschen. refusal ruft das Tool nicht auf. Die Schwelle setzen Sie. Bilder müssen Inline-Base64-Data-URLs sein. HTTPS-Bild-URLs und file_id nimmt dieser Endpunkt nicht an:

{
  "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 ist service_tier mit dem Wert ultrafast auf gpt-6-astra. Es unterstützt nur US-Datenresidenz und globale Verarbeitung, nicht EU oder andere regionale Endpunkte, und es ändert kein Tool-JSON. Ultrafast für GPT-6.1 Sol stand im Rückblick vom 29. September noch als kommend. Dieser Text schreibt es nicht als ausgeliefert. Am 29. September bekam die Agents API Computer Use in einem von OpenAI gehosteten Browser. Freigaben und Anmeldung bleiben in Ihrer Anwendung. Das ist kein Grund, function_call_output von Responses zu ersetzen. Misalignment-Überwachung kann warnen oder ein Gespräch stoppen. Stoppt eine Runde, denselben Tool Call nicht blind wiederholen.

Sechs Schritte, dann den Verkehr umlegen

Nicht bei Ultrafast anfangen. Die Rückgabe schreiben:

  1. Die aktuelle Rückgabe benennen. Sie ist role: tool plus tool_call_id, oder function_call_output, oder eine Agents-turn_id. Keinen Parser für alle drei teilen.
  2. Den Endpunkt wählen. Tool Calls von Astra und GPT-6.1 Sol gehen nach POST /v1/responses. Sol und Luna bleiben auf Chat Completions nur mit reasoning_effort gleich none.
  3. Das Tool flach machen und strict setzen. Nutzt das Schema eine Form, die der Strict-Modus ablehnt, strict: false setzen und die Host-Prüfung behalten. Eine Abfrage nimmt nur order_id.
  4. call_id angleichen und Sampling-Parameter entfernen. arguments bleibt eine Zeichenkette. Bei Astra und GPT-6.1 Sol none durch low ersetzen. Ist der Aufwand nicht none, temperature, top_p und top_logprobs entfernen. Bei Chat Completions auch logprobs. Bei Responses message.output_text.logprobs aus include nehmen. Kommen Sie von GPT-5.5 oder früher, prompt_cache_retention durch prompt_cache_options.ttl mit 30m ersetzen. Um den Aufwand mitten im Gespräch zu ändern, ein Item configuration_update senden und reasoning.effort auf Anfrageebene unverändert lassen.
  5. Nur den Enum-Sprung zu Decisions legen. Das Modell ist gpt-6-luna. Der Host mappt lookup auf lookup_order. async: true nur für ein langsames Tool, Rückgabe auf der ursprünglichen call_id.
  6. Die beiden JSON-Payloads diffen, dann umschalten. arguments und answers[].choice gegen das Schema prüfen. Passen sie nicht, die Modell-ID nicht tauschen.

Wie Schema ein Tor ist: Agents API + JSON Schema. Warum das Tor nicht nur im Prompt stehen kann: warum KI JSON Schema braucht. Die Rückgabeform der Agents API: Tool-JSON der Agents API.

Vor dem Umschalten drei JSON-Objekte ausbreiten

Die meisten Fehler sind eine abweichende ID, ein Name, der noch unter function liegt, oder eine choice, die als schon abgefragte Bestellung gilt.

  • Den alten Tool Call neben den neuen function_call formatieren, dann mit Schema prüfen prüfen, ob arguments und answers[0].choice das Tor passieren.
  • JSONPath extrahieren für $.call_id, $.name und $.answers[0].choice.
  • Die Payload vor und nach dem Umzug JSON Diff. call_id reparieren, bevor Sie den Prompt umschreiben.
  • Prüfen, dass call_3c91 auf dem Call und auf function_call_output dieselbe ID ist.
  • Bestellungen, Tokens und Repo-Pfade nicht in einen öffentlichen Formatierer kleben. JSONSort läuft im Browser.

Lassen sich die drei Objekte gegen das Schema neu aufbauen, ist die Migration fertig. Ultrafast ersetzt diese Prüfung nicht.

Häufige Fallen

  • Decisions für die neue Tool-Calling-API halten. Es liefert eine choice, eine probability oder einen score. Tool-Argumente bleiben Function Calling auf Responses. Ein Objekt nach eigenem Schema nutzt Structured Outputs auf Responses.
  • Das verschachtelte function-Objekt stehen lassen. Responses liest das alte function.name nicht. Der Name steht neben type.
  • strict weglassen und Nicht-Strikt erwarten. Responses versucht den Strict-Modus und markiert bei Rückfall strict: false. Das gewünschte Verhalten hinschreiben. Die Host-Prüfung bleibt.
  • none oder temperature auf Astra oder GPT-6.1 Sol lassen. Diese Modelle unterstützen none nicht. GPT-6.1 Sol auch nicht minimal. low verwenden. Ist der Aufwand nicht none, die Sampling-Parameter entfernen.
  • Eine Responses-Schleife wegen Computer Use in die Agents API schieben. Die Ergänzung vom 29. September ist ein gehosteter Browser. Freigaben bleiben in der App. Die Agents-Rückgabe ist turn_id.
  • async: true als Ausführung durch das Modell lesen. Der Host führt aus und merkt sich offene Calls. Später auf der ursprünglichen call_id zurückschreiben.

FAQ

Muss ich Chat Completions verlassen?

Nutzt die Anfrage Tools und ist das Modell gpt-6-astra oder gpt-6.1-sol, wandern diese Calls zu Responses. Chat Completions kann auf diesen Modellen weiter Anfragen ohne Tools tragen. gpt-6-sol und gpt-6-luna dürfen Funktionen in Chat Completions nur mit reasoning_effort none aufrufen. Reasoning plus Tools nutzt Responses.

Kann Decisions einen function_call ausgeben?

Nein. Es liefert eine typisierte Antwort: eine Predicate-Probability, eine choice oder einen score. Der Host mappt die choice auf eine Funktion, die Sie schon haben. Der Endpunkt der öffentlichen Beta ist POST /v1/decisions, das einzige Modell heute ist gpt-6-luna. OpenAI beschreibt es als etwa 10× schneller als Responses. Das ist Klassifikationsgeschwindigkeit, keine Bestellabfrage.

Was passiert, wenn ich strict weglasse?

Chat Completions ist standardmäßig nicht strikt. Bei Responses versucht das Weglassen von strict den Strict-Modus. Kann das Schema nicht kompatibel gemacht werden, fällt die API zurück und das Tool zeigt strict: false. false ausdrücklich setzen, um nicht striktes Verhalten zu behalten. Der Host prüft arguments in beiden Fällen.

Soll ich die Rückgabe einer Agents-Session ändern?

Nein. Die Agents API ist weiter öffentliche Beta. turn_id behalten. Computer Use ist eine eigene Berechtigung auf einem gehosteten Browser. Die App übernimmt Site-Freigaben und die Anmeldung. Wer jeden Sprung selbst besitzen will, bleibt bei Responses und function_call_output.

Ändert Ultrafast das Tool-JSON?

Nein. Es ist service_tier: ultrafast auf gpt-6-astra, nur mit US-Datenresidenz und globaler Verarbeitung. Tool-Definition, call_id und Schema bleiben. Ultrafast für GPT-6.1 Sol nicht als schon verfügbar schreiben.

Fazit

JSON Tool Calling nach DevDay 2026 zu migrieren heißt, die Rückgabe zu ändern. Tool Calls von Astra und GPT-6.1 Sol nutzen Responses. Der Name steht neben type. Ergebnisse kommen auf call_id zurück. Der Sprung, der nur ein Enum wählt, kann zu Decisions wechseln. Der Host führt die Abfrage aus.

Schreiben Sie auf, ob A-1042 in die arguments von lookup_order geht oder in ein Decisions-input. Zeigen Sie auf call_3c91 und answers[0].choice, bevor Sie den Verkehr umlegen.

Weiterlesen

Änderungsprotokoll: Erstveröffentlichung