結構化輸出工具

LLM 結構化輸出 JSON Schema 校驗與自動修復器

貼上用於函數呼叫或 response_format 的 JSON Schema,精準定位在 OpenAI、Claude 與 Gemini 中觸發 HTTP 400 拒絕的規則,並一鍵複製正規化後的嚴格 Schema。

執行方式免登入 · 100% 瀏覽器本地計算Schema 規則確認於 2026 年 11 月 11 日
01

結構化輸出 JSON Schema 校驗與自動修復器

貼上工具或 response_format 的 JSON Schema,偵測導致 HTTP 400 的相容性問題並自動產生正規化的嚴格 Schema。

校驗狀態偵測到 6 個阻斷性 Schema 問題
自動正規化後的嚴格 JSON Schema
request.example
{
  "type": "object",
  "properties": {
    "invoiceId": {
      "type": "string"
    },
    "currency": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "USD",
        "EUR",
        "GBP"
      ]
    },
    "totalAmount": {
      "type": "number"
    },
    "customer": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "taxId": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "name",
        "taxId"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "invoiceId",
    "currency",
    "totalAmount",
    "customer"
  ],
  "additionalProperties": false
}

相容性診斷明細

  • $.additionalProperties嚴格模式要求每個物件節點明確設定 "additionalProperties": false。
  • $.required (currency, customer)OpenAI strict 模式要求將所有屬性列入 required;選填屬性已自動轉換為可空聯合型別。
  • $.properties.invoiceId.pattern嚴格結構化輸出常拒絕數值或格式限制關鍵字;建議將規則移入 description,並在應用程式碼中以 Zod 或 Pydantic 驗證。
  • $.properties.totalAmount.minimum嚴格結構化輸出常拒絕數值或格式限制關鍵字;建議將規則移入 description,並在應用程式碼中以 Zod 或 Pydantic 驗證。
  • $.properties.customer.additionalProperties嚴格模式要求每個物件節點明確設定 "additionalProperties": false。
  • $.properties.customer.required (taxId)OpenAI strict 模式要求將所有屬性列入 required;選填屬性已自動轉換為可空聯合型別。
02

工程原理與上線檢查

為何合法的 Draft-07 JSON Schema 仍會在 LLM API 回傳 HTTP 400

受限解碼引擎會在開始生成前,先將你的 JSON Schema 編譯為上下文無關文法(CFG)或有限狀態 token 遮罩。 為了讓文法編譯保持高速且狀態可控,OpenAI、Anthropic 與 Google 各自強制執行比標準 Ajv、Zod 或 Pydantic 預設匯出更嚴格的 JSON Schema 子集。

例如 OpenAI 的 strict: true 模式會拒絕任何漏寫 additionalProperties: false 或未將所有屬性列入 required 陣列的物件節點——因此選填欄位仍須寫入 required,並改以 ["string", "null"] 等可空聯合型別表示。 相反地,Google Gemini 的 generationConfig.responseSchema 則完全拒絕出現 additionalProperties 關鍵字。

Schema 規則OpenAI 嚴格模式 (strict: true)Anthropic 嚴格工具 / JSONGemini responseSchema
根節點 type 必須為 "object"必填要求必填要求強烈建議
每個物件宣告 "additionalProperties": false必填(省略回傳 400)必填(省略回傳 400)禁止出現(存在回傳 400)
全部屬性列入 "required"必填(選填欄位改用 [type, "null"])允許省略選填鍵允許省略選填鍵
正規表示式 pattern / minLength / format嚴格語法不支援支援有限,建議寫入 description 並由後端校驗多數文字 format 不支援

正式環境結構化擷取與工具 Schema 的可靠性檢查清單

自動修復語法衝突能幫請求通過 HTTP 400,但穩定的擷取品質仍取決於 Schema 內部清晰的語意設計。 保持欄位名稱語意直觀、避免過深的遞迴巢狀結構,並明確處理模型的拒答回應(refusal)。

  • 將正規表示式、字串長度上下限與數值範圍移入欄位的 description,並在解析後以 Zod 或 Pydantic 執行確定性驗證。
  • 呼叫 JSON.parse 前請先檢查 finish_reason(或 stop_reason)是否因達到 max_tokens 而截斷——截斷的 JSON 即使開啟嚴格模式仍會解析失敗。
  • 在讀取解析後的結構化資料前,請先檢查明確的安全或政策拒答欄位。

常見問題

在 OpenAI strict 模式下如何表示選填欄位?

將該欄位名稱保留在物件的 required 陣列中,並將其 type 改為如 ["string", "null"] 的可空聯合型別。 上方的自動修復工具會自動完成此轉換。

為什麼在 OpenAI 可正常運作的 Schema 會被 Gemini 拒絕?

OpenAI strict 模式要求每個物件加上 additionalProperties: false,但源自 OpenAPI 的 Gemini responseSchema 解析器會拒絕包含 additionalProperties 在內的未知關鍵字。 將上方目標下拉選單切換為 Google Gemini,即可自動移除不相容的鍵。

開啟結構化輸出後,仍需用 Zod 或 Pydantic 驗證回應嗎?

可以。 受限解碼負責確保 JSON 型別與必填鍵一致,而正數金額、合法日期與授權 ID 等業務不變量仍須由應用程式驗證器把關。

在真實模型路由上測試你的嚴格 Schema

複製上方正規化後的 JSON Schema,在 LLMFly AI 發送一筆非串流請求完成驗證。

取得 API 金鑰