1. 结构化输出的 schema 校验、类型守卫与错误回退
AI 结构化输出(Structured Output)的 schema 校验、类型守卫与错误回退如何实现?前端有哪些工程实践?
- JSON Schema 校验(zod/ajv)与流式部分校验
- 类型守卫(type guard)与运行时校验的分工
- 校验失败的降级与重试策略
模型输出是"非结构化"的,结构化输出(Structured Output)通过 schema 约束生成格式,但运行时仍需二次校验。工程链路:定义 schema(zod 或 JSON Schema),服务端用结构化输出 API(如 OpenAI response_format、Vercel AI SDK 的 experimentalObject 或 streamObject),客户端对最终结果用 zod.parse 或 ajv 校验;校验前先用类型守卫(如 isArticle(obj))做快速结构判断,再细校验字段。流式场景可用 partial-json 或 zod 的流式解析器在增量阶段就校验部分结构,尽早发现偏离。错误回退策略:校验失败视为生成失败,可设置最大重试次数(带修正提示重试)或降级为自由文本展示并提示;结构化失败不能静默进入业务逻辑,防止下游崩溃。工程上把 schema 作为前后端共享的单一事实来源(单一 spec),保证类型定义与校验规则一致。
核心是"schema 约束生成 + 运行时二次校验 + 失败回退"闭环,答出类型守卫与运行时校验的分工、流式部分校验与共享 schema,体现工程严谨性。