Schema 深度其实有两道“天花板”,而且它们的失效方式完全不同:一道是公开的、在请求时强制执行的硬限制;另一道根本不是限制,而是“失败形态”的渐变——它不会给出任何错误信息。
硬限制来自 provider 的文档化上限。OpenAI 的 Structured Outputs 指南明确写明了嵌套深度、schema 中对象属性总数、名称与枚举值的合计字符长度等上限。这些数字真实存在,超出后会返回 400 错误;而且自 2024 年 8 月该功能上线以来,这些上限至少被调高过一次。因此,任何你看到的数字(包括本文)都需要在动手设计前与官方当前文档核对。这也是下面不做数字表、只给“探针”的原因。
软限制则是模型开始把正确的值放到错误位置的深度。它没有公告,每次响应仍然能通过校验。它并不属于 provider,而是“模型 + 你的 schema + 你的文档”共同作用的结果——所以没有人能给出一个对你的场景有意义的通用数字。
为什么深度问题会静默失效?这是本文最核心的一点:受约束解码并不会消除错误,它只是把错误搬到了别处,而嵌套正是这种迁移最明显的地方。
如果没有约束,模型一旦在嵌套中迷失,会生成括号不匹配的文本,解析器立刻报错:声音大、可追踪。但有了约束,不匹配的括号根本不可能出现:在语法不允许的位置,mask 不会输出 "}"。于是,已经“漂移”的模型只能生成语法完美、但值放错子对象的文档。
同样的漂移,在无约束时是解析失败;在受约束时,却变成一份看似正常的错误结果。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.