跳到正文
加入会员

用 ChatGPT 从示例数据生成并验证 JSON Schema

阅读需要 5 分钟

不要让 ChatGPT 只看一份样本就猜规则。本教程用正常与失败样本建立字段决策表,生成 JSON Schema,并通过 Ajv 检查错误路径。

多份 JSON 对象穿过规则模板并分别触发有效和无效状态

最终结果应是一份不过松、也不过度拟合样本的 JSON Schema:它能接受准备好的正常 JSON,并在无效样本上返回准确的字段路径和原因。ChatGPT 负责归纳候选规则与生成初稿,真正的判定来自业务决策、Schema 规范和本地验证器。

版本、权限与准备材料

本文适用于 ChatGPT 当前网页版,或 OpenAI API 当前可用的结构化输出能力,日期为 2026 年 8 月 30 日。网页端与 API 的模型、数据控制、文件限制及 JSON Schema 支持范围并不必然相同,应核对当前界面和 OpenAI Structured Outputs 文档,不要把某个入口的能力推定到所有套餐。

小黑用语法镂空尺检查 JSON 卡片中的字段是否符合约束

材料 最低数量与用途
正常样本 至少三份,覆盖可选字段、数组和常见变化
失败样本 至少两份,分别触发缺失字段与错误格式
业务决策 明确必填、可空、枚举、未知字段和版本策略
验证环境 安装 Node.js 与 Ajv,或使用项目既有验证器

样本必须先脱敏。订单、用户、医疗或日志数据中的姓名、地址、令牌和内部标识不应直接发送给外部模型;可以保留字段结构,用虚构值替换内容。

从样本建立字段决策表

一份样本只能说明“出现过什么”,不能证明“必须是什么”。逐字段记录观察类型、是否在所有正常样本出现、是否允许 null、格式要求、可选枚举及是否允许额外属性。业务负责人无法确认的项目应标成待定,而不是让 ChatGPT 自行选择。

字段 观察 需要人工决定
id 三个样本均为字符串 是否必填、长度和字符范围
email 可能缺失 缺失与 null 是否等价
status 出现两个值 是否封闭为枚举
metadata 键不固定 是否允许扩展字段

JSON Schema 的关键字组合和逐步建模方式可参考 JSON Schema 官方入门教程。特别要区分 required 与 null:字段可以必填但允许空值,也可以不出现但出现时必须是字符串。

让 ChatGPT 先解释,再生成 Schema

根据以下正常样本、失败样本和字段决策表,生成 JSON Schema 候选稿。
要求:
1. 不从单个示例推断未经确认的枚举或长度。
2. 明确列出 required、null 和 additionalProperties 的选择依据。
3. 使用与验证器兼容的方言,并声明 $schema。
4. 先输出假设与待确认项,再输出完整 Schema。
5. 为每个失败样本说明预期错误路径。

将样本分组粘贴,并明确哪些是应通过、哪些必须失败。生成后逐项审查 type、required、format、items、minimum、pattern 和 additionalProperties。最常见的过拟合是把样本中的两个状态直接锁成 enum,或根据一条编号推断固定长度;最常见的过松则是所有字段都可选、所有对象都允许未知键。

如果 Schema 用于 OpenAI API 的结构化输出,还要单独核对该能力当前支持的 Schema 范围。用于模型输出约束的 Schema 与用于业务 API 验证的完整 Schema,可能需要维护不同版本,不能因为名称相同就假定支持完全一致。

用 Ajv 验证正常与失败样本

Ajv 的安装、编译和错误信息读取方式可参考 Ajv 入门文档。具体配置应与项目采用的 Schema 方言及格式插件保持一致。

import Ajv from 'ajv'
import schema from './schema.json' with { type: 'json' }
import validSample from './valid.json' with { type: 'json' }

const ajv = new Ajv({ allErrors: true })
const validate = ajv.compile(schema)
const ok = validate(validSample)
console.log(ok, validate.errors)
  1. 逐一运行所有正常样本,任何失败都要判断是 Schema 太严还是样本本身错误。
  2. 运行每个失败样本,确认它确实失败,且错误路径指向预期字段。
  3. 为每条核心规则增加一个最小反例,例如缺少必填项、格式错误或出现未知字段。
  4. 修改 Schema 后重新执行全部样本,避免修复一个错误时放宽其他约束。
  5. 把样本和 Schema 纳入自动化测试,防止接口演进造成静默变化。

失败诊断与人工复核

  • 正常样本被拒绝:检查 required、additionalProperties、数组元素类型和 null 处理。
  • 无效样本通过:确认规则是否只写在描述中而没有变成关键字,并检查 pattern 是否正确转义。
  • format 没有效果:核对验证器及插件配置,不要假定所有实现默认执行相同格式检查。
  • 错误路径不准确:查看嵌套 object、items 与组合关键字,减少不必要的 anyOf 或 oneOf。
  • ChatGPT 前后规则不一致:回到字段决策表,要求逐条映射,不要通过反复自由改写解决。

人工复核应覆盖业务兼容性:新增字段是否会被旧客户端拒绝,数值单位是否明确,日期是日期还是日期时间,标识符能否有前导零。Schema 版权通常不取代原始数据和接口文档的许可要求;使用第三方示例前仍要确认授权。

成本与维护边界

网页订阅、API 调用和长上下文可能产生不同成本,具体以当前账户为准。不要把完整生产数据作为提示样本。Schema 应有版本记录、变更评审和回归样本;AI 可以加速初稿,但不能决定字段兼容性、监管保留要求或数据是否允许收集。

结论

ChatGPT JSON Schema 生成的可靠路径是:多样本观察、人工字段决策、约束初稿、本地验证和反例回归。把模型限制在“归纳与起草”角色,并让有效及无效样本共同参与验证,才能得到可维护的数据契约。

常见问题

只有一份 JSON 示例能生成 Schema 吗?

可以生成候选稿,但不能可靠判断必填、枚举和可选变化。至少补充多份正常样本及明确的失败样本,再由业务人员确认规则。

additionalProperties 应该直接设为 false 吗?

不应机械设置。封闭对象有助于发现拼写错误,但也可能破坏向后兼容;应根据接口扩展策略逐层决定。

ChatGPT 生成的 Schema 还需要验证器吗?

需要。模型输出只是文本候选,必须由 Ajv 等兼容验证器执行,并检查正常样本、反例和具体错误路径。

想要系统学习 AI 辅助创作与开发?

文章解决具体问题;完整课程会把前置知识、操作流程、验证方法和项目资料放在一起。

查看系统课程

相关文章