AI / LLM 开发

结构化输出 Schema 检查

粘贴 JSON Schema 或函数 parameters 本体,选择目标适配器,查看带路径的结构诊断与修改建议。

结构化输出 Schema

JSON Schema

校验报告

粘贴 JSON Schema 开始检查。

输入与引用均在此浏览器处理,不上传校验数据,也不抓取远程引用。

粘贴 Schema 本体;函数参数仅粘贴 parameters 中的对象,不包含请求包装。

规则核对日期:2026-09-15。 官方规则

这里只做本地预检,不能证明 API 接受,也不认证具体模型版本。

粘贴 JSON Schema 开始检查。

大模型结构化输出接入时,最难排查的往往不是少了一个逗号,而是接口拒绝了一份在普通校验器里有效的定义。结构化输出 Schema 检查把元结构与目标规则分开报告,帮助你判断应修正语法、字段定义,还是重新设计接口契约。

从常规 JSON Schema 校验切换到 OpenAI 函数调用时,默认可选的属性与动态键很容易成为遗漏。先选择真实使用的目标,再结合报告中的规则日期检查这些差异,能让讨论聚焦到具体路径,而不是反复猜测模型为什么报错。

为什么先检查结构化输出 Schema

有效的定义也可能缺少严格模式要求

普通 Schema 可以允许省略字段,也可以开放额外属性。面向 OpenAI strict 的结构化输出 Schema 则有额外条件。工具先给出元结构结论,再列出所选目标的问题;每条诊断都包含路径和建议,便于直接回到出错的对象层级。

同一棵结构树通过普通检查,却在第二种检查中标出两个待处理分支。

切换目标,保留业务定义

OpenAI 与 Gemini 的子集规则不同。同一份输入切换适配器后,诊断会重新计算,但原文保持不变。工具不会为了让报告变绿就补齐 required 或删掉未知关键字,你可以先判断这些改动会不会改变业务允许的数据范围。

一份保持不变的 Schema 分别连接两个目标,并显示不同的诊断标记。

先辨认输入,再理解诊断

01

函数模式只要参数本体

选择 OpenAI 函数参数目标后,只粘贴 parameters 中的对象。不要连同 name、strict、function 或完整请求一起粘贴;这些包装属于接入代码,本页不验证函数名,也不会发送请求。

02

对照两份示例看差异

可用示例包含一个“必须出现但可以为 null”的字段。问题示例缺少严格对象条件,在 OpenAI 下会有诊断,切换 Gemini 则可看到哪些条件不是通用要求。载入示例先展示预览,确认后才替换输入。

03

修改后重新生成报告

自动检查会在停顿 350 ms 后执行;关闭开关才显示主按钮,也可用 Ctrl/Cmd + Enter。编辑输入或修改目标会立即禁用旧报告的复制和下载。撤销会一起恢复之前的输入、目标和结果,避免内容对不上。

把接口拒绝变成可定位的检查项

先查 Schema 自身结构

使用随工具提供的 2020-12 元 Schema 检查关键字的值类型与结构位置。严格解析器拒绝重复键和无法精确表示的数字;注释、尾逗号、代码围栏会报语法错误,不会被悄悄修成另一份内容。

识别本地引用与字段路径

诊断使用 JSON Pointer,包含属性名中斜线与波浪号的转义。工具检查本地引用是否指向存在的 Schema 位置。名为 allOf 的业务属性不会被误当作组合关键字,enum 中的字符串也不会被递归解释成规则。

区分阻断项与未覆盖项

OpenAI 两个目标采用非微调 strict 规则,Gemini 按公开 JSON Schema 子集检查。明确不支持的组合关键字显示错误;没有充分核对的关键字或格式显示“需复核”,防止“暂时没发现问题”变成不准确的兼容保证。

导出可以复查的诊断

JSON 报告保留适配器、规则日期、结构结论、计数与诊断代码。长列表先展示 50 条,可继续展开;导出仍包含完整报告。即使把报告发给同事,对方也能看出它针对哪个目标生成,而不必依赖截图猜测。

预检结论的使用边界

规则快照不能替代真实接入
规则核对日期为 2026-09-15。本地检查不认证账号权限、具体模型版本、端点、SDK 的归一化行为或拒绝响应。微调 OpenAI、Anthropic、Gemini 函数调用及第三方代理均没有适配器,最终仍需用实际接入环境验证。
只检查一种草案与本地指针
元结构检查固定为 2020-12;显式使用旧版本会报不支持,不会自动迁移。不获取远程 $ref,也不解析具名锚点。本地指针必须指向 Schema 位置;递归定义会有限检查,不能证明所有可能展开结果都符合远端复杂度预算。
工具容量与厂商预算分开
单次最多 500000 字符、50000 个解析节点及 40 层 JSON 嵌套;Worker 超过 5 秒会停止。超过 1000 条诊断时整次检查失败,不会截断后宣称通过。OpenAI 的属性、枚举、字符及嵌套预算则作为独立规则报告。
修改建议不会自动覆盖
补 required、加入 null、关闭额外属性或删除关键字都可能改变契约,所以这里只给建议。类型允许 null 不代表字段可以省略;有 enum 时还必须单独考虑是否包含 null。请先确认消费者代码如何处理这些变化,再编辑并重新检查。
模型返回值另行验证
本页检查送给模型的定义,不检查模型生成的实例,也不证明业务值正确。它不从样例推断 Schema、不生成回答、不修复损坏的 JSON。拿到实际返回数据后,仍要做实例校验,并根据业务规则检查枚举之外的语义。

结构化输出 Schema 常见问题

检查通过后可以直接用于 OpenAI 或 Claude API 吗?

不能据此认为一定能接入。这里的目标仅覆盖 OpenAI 非微调 strict 与 Gemini 输出规则,Claude 没有对应适配器。即使本地没有诊断,也要把 Schema 放入正确的请求字段,用实际端点、模型和 SDK 验证;本页没有执行任何模型调用。

支持完整的 JSON Schema 规范吗?

元结构依据 2020-12 检查,但目标适配器只覆盖公开并已核对的子集。本地引用只接受指向 Schema 位置的 JSON Pointer,远程引用和具名锚点不在范围。未覆盖关键字会显示需复核,而不是静默忽略后给出兼容结论。

required 中的名称未在 properties 声明是什么意思?

它表示必填列表提到了一个对象属性定义中不存在的名称。在 OpenAI strict 目标中,请核对大小写、拼写和所属对象层级;不要只往 required 里添加名称。每个字段都应在正确层级声明类型,再与该层的必填列表对应。

为什么 OpenAI 严格模式要求每个字段都是 required?

严格输出需要固定的对象形状,因此所有已声明字段都要出现。未知值可按业务需要用 null 表示,而不是省略字段。若字段还有 enum,枚举也应允许 null;“可空”与“可省略”不是同一条件,修改时要同时检查调用方的处理逻辑。

additionalProperties 应该开启还是关闭?

这取决于目标和业务契约。OpenAI strict 要求每层对象明确为 false;Gemini 的公开子集允许布尔值或一个额外属性 Schema。动态字典在一个目标下可用,不代表切换后仍能原样使用,工具会把这种差异列在对应对象的路径上。

发现未覆盖的情况?

带着具体诊断回到定义

回到结构化输出 Schema 检查器,选好目标并从第一条诊断开始核对。修改字段的必填、可空或额外属性规则前,先确认接收这些数据的代码是否接受新的契约。