JSON Schema 是一套描述和校验 JSON 数据“应该长什么样”的规范:字段叫什么、是什么类型、哪些必填、能不能为空、取值范围、数组元素结构等,都可以写成机器可读的规则。
打个比方。JSON 像一张填好的快递单,里面有收件人、电话、地址;JSON Schema 则是快递单的印刷模板和填写说明:收件人必填,电话必须是字符串,地址可以嵌套省市区,重量必须是数字。你拿模板一对照,就知道这张单子合不合格。程序里的校验器(validator)干的就是这件事:不合格就报错,而不是等到业务逻辑里才崩。
它和“结构化输出”(Structured Output)的关系,容易反过来理解。结构化输出是目标:让模型别返回一大段散文,而是返回程序能直接解析、字段稳定的数据,比如 {"name":"张三","age":30}。JSON Schema 是常用合同:你把这个合同交给模型接口,接口再把它编译成约束解码(constrained decoding)规则,限制模型每生成一个 token 时只能从合法选项里挑。于是模型不是“尽量遵守”,而是被语法卡住,很难跑出 JSON 之外。
但谁依赖谁?JSON Schema 不依赖大模型存在。它本来是通用的 JSON 校验规范,后端校验 API 请求、配置文件、数据管道都在用。反过来,结构化输出若想要“严格模式”或“强约束”,通常会依赖 JSON Schema 或其子集作为机器可读的契约。没有 schema,结构化输出也能做,比如固定模板、枚举、正则;只是表达复杂嵌套和类型约束时,JSON Schema 更顺手。
| 概念 | 是什么 | 依赖关系 |
|---|---|---|
| JSON | 一种数据格式 | 被描述、被校验 |
| JSON Schema | 描述和校验 JSON 的规则 | 独立规范,可被结构化输出借用 |
| 结构化输出 | 让模型返回可解析数据的目标 | 可用 JSON Schema 做约束,也可不用 |
实际意义很直接。对 AI 从业者,写 schema 等于给模型一张填表说明,能减少解析失败、格式重试和补丁代码;但要记住它只管语法,不管语义:它能保证 age 是整数,不能保证 age 符合业务事实。对普通职场人,未来很多 AI 功能——提取发票、生成工单、填 CRM——背后都是先定义字段,再让模型填。各家平台对 JSON Schema 的支持范围与严格程度不同,具体以官方页面为准。
