校验(Validation) 结构化输出
别名:
校验层 · 校验器
「提取成功 ≠ 形状符合契约」:把「形状对不对」的检查写进代码,而不是赌模型自觉。校验层是「永远不信任 LLM 输出」这条原则的具体落点,与提取、兜底共同构成结构化输出流水线的三个工位。
它是什么
校验(Validation)层的职责是「把『形状对不对』的检查写进代码,而不是赌模型自觉」:提取成功只证明「这是一段合法 JSON」,不代表「它是我们想要的形状」——模型完全可能给你漏了必填字段的对象、或类型错误的字段。校验层是「永远不信任 LLM 输出」这条原则的具体落点,与提取、兜底共同构成结构化输出流水线的三个工位。
校验什么
类型(string / number / boolean / object / array)、必填字段、嵌套结构——用 JSON Schema(json-schema)最小子集递归实现(第 05 章的 validateAgainstSchema)。错误以路径化字符串数组返回,方便展示与重试时定位。JSON.parse 能产出 null,null 能通过 typeof 检查——校验器第一件事就是处理 null 与数组。
为什么不能省
JSON.parse 对 {"action":"x"} 或 {"needsTool":"是"} 一声不吭,你的程序直到 data.needsTool === true 判断落空才察觉。模型是概率系统,输出不可信是常态;复杂场景可引入 zod 等库——但先手写掌握校验语义(required 缺失报什么错、null 怎么处理、错误路径长什么样),尤其当模型输出是唯一输入时,连「报错信息会不会泄露提示词」都要自己把关。