两个模型对同一结构化输出 Schema 的不同理解
当你的备用路由(fallback route)第一次在生产环境中触发时,绝不是发现两个供应商对你的 schema 定义存在分歧的好时机。在两个客户端配置中,JSON Schema 看起来完全一样。验证器对两个输出都通过了。下游代码按名称读取字段并获取一个值。接着,账单总额以数字字符串而非整数的形式出现,或者长度为一的列表以纯对象而非单元素数组的形式到达,一段已经正常运行了六个月的代码路径会静默地返回错误答案。
结构化输出引人入胜之处在于它消除了一类错误——无法解析的 JSON、幻觉字段、缺失的键——因此让人感觉它彻底解决了解析问题。实际上它所做的是将解析问题向上移动了一层,从词法分析器(lexer)移到了类型系统,在那里问题变得更难被察觉。两个供应商可以都遵循 JSON Schema,但仍然产生不可互换的输出,因为在这个生态系统的角落里,“遵循”至少有四种不同的含义,而你的 schema 并没有指明你想要哪一种。
