跳到正文
docai.cc

DOCAI · 概念 · L2

JSON 模式和结构化输出有什么区别

一句话定义

JSON 模式保证「语法合法」,结构化输出保证「符合这份 schema」;生产里后者更可靠。

开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部

两种保证,强度不同

能力 保证什么 不保证什么
JSON 模式 输出能被 JSON 解析 字段对不对、类型对不对、有没有漏
结构化输出 输出符合你提供的 schema 值是否正确

前者解决「解析失败」,后者解决「字段乱来」。生产环境里,解析失败只是第一层问题, 更常见的是字段名变了、数组变对象、该填的没填。

结构化输出怎么工作

你提供一份 schema(字段名、类型、必填、枚举),服务在生成时约束解码: 不让模型生成不符合 schema 的 token。这比「在提示里求它输出 JSON」可靠得多, 因为它不是靠模型自觉。

没有原生结构化输出的服务,通常用工具调用达到类似效果: 把 schema 当成一个工具的参数定义,模型「调用」这个工具,参数就是你想要的 JSON。

schema 怎么写

  1. 字段少而明确:一个对象五六个字段,比二十个字段稳。
  2. 能用枚举就别用自由文本:"status": "ok" | "failed" 比字符串可靠。
  3. 必填和可选分开:模型对可选字段的处理不如必填稳定。
  4. 避免深层嵌套:三层以内;再深就拆成两次调用。
  5. 加一个 notes 字段:让模型把「不确定」写在这里,避免它硬填。

校验不能省

即使有 schema 约束,也要在代码里校验:

  • schema 过了,但值可能是编的(比如不存在的订单号);
  • 业务规则不在 schema 里(金额必须为正、日期不能是未来)。

schema 管形状,业务校验管内容,两层都要。

常见误解

  • 「开了 JSON 模式就不会出错」:它只管语法,字段仍然可能缺或错。
  • 「schema 越严格越好」:过严会让模型在信息不足时硬填,反而不如允许 null。
  • 「结构化输出能保证事实正确」:不能,它只约束格式。

下一步

来源

定义与事实以以下来源为准;表述与取舍是本站整理的。
  1. [1]OpenAI · Structured outputs
  2. [2]Anthropic · Tool use

相邻概念