直接回答
400 はサーバーがリクエストを受信したものの、選択した API 契約では処理できないことを示します。縮小前に構造化エラーを保存します。
このガイドで解決できること
invalid_request_error、不正な JSON、未対応パラメータ、エンドポイント不一致による HTTP 400 を解決する。
症状と影響範囲を確認する
リクエストが直ちに 400 を返し、invalid_request_error、パラメータ名、JSON 解析メッセージが含まれることがあります。
モデル一覧は成功しても、tools、stream、response_format、画像、高度なサンプリングを付けた生成だけ失敗します。
- 設定を変更する前に、ステータスまたは例外、レスポンス本文、request ID、UTC 時刻、クライアント版、最終ホストを保存します。
- 最小リクエストと失敗するワークフローを比較し、全体障害、モデル固有、機能固有のどれかを切り分けます。
- 認証情報、完全なプロンプト、顧客データ、非公開ファイルをスクリーンショットやサポート資料に含めません。
主な原因と責任境界
エラーは一つのレイヤーから得た証拠であり、下流全体の故障を証明するものではありません。まず次の可能性を順に検証します。
- JSON の構文不正、二重エンコード、必須項目不足、値の型違い。
- Base URL と SDK のリソースパスが誤って結合され、別のエンドポイントへ送信されている。
- 選択モデルまたは互換ゲートウェイが任意項目・モダリティに未対応。
- Responses API と Chat Completions の項目を混在させている。
レイヤー別に最小診断を行う
可変要素が最も少ないリクエストから開始します。アカウント、API ホスト、対象モデルは維持し、任意機能だけを外します。
一度に一項目だけ変更し、元のステータス、ヘッダー、本文、所要時間を残します。これによりクライアントのシリアライズとゲートウェイ・上流の挙動を分離できます。
- 01境界を確定最終 URL、Content-Type、元のエラー本文、request ID を記録します。
- 02基準を作成モデルと一件のテキスト入力だけを curl で送信します。
- 03一項目を比較curl と SDK を比較してシリアライズ差を分離します。
- 04決定的な証拠を記録stream、tools、出力形式、サンプリング項目を一つずつ戻します。
API_BASE_URL='https://<your-api-host>/v1'
MODEL_ID='<YOUR_MODEL_ID>'
curl -sS -D /tmp/api-headers.txt "$API_BASE_URL/chat/completions" -H "Authorization: Bearer ${API_KEY:?set API_KEY first}" -H 'Content-Type: application/json' --data "{"model":"$MODEL_ID","messages":[{"role":"user","content":"ping"}]}"確認した根本原因に修正を適用する
証拠で確定したレイヤーだけを最小限変更します。決定的な設定エラーを広範な再試行や検証無効化で隠さないでください。
- 01障害レイヤーを修正最小再現で判明した Base URL、JSON 型、必須項目を修正します。
- 02必要な動作を復元対象 API に合わせて payload を作り直し、二種類の API 構造を混ぜません。
- 03一時回避策を除去モデルとゲートウェイが明示的に対応する機能だけを戻します。
from openai import OpenAI
client = OpenAI(api_key="<YOUR_API_KEY>", base_url="https://<your-api-host>/v1")
result = client.chat.completions.create(
model="<YOUR_MODEL_ID>",
messages=[{"role": "user", "content": "ping"}],
)
print(result.choices[0].message.content)一度の成功ではなく修正結果を検証する
最小確認が成功したら元の経路を再実行し、通常のストリーミング、同時実行数、タイムアウト条件でも安定することを確認します。
- 最小リクエストが期待するステータスと構造を返す。
- API バージョンとリソースパスが最終 URL に一度だけ現れる。
- 任意パラメータを個別に戻して成功する。
- ログには機密情報なしの request ID とエラー型だけが残る。
セキュリティ境界とエスカレーション資料
認証、通信、権限、検証を弱めず、かつ機密情報を公開しない範囲で、再現とエスカレーションに必要な証拠を収集します。
- 比較時も Authorization ヘッダーを出力しない。
- プロンプト、アップロード内容、顧客識別子を診断資料から除去する。
- 決定的な 400 を無期限に再試行しない。
- UTC 時刻、request ID、エンドポイント、model ID、最小化した本文でエスカレーションする。
公式情報と検証範囲
本ガイドはプロトコル仕様とクライアント公式文書を根拠にしています。エラー文、再試行ヘッダー、設定項目はサービスやバージョンで変わるため、参照元を確認し、ログとリクエスト例を秘匿してから共有してください。
技術検証方法を見る