主题
LLM 输出的 Pydantic Schema 为什么不只是“把 JSON 解析成对象”?
题型:追问 · 把 Schema 解释为跨阶段可演进的数据契约。
建议回答
Schema 首先是业务契约:字段要表达稳定实体 ID、枚举、可选性、长度和数值范围,跨字段校验还要覆盖时间顺序、引用目标存在、人物与场景关系等规则。其次它是节点边界,分镜节点不应依赖上游的一段自由文本,而应依赖明确版本的设定对象;这样才能做缓存、差异比较、失效传播和历史任务恢复。
如果模型供应商支持 JSON Schema 或约束解码,可以把兼容的约束前置到生成阶段,减少语法和字段错误;Pydantic 仍负责服务端验证、规范化和版本迁移。语法合法不代表语义正确,因此还要把解析错误、字段错误、跨字段错误和业务校验错误分开记录。Schema 也不能无限复杂,过深嵌套和大量条件分支会增加 Prompt 体积与模型理解难度,必要时应拆成多阶段输出。
进一步追问
- 新增必填字段后,正在恢复的旧 Job 怎样兼容?
- Pydantic 的自动类型转换会不会掩盖模型输出问题?
易错点
- 不要把默认值用于掩盖关键字段缺失,否则错误会静默传播到下游。
- 不要让 Schema 直接绑定某个模型供应商的私有响应格式。