先这样答
稳定输出 JSON 有三层手段,约束强度递增。第一层是提示词:在提示里给出目标 JSON 结构和示例,让模型照着写,简单但没有任何保证。第二层是 JSON Mode:接口层面强制输出是合法 JSON,语法一定对,但字段和类型可能不符合要求。第三层是 Schema 约束:把 JSON Schema 交给接口,解码时只允许生成符合结构的 Token,字段、类型、必填项都成了硬约束。
即使用了硬约束,校验也不能省。结构合法不等于内容正确:数字可能越界,枚举外的取值、字段之间的逻辑矛盾都可能出现。工程做法是解析后跑一遍业务校验,失败就把错误信息拼回提示里重试,重试仍失败再走降级路径。Schema 本身也要克制:层级浅、字段少、能用枚举表达的就用枚举,结构越复杂,填充质量越差。
总结一句:结构靠解码约束,语义靠校验和重试,两层各管一段,少一层都会在线上出问题。
面试官会怎么追问
- 「JSON Mode 和 Schema 约束差在哪?」 JSON Mode 只保证语法合法,字段缺失、类型错误都不管;Schema 约束在解码层按结构限定每个位置的取值,字段结构是强制的。前者防语法错,后者连结构一起锁死。
- 「Schema 里该写什么?」 字段类型、是否必填、枚举取值,加上每个字段的含义说明。说明文字直接影响模型的填充质量,写得越具体取值越稳,这部分和提示词工程是同一件事。
- 「解析失败怎么兜底?」 分两级:先做修复重试,把解析错误贴回去让模型改;重试仍失败就走降级路径,比如转人工或记失败单。永远不要假设一定解析得出来。
回答的坑
- 把「合法 JSON」当成「符合业务结构」。JSON Mode 只锁语法,拿它当最终保障会在线上翻车。
- Schema 设计得过深过散。嵌套层级多、可选字段泛滥,模型填充质量明显下降,能用扁平结构和枚举就别绕弯。
同系列的题
—— 本题完 ——