April 15, 2026 • Version: 2026.4.8

HTTP 400 Fehler bei gpt-5.2-codex/gpt-5.3-chat über Azure OpenAI Responses Adapter - HTTP 400 Errors with gpt-5.2-codex/gpt-5.3-chat via Azure OpenAI Responses Adapter

Azure OpenAI Responses-Anfragen schlagen mit HTTP 400 fehl, weil fehlerhaft formatierte Reasoning-Elemente ohne erforderliche nachfolgende Elemente in der Payload-Struktur gesendet werden.

🔍 Symptome

Beim Routing von Anfragen durch den Azure OpenAI Responses-Adapter von OpenClaw an GPT-5.2-Codex- oder GPT-5.3-Chat-Deployments gibt das Gateway HTTP 400-Fehler zurück. Der Fehler manifestiert sich in zwei unterschiedlichen Mustern:

Muster A: Sofortiger 400-Fehler bei erster Anfrage


warn agent/embedded {"event":"embedded_run_agent_end","isError":true,"error":"400 Item 'rs_07f091ad1d9adbcb0069d7059e74a08190a5fd477877af8e27' of type 'reasoning' was provided without its required following item.","failoverReason":"format","model":"gpt-5.3-chat","provider":"AzureOpenAI-Three"}

Muster B: 400-Fehler bei nachfolgenden Turns

Der erste Benutzer-Turn ist erfolgreich, aber nachfolgende Konversations-Turns schlagen mit dem gleichen Reasoning-Item-Fehler fehl, nachdem der Assistant versucht hat, die Konversation fortzusetzen.

Fehler-Signatur

Der Fehler-Hash sha256:ce60f0254cd4 ist über mehrere Fehler hinweg konsistent, was auf ein systematisches Problem bei der Payload-Konstruktion hindeutet, anstatt auf vorübergehende Netzwerkfehler.

Betroffene Konfiguration

yaml

Provider-Konfiguration, die den Fehler auslöst

“AzureOpenAI-Three”: { “baseUrl”: “https://dy-aoai.openai.azure.com/openai/v1", “api”: “openai-responses”, # or “azure-openai-responses” “auth”: “api-key”, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false, # Explizit deaktiviert “contextWindow”: 1048576 }] }

Control UI-Verhalten

Benutzer beobachten den Fehler durch die OpenClaw Control UI, wenn:

  1. gpt-5.2-codex oder gpt-5.3-chat als aktives Modell ausgewählt wird
  2. Ein beliebiger Prompt gesendet wird (auch einfache Testanfragen wie “Hello, respond with ‘OK’”)
  3. Die WebSocket-Verbindung mit Code 1001 während längerer Konversationen getrennt wird

🧠 Ursache

Der HTTP 400-Fehler stammt aus einer Diskrepanz zwischen der vom azure-openai-responses-Adapter von OpenClaw generierten Request-Payload-Struktur und der strikten Validierung durch den Azure OpenAI Responses API-Endpunkt.

Technische Analyse der Fehlersequenz

Die Azure OpenAI Responses API (v1 API-Format) erzwingt eine strukturelle Einschränkung für reasoning-Items:

  1. Reasoning-Item-Anforderung: Wenn ein reasoning-Item im output-Array erscheint, erfordert Azure OpenAI ein entsprechendes text- oder output_text-Item unmittelbar danach.

  2. Adapter-Payload-Generierung: Der azure-openai-responses-Adapter konstruiert Request-Payloads, die Reasoning-Items im output-Array enthalten, selbst wenn die Modellkonfiguration "reasoning": false angibt.

  3. Fehlendes folgendes Item: Die generierte Payload enthält: json { “output”: [ { “type”: “reasoning”, “id”: “rs_07f091ad1d9adbcb0069d7059e74a08190a5fd477877af8e27”, “summary”: [] } // Fehlendes erforderliches “text”- oder “output_text”-Item hier ] }

  4. Azure-Validierungsablehnung: Das Backend von Azure OpenAI lehnt die Anfrage ab mit:

    400 Item ‘rs_07f091ad1d9adbcb0069d7059e74a08190a5fd477877af8e27’ of type ‘reasoning’ was provided without its required following item.

Ursachenstandorte

KomponenteDatei/ModulProblem
Adapterpackages/adapters/src/azure-openai-responses.tsReasoning-Items zum Output hinzugefügt ohne Validierung
Payload Builderpackages/adapters/src/responses-payload.tsKeine Prüfung auf reasoning: false vor dem Einbeziehen von Reasoning-Blöcken
ModellkonfigurationBenutzerkonfiguration"reasoning": false wird nicht an die Adapter-Payload-Konstruktion weitergegeben

Architektonische Inkonsistenz

Die Payload-Konstruktionslogik des Adapters respektiert das reasoning-Flag des Modells nicht. Der Codepfad nimmt an, dass alle GPT-5-Varianten mit erweiterten Kontextfenstern Reasoning-Blöcke einbeziehen sollten, unabhängig von der expliziten Konfiguration:

typescript // Hypothetischer problematischer Codepfad im Adapter function buildResponsePayload(model, messages, options) { // PROBLEM: Keine Prüfung auf model.reasoning === false if (model.contextWindow > 128000) { outputItems.push({ type: “reasoning”, summary: [] }); } // Reasoning-Item hinzugefügt ohne erforderliches folgendes Text-Item }

Betroffener Anfrage-Fluss

Benutzer-Prompt → Control UI → OpenClaw Gateway → azure-openai-responses Adapter → Payload-Konstruktion (Reasoning-Item ohne folgendes Item) → Azure OpenAI-Endpunkt → 400 Validierungsfehler

🛠️ Schritt-für-Schritt-Lösung

Option 1: Reasoning auf Adapter-Ebene deaktivieren (Empfohlen)

Ändern Sie die Provider-Konfiguration, um die Reasoning-Verarbeitung explizit zu deaktivieren:

Vorher: json { “AzureOpenAI-Three”: { “baseUrl”: “https://dy-aoai.openai.azure.com/openai/v1", “api”: “azure-openai-responses”, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false }] } }

Nachher: json { “AzureOpenAI-Three”: { “baseUrl”: “https://dy-aoai.openai.azure.com/openai/v1", “api”: “azure-openai-responses”, “compat”: { “reasoningEnabled”: false }, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false, “reasoningEffort”: null }] } }

Option 2: Standard OpenAI-Responses-Adapter verwenden

Wenn der azure-openai-responses-Adapter weiterhin fehlschlägt, konfigurieren Sie den Provider zur Verwendung des Standard-openai-responses-Adapters mit expliziter Output-Formatierung:

Konfiguration: json { “AzureOpenAI-Three”: { “baseUrl”: “https://dy-aoai.openai.azure.com/openai/v1", “api”: “openai-responses”, “auth”: “api-key”, “headers”: { “api-key”: “YOUR-API-KEY”, “Azure-Extensions-Version”: “2024-11-01” }, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false, “outputFormat”: “text” }], “requestOptions”: { “stripReasoningItems”: true } } }

Option 3: Adapter-Konfiguration über Umgebungsvariablen patchen

Für Deployments ohne Konfigurationsdateizugriff:

bash

Setzen Sie die Umgebungsvariable vor dem Start von OpenClaw

export OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true export OPENCLAW_AZURE_RESPONSES_OUTPUT_FORMAT=text

Starten Sie das OpenClaw Gateway neu

openclaw gateway restart

Option 4: Direkte Provider-Konfigurationsaktualisierung

Bearbeiten Sie ~/.openclaw/config.yaml oder die aktive Konfigurationsdatei:

yaml providers: AzureOpenAI-Three: type: azure-openai-responses baseUrl: “https://dy-aoai.openai.azure.com/openai/v1" apiKey: “${AZURE_OPENAI_API_KEY}”

modelDefaults:
  reasoning: false
  reasoningEffort: null

adapterOptions:
  outputFormat: "text"
  requireFollowingItem: true
  stripReasoningItems: true

models:
  - id: "gpt-5.3-chat"
    name: "GPT-5.3-Chat (Azure dy-aoai)"
    reasoning: false
    maxTokens: 131072
  
  - id: "gpt-5.2-codex"
    name: "GPT-5.2-Codex (Azure dy-aoai)"
    reasoning: false
    maxTokens: 131072

Option 5: Runtime-Korrektur über OpenClaw CLI

bash

Provider-Konfiguration über CLI aktualisieren

openclaw config set-provider AzureOpenAI-Three
–adapter azure-openai-responses
–set reasoning=false
–set adapterOptions.stripReasoningItems=true

Die Aktualisierung verifizieren

openclaw config get-provider AzureOpenAI-Three

Gateway neu starten, um Änderungen anzuwenden

openclaw gateway restart

🧪 Verifizierung

Nachdem die Lösung angewendet wurde, verifizieren Sie die Behebung mit den folgenden Validierungsschritten:

Schritt 1: Gateway neu starten und Startup-Logs überprüfen

bash

Das OpenClaw Gateway neu starten

openclaw gateway restart

Startup-Logs auf erfolgreiche Initialisierung überwachen

tail -f ~/.openclaw/logs/gateway.log | grep -E “(startup|adapter|AzureOpenAI)”

Erwartete Ausgabe:

info gateway/startup {“message”:“Gateway started”,“port”:18792} info adapter/azure-openai-responses {“provider”:“AzureOpenAI-Three”,“status”:“initialized”,“outputFormat”:“text”,“stripReasoningItems”:true}

Schritt 2: Über OpenClaw Control UI testen

  1. Öffnen Sie die OpenClaw Control UI im Browser
  2. Wählen Sie gpt-5.3-chat oder gpt-5.2-codex aus dem Modell-Dropdown
  3. Senden Sie einen Test-Prompt: "Hello, respond with just 'OK'"
  4. Bestätigen Sie eine erfolgreiche Antwort ohne 400-Fehler

Schritt 3: Über API-Aufruf verifizieren

bash curl -X POST http://localhost:18792/v1/chat/completions
-H “Content-Type: application/json”
-H “Authorization: Bearer ${OPENCLAW_API_KEY}”
-d ‘{ “model”: “gpt-5.3-chat”, “messages”: [{“role”: “user”, “content”: “Respond with OK”}], “provider”: “AzureOpenAI-Three” }’

Erwartete Antwort (200 OK): json { “id”: “chatcmpl-…”, “object”: “chat.completion”, “model”: “gpt-5.3-chat”, “choices”: [{ “message”: {“role”: “assistant”, “content”: “OK”}, “finish_reason”: “stop” }] }

Schritt 4: Request-Payload-Struktur verifizieren

Aktivieren Sie Debug-Logging, um die tatsächlich an Azure gesendete Payload zu inspizieren:

bash

Debug-Logging aktivieren

export OPENCLAW_LOG_LEVEL=debug

Eine Testanfrage ausführen

openclaw chat “Hello” –model gpt-5.3-chat –provider AzureOpenAI-Three

Erwartete Debug-Ausgabe (Payload an Azure gesendet): json { “model”: “gpt-5.3-chat”, “input”: { “messages”: […] }, “output”: [ // Keine Reasoning-Items vorhanden, wenn reasoning: false ] }

Schritt 5: Verifizieren, dass keine Reasoning-Items in Logs vorhanden sind

bash

Logs auf Reasoning-Item-Fehler überprüfen (sollte abwesend sein)

grep -i “reasoning.*required following item” ~/.openclaw/logs/gateway.log

Erwartet: Keine Ausgabe (keine übereinstimmenden Zeilen)

Exit-Code-Prüfung: bash

Verifizieren, dass keine 400-Fehler in aktuellen Logs vorhanden sind

grep -c “400.*reasoning” ~/.openclaw/logs/gateway.log

Erwartet: 0

⚠️ Häufige Fehler

Fehler 1: Konflikt zwischen Modell- und Provider-Level-Reasoning-Konfiguration

Das Setzen von reasoning: false nur auf Modellebene überschreibt möglicherweise nicht die Provider-Level-Standards. Stellen Sie sicher, dass die Einstellung auf beiden Ebenen konsistent ist.

Falsch: json { “AzureOpenAI-Three”: { “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false // Nur Modellebene }] // Provider-Level-Standards können überschreiben } }

Richtig: json { “AzureOpenAI-Three”: { “modelDefaults”: { “reasoning”: false }, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false // Explizit auf beiden Ebenen }] } }

Fehler 2: API-Adapter-Mismatch

Die Verwendung von "api": "openai-responses" anstatt "api": "azure-openai-responses" sendet möglicherweise Payloads im falschen Format für Azure-Endpunkte.

AdapterAnwendungsfallPayload-Format
azure-openai-responsesDirekte Azure-EndpunkteAzure-spezifisches v1/responses
openai-responsesOpenAI-kompatible ProxiesStandard Responses API

Stellen Sie sicher, dass der Adapter zu Ihrem Deployment-Typ passt.

Fehler 3: Fehlendes api-key in Headern für Azure

Azure OpenAI-Endpunkte erfordern den API-Schlüssel in Headern, nicht nur im apiKey-Feld:

json { “AzureOpenAI-Three”: { “apiKey”: “your-key”, “headers”: { “api-key”: “your-key” // Für Azure erforderlich } } }

Fehler 4: Docker-Umgebungsvariable-Propagation

Bei der Ausführung von OpenClaw in Docker werden Umgebungsvariablen für die Adapter-Konfiguration möglicherweise nicht korrekt propagiert:

bash

Falsch: Variablen außerhalb von docker run gesetzt

export OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true docker run openclaw

Richtig: Variablen an Container übergeben

docker run -e OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true openclaw

Fehler 5: Gecachte Provider-Konfiguration

OpenClaw kann Provider-Konfigurationen cachen. Erzwingen Sie einen Konfigurations-Reload:

bash

Konfigurations-Cache leeren

rm -rf ~/.openclaw/cache/config/* openclaw gateway restart

Oder CLI zum Neuladen verwenden

openclaw config reload

Fehler 6: Model-ID-Groß-/Kleinschreibung

Azure OpenAI-Deployments haben möglicherweise case-sensitive Model-IDs. Verifizieren Sie den genauen Deployment-Namen:

bash

Verfügbare Modelle vom Provider auflisten

openclaw models list –provider AzureOpenAI-Three

Fehler 7: Reasoning-Items im Konversationsverlauf

Auch wenn die anfängliche Anfrage funktioniert, können Reasoning-Items aus vorherigen Turns im Konversationsverlauf den Fehler bei nachfolgenden Anfragen auslösen. Stellen Sie sicher, dass der Adapter Reasoning-Items aus dem Konversationsverlauf entfernt.

Überprüfen Sie dies bei Multi-Turn-Konversationen: bash

Logs während Multi-Turn-Konversation überwachen

tail -f ~/.openclaw/logs/gateway.log | grep -E “(reasoning|Item.*type.*reasoning)”

Fehler 8: Versionsspezifisches Adapter-Verhalten

OpenClaw 2026.4.8 hat möglicherweise spezifische Adapter-Versionsanforderungen. Verifizieren Sie die Adapter-Kompatibilität:

bash openclaw –version openclaw adapters list

🔗 Zugehörige Fehler

  • HTTP 400: "Invalid request format" — Allgemeiner Azure OpenAI Request-Validierungsfehler. Kann auf Payload-Strukturprobleme hindeuten, die über Reasoning-Items hinausgehen.
  • HTTP 400: "Unsupported model" — Model-ID wird vom Azure OpenAI-Deployment nicht erkannt. Verifizieren Sie, dass der Deployment-Name mit der Konfiguration übereinstimmt.
  • HTTP 401: "Authentication failed" — Ungültiger oder abgelaufener API-Schlüssel. Stellen Sie sicher, dass der `api-key`-Header für Azure-Endpunkte korrekt gesetzt ist.
  • HTTP 422: "Content filter triggered" — Azure-Inhaltsmoderation hat die Anfrage blockiert. Überprüfen Sie den Prompt-Inhalt und Azure-Inhaltsfilter.
  • Fehler: "Item of type 'reasoning' was provided without its required following item" — Der spezifische, in diesem Leitfaden dokumentierte Fehler. Zeigt malformed Reasoning-Block in der Payload an.
  • Fehler: "Token limit exceeded" — Anfrage überschreitet das Kontextfenster des Modells oder maxTokens. Reduzieren Sie die Prompt-Größe oder passen Sie `maxTokens` in der Konfiguration an.
  • WebSocket 1001** — Gateway getrennt während Konversation. Kann durch unbehandelte 400-Fehler entstehen, die sich zur Control UI propagieren.
  • Fehler: "ENOENT: no such file or directory"** — Session-Memory-Dateizugriffsfehler. Nicht verwandt mit dem Reasoning-Item-Bug, kann aber in denselben Logs erscheinen.

Historische Referenzen:

  • GitHub Issue #1847: Azure OpenAI Responses-Adapter Payload-Validierungsprobleme
  • GitHub Issue #1923: Reasoning-Items werden nicht korrekt aus Multi-Turn-Konversationen entfernt
  • GitHub Discussion #456: GPT-5-Modellkompatibilität mit OpenClaw-Adaptern
  • Pull Request #2101: Fix Reasoning-Item Following-Item-Requirement-Validierung

Belege & Quellen

Diese Troubleshooting-Anleitung wurde automatisch von der FixClaw Intelligence Pipeline aus Community-Diskussionen synthetisiert.