结构化输出工具

LLM 结构化输出 JSON Schema 校验与自动修复器

粘贴用于函数调用或 response_format 的 JSON Schema,精准定位在 OpenAI、Claude 与 Gemini 接口中触发 HTTP 400 的不兼容规则,并一键复制自动规范化后的严格模式 Schema。

运行方式免登录 · 纯浏览器本地计算Schema 规则复核于 2026 年 11 月 11 日
01

结构化输出 JSON Schema 兼容性检查与自动修复

粘贴你的工具调用或 response_format JSON Schema,检测导致 HTTP 400 的不兼容字段,并一键生成符合严格模式的修复版 Schema。

校验结果发现 6 个会导致 HTTP 400 的阻断问题
自动规范化后的可用 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 包含全部属性;可选字段已自动转为可空联合类型 ["type", "null"]。
  • $.properties.invoiceId.pattern严格结构化输出常拒绝此类数值或格式校验关键字,建议移到描述说明并在应用层用 Zod/Pydantic 校验。
  • $.properties.totalAmount.minimum严格结构化输出常拒绝此类数值或格式校验关键字,建议移到描述说明并在应用层用 Zod/Pydantic 校验。
  • $.properties.customer.additionalProperties严格模式要求每个对象节点显式声明 "additionalProperties": false。
  • $.properties.customer.required (taxId)OpenAI strict 模式要求 required 包含全部属性;可选字段已自动转为可空联合类型 ["type", "null"]。
02

工程原理与上线检查

为什么符合标准 Draft-07 的 JSON Schema 仍会被大模型接口返回 HTTP 400

大模型结构化输出在推理前会将你的 JSON Schema 编译为上下文无关文法(CFG)或有限状态 Token 掩码。为了控制语法图编译耗时与状态爆炸,OpenAI、Anthropic 与 Google 各自只支持标准 JSON Schema 的一个严格子集,这与 Zod、Pydantic 或 Ajv 默认导出的宽松结构经常冲突。

最典型的冲突有两处:第一,OpenAI 的 strict: true 模式要求每一层 object 都必须显式声明 additionalProperties: false,且所有属性键都必须写进 required 数组(可选字段需改写为 ["string", "null"] 联合类型);第二,Google Gemini 的 generationConfig.responseSchema 则恰恰相反,只要出现 additionalProperties 字段就会直接拒绝并返回 HTTP 400。

Schema 约束项OpenAI 严格模式 (strict: true)Anthropic 严格工具 / JSONGemini responseSchema
根节点 type 必须为 "object"强制要求强制要求强烈建议
每个对象声明 "additionalProperties": false强制要求(缺失返回 400)强制要求(缺失返回 400)禁止出现(存在返回 400)
全部属性写入 "required" 数组强制要求(可选字段用 [type, "null"])允许省略可选字段允许省略可选字段
正则 pattern / minLength / format严格语法不支持支持有限,建议写入描述后业务校验多数字符串 format 不支持

生产环境结构化抽取与工具调用的可靠性清单

通过自动修复消除 HTTP 400 只是第一步;要想在复杂文档和长工具链中拿到高准确率的字段值,还需要配合清晰的字段语义与截断保护。

  • 将正则表达式、长度上下限与数值范围写进字段的 description,并在拿到 JSON 后用服务端 Zod 或 Pydantic 做确定性二次校验。
  • 调用 JSON.parse 之前先检查 finish_reason(或 stop_reason)是否因达到 max_tokens 而截断——被截断的半截 JSON 即使开启了严格模式也会解析失败。
  • 优先检查响应中的安全拒答字段(refusal),避免把拒答响应当成正常结构化数据写入下游数据库。

常见问题

在 OpenAI strict 模式下如何表达可选字段?

把该字段名保留在对象的 required 数组中,同时将其 type 改为包含 null 的联合类型(如 ["string", "null"])。上方工具会自动为你完成这一转换。

为什么同一份 Schema 在 OpenAI 能跑通,换到 Gemini 就报 400?

因为 OpenAI 严格模式要求每个对象带上 additionalProperties: false,而 Gemini 基于 OpenAPI 子集的 responseSchema 解析器不接受 additionalProperties 关键字。在上方下拉框切换到 Google Gemini 即可一键剥离不兼容字段。

开启严格结构化输出后,后端还需要用 Zod 或 Pydantic 校验吗?

需要。受限解码保证的是字段名与基础类型匹配,而正数金额、合法日期区间和用户越权检查等业务不变量仍必须由服务端把关。

在真实模型路由上验证你的严格 Schema

复制上方自动规范化后的 JSON Schema,使用 LLMFly AI 发送一条非流式请求完成验收。

获取 API Key