April 15, 2026 • バージョン: 2026.4.8

Azure OpenAI Responses Adapter 経由での gpt-5.2-codex/gpt-5.3-chat 使用時に 발생하는 HTTP 400 エラー

Azure OpenAI Responses リクエストが、ペイロード構造において必須の後続項目 없이不正な形式の reasoning アイテムが送信されたことが原因で、HTTP 400 で失敗します。

🔍 症状

OpenClawのAzure OpenAI Responsesアダプタを経由してGPT-5.2-CodexまたはGPT-5.3-Chatデプロイメントにリクエストをルーティングすると、ゲートウェイがHTTP 400エラーを返します。この失敗は2つの異なるパターンで現れます。

パターンA:最初のリクエストで即座に400エラー


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

パターンB:後続のターンで400エラー

最初のユーザーターンは成功しますが、アシスタントが会話を続行しようとした後、後続の会話を開始すると同じreasoningアイテムエラーで失敗します。

エラーの特徴

エラーハッシュsha256:ce60f0254cd4は複数の失敗で一貫しており、一過性のネットワークエラーではなく体系的なペイロード構築の問題であることを示しています。

影響を受ける設定

yaml

エラーを発生させるプロバイダー設定

“AzureOpenAI-Three”: { “baseUrl”: “https://dy-aoai.openai.azure.com/openai/v1", “api”: “openai-responses”, # または “azure-openai-responses” “auth”: “api-key”, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false, # 明示的に無効化 “contextWindow”: 1048576 }] }

Control UIの動作

ユーザーは以下の状況でOpenClaw Control UIを通じてエラーを確認します:

  1. gpt-5.2-codexまたはgpt-5.3-chatをアクティブモデルとして選択する
  2. プロンプトを送信する(「Hello, respond with ‘OK’」のような単純なテストクエリでも)
  3. 拡張会話中にWebSocketがコード1001で切断される

🧠 原因

HTTP 400エラーは、OpenClawのazure-openai-responsesアダプタによって生成されたリクエストペイロード構造と、Azure OpenAIのResponses APIエンドポイントで強制される厳密なバリデーションの間の不一致から発生します。

失敗シーケンスの技術的分析

Azure OpenAI Responses API(v1 API形式)は、reasoningアイテムに対して構造的な制約を課します:

  1. Reasoningアイテムの要件: output配列にreasoningアイテムが含まれている場合、Azure OpenAIはその直後にcorrespondingtextまたはoutput_textアイテムを要求します。

  2. アダプタのペイロード生成: azure-openai-responsesアダプタは、モデル設定で"reasoning": falseが指定されている場合でも、output配列にreasoningアイテムを含むリクエストペイロードを構築します。

  3. 後続アイテムの欠落: 生成されたペイロードには以下が含まれています: json { “output”: [ { “type”: “reasoning”, “id”: “rs_07f091ad1d9adbcb0069d7059e74a08190a5fd477877af8e27”, “summary”: [] } // ここにrequiredな “text” または “output_text” アイテムが不足 ] }

  4. Azureバリデーション却下: Azure OpenAIのバックエンドは以下のエラーでリクエストを拒否します:

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

根本原因の箇所

コンポーネントファイル/モジュール問題点
Adapterpackages/adapters/src/azure-openai-responses.tsバリデーションなしにreasoningアイテムをoutputに追加
Payload Builderpackages/adapters/src/responses-payload.tsreasoningブロックを含める前にreasoning: falseをチェックしていない
Model Configユーザー設定"reasoning": falseがアダプタペイロード構築に反映されていない

アーキテクチャの不整合

アダプタのペイロード構築ロジックはモデルのreasoningフラグを尊重していません。コードパスは、明示的な設定に関係なく、拡張コンテキストウィンドウを持つすべてのGPT-5バリアントにreasoningブロックを含める必要があると想定しています:

typescript // アダプタ内の問題のあるコードパス(想定) function buildResponsePayload(model, messages, options) { // 問題:model.reasoning === falseのチェックがない if (model.contextWindow > 128000) { outputItems.push({ type: “reasoning”, summary: [] }); } // 必須の後続テキストアイテムなしでreasoningアイテムが追加される }

影響を受けるリクエストフロー

ユーザープロンプト → Control UI → OpenClaw Gateway → azure-openai-responses adapter → ペイロード構築(後続アイテムなしのreasoningアイテム) → Azure OpenAIエンドポイント → 400 バリデーションエラー

🛠️ 解決手順

オプション1:アダプタレベルでReasoningを無効化(推奨)

プロバイダー設定を修正して、reasoning処理を明示的に無効化します:

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

変更後: 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 }] } }

オプション2:標準のOpenAI-Responsesアダプタを使用

azure-openai-responsesアダプタが продолжает失敗する場合は、明示的な出力フォーマettingを使用して標準のopenai-responsesアダプタを使用するようプロバイダーを設定します:

設定: 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 } } }

オプション3:環境変数によるアダプタ設定のパッチ

設定ファイルへのアクセスがないデプロイメントの場合:

bash

OpenClawを起動する前に環境変数を設定

export OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true export OPENCLAW_AZURE_RESPONSES_OUTPUT_FORMAT=text

OpenClaw Gatewayを再起動

openclaw gateway restart

オプション4:直接的なプロバイダー設定の更新

~/.openclaw/config.yamlまたはアクティブな設定ファイルを編集します:

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

オプション5:OpenClaw CLIによるランタイム修正

bash

CLIでプロバイダー設定を更新

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

更新を確認

openclaw config get-provider AzureOpenAI-Three

変更を適用するためにゲートウェイを再起動

openclaw gateway restart

🧪 検証

修正を適用した後、以下の検証手順を使用して解決を確認します:

ステップ1:ゲートウェイを再起動して起動ログを確認

bash

OpenClaw Gatewayを再起動

openclaw gateway restart

正常な初期化を監視

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

期待される出力:

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

ステップ2:OpenClaw Control UIでテスト

  1. ブラウザでOpenClaw Control UIを開く
  2. モデルのドロップダウンからgpt-5.3-chatまたはgpt-5.2-codexを選択
  3. テストプロンプトを送信: "Hello, respond with just 'OK'"
  4. 400エラーなしで正常な応答を確認

ステップ3:API呼び出しで確認

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” }’

期待される応答(200 OK): json { “id”: “chatcmpl-…”, “object”: “chat.completion”, “model”: “gpt-5.3-chat”, “choices”: [{ “message”: {“role”: “assistant”, “content”: “OK”}, “finish_reason”: “stop” }] }

ステップ4:リクエストペイロード構造を確認

Azureに送信される実際のペイロードを検査するためにデバッグログを有効にします:

bash

デバッグログを有効化

export OPENCLAW_LOG_LEVEL=debug

テストリクエストを実行

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

期待されるデバッグ出力(Azureに送信されるペイロード): json { “model”: “gpt-5.3-chat”, “input”: { “messages”: […] }, “output”: [ // reasoning: falseの場合、reasoningアイテムは存在しない ] }

ステップ5:ログにreasoningアイテムがないことを確認

bash

reasoningアイテムエラーのログを確認(存在しないはず)

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

期待される結果:出力なし(一致する行がない)

終了コードの確認: bash

最近のログに400エラーがないことを確認

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

期待される結果:0

⚠️ よくある落とし穴

落とし穴1:モデルレベルとプロバイダーレベルのreasoning設定の競合

モデルレベルでのみreasoning: falseを設定しても、プロバイダーレベルのデフォルトを上書きできない場合があります。両方のレベルで設定が一貫していることを確認してください。

不正解: json { “AzureOpenAI-Three”: { “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false // モデルレベルでのみ設定 }] // プロバイダーレベルのデフォルトが上書きする可能性がある } }

正解: json { “AzureOpenAI-Three”: { “modelDefaults”: { “reasoning”: false }, “models”: [{ “id”: “gpt-5.3-chat”, “reasoning”: false // 両方のレベルで明示的に設定 }] } }

落とし穴2:APIアダプタの不一致**

"api": "openai-responses""api": "azure-openai-responses"の代わりに使用すると、Azureエンドポイントに誤った形式でペイロードが送信される可能性があります。

Adapterユースケースペイロード形式
azure-openai-responses直接AzureエンドポイントAzure固有のv1/responses
openai-responsesOpenAI互換プロキシ標準Responses API

デプロイメントタイプにアダプタが一致していることを確認してください。

落とし穴3:Azure用のapi-keyヘッダーが欠落している**

Azure OpenAIエンドポイントでは、apiKeyフィールドだけでなくヘッダーにもAPIキーを必要とします:

json { “AzureOpenAI-Three”: { “apiKey”: “your-key”, “headers”: { “api-key”: “your-key” // Azureで必須 } } }

落とし穴4:Docker環境変数の伝播**

DockerでOpenClawを実行している場合、アダプタ設定用の環境変数が正しく伝播しない場合があります:

bash

不正解:docker runの外で変数を設定

export OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true docker run openclaw

正解:コンテナに変数を渡す

docker run -e OPENCLAW_AZURE_RESPONSES_STRIP_REASONING=true openclaw

落とし穴5:キャッシュされたプロバイダー設定**

OpenClawはプロバイダー設定をキャッシュする可能性があります。設定のリロードを強制します:

bash

設定キャッシュをクリア

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

またはCLIを使用してリロード

openclaw config reload

落とし穴6:モデルIDの大文字小文字の区別**

Azure OpenAIデプロイメントではモデルIDが大文字小文字を区別する可能性があります。正確なデプロイメント名を確認してください:

bash

プロバイダーから利用可能なモデルをリスト

openclaw models list –provider AzureOpenAI-Three

落とし穴7:会話履歴のreasoningアイテム**

初期リクエストが動作する場合でも、会話履歴内の以前のターンのreasoningアイテムが後続のリクエストでエラーを引き起こす可能性があります。アダプタが会話履歴からreasoningアイテムを削除していることを確認してください。

マルチターン会話でこのことを確認: bash

マルチターン会話中にログを監視

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

落とし穴8:バージョン固有のアダプタの動作**

OpenClaw 2026.4.8には特定のアダプターバージョン要件がある可能性があります。アダプタの互換性を確認してください:

bash openclaw –version openclaw adapters list

🔗 関連するエラー

  • HTTP 400: "Invalid request format" — Azure OpenAIリクエストバリデーションの一般的な失敗。reasoningアイテム之外的ペイロード構造の問題を示している可能性があります。
  • HTTP 400: "Unsupported model" — Azure OpenAIデプロイメントがモデルIDを認識しません。デプロイメント名が設定と一致していることを確認してください。
  • HTTP 401: "Authentication failed" — APIキーが無効または期限切れです。Azureエンドポイントで`api-key`ヘッダーが適切に設定されていることを確認してください。
  • HTTP 422: "Content filter triggered" — Azureコンテンツモデレーションがリクエストをブロックしました。プロンプトコンテンツとAzureコンテンツフィルタを確認してください。
  • Error: "Item of type 'reasoning' was provided without its required following item" — このガイドで文書化された特定のエラー。ペイロード内の形式が不正なreasoningブロックを示します。
  • Error: "Token limit exceeded" — リクエストがモデルのコンテキストウィンドウまたはmaxTokensを超えています。プロンプトサイズを減らすか、設定の`maxTokens`を調整してください。
  • WebSocket 1001** — 会話中にゲートウェイが切断されました。未処理の400エラーがControl UIに伝播した結果である可能性があります。
  • Error: "ENOENT: no such file or directory"** — セッションメモリファイルのアクセス失敗。reasoningアイテムのバグとは無関係ですが、同じログに表示される場合があります。

関連ドキュメント:

  • GitHub Issue #1847: Azure OpenAI Responses adapter payload validation issues
  • GitHub Issue #1923: Reasoning items not properly stripped from multi-turn conversations
  • GitHub Discussion #456: GPT-5 model compatibility with OpenClaw adapters
  • Pull Request #2101: Fix reasoning item following-item requirement validation

エビデンスとソース

このトラブルシューティングガイドは、FixClaw Intelligence パイプラインによってコミュニティの議論から自動的に合成されました。