要求模型响应符合声明的模式,对解析失败、模式失败和语义失败进行不同处理,并且有一个有界的修复循环,不能无限重试或默默丢弃必填字段。
包状态: AI辅助参考包。静态包验证已通过;实现场景尚未运行,且在稳定采用前需要人工领域审核。
决策
结构化的 LLM 输出在任何下游副作用发生前,需经过明确阶段的验证。解析确认语法有效性;模式验证确认结构和必填字段;语义验证确认 JSON Schema 无法单独表达的领域规则。每种失败类型对应一个有界的修复策略,可能要求模型带错误上下文重新生成,但修复尝试有上限,循环检测阻止重复相同失败,且必填字段绝不能被默默丢弃以强制接受。终止拒绝时返回带类型的错误给调用方,除非配置明确允许人工审核队列,否则不存储部分接受的记录。
范围
- 用于抽取、分类和工具结果解析的输出信封。
- 解析、模式和语义验证的顺序及失败分类。
- 有界修复循环及终态接受或拒绝。
- 失败类别和修复次数的可观测性。
不在此范围内
- 模型选择和成本路由(见相关模型路由模块)。
- 提示注入防护和工具授权。
- 拒绝信封的人类标注工作流。
合约
- 每个结构化输出请求都引用一个模式版本;验证按解析、模式、语义顺序执行。
- 解析失败拒绝尾随非 JSON 文本和格式错误的分隔符;绝不部分反序列化到下游系统。
- 模式失败识别缺失或类型错误的必填字段;修复不得省略必填字段以通过验证。
- 语义失败与模式失败分开记录,使用配置中的 repair.semantic.max_attempts 预算,该预算可能低于解析或模式预算,因业务风险较高。
- 修复尝试按失败类别受限于配置键 repair.parse.max_attempts、repair.schema.max_attempts 和 repair.semantic.max_attempts,且总计受限于 repair.total_max_attempts;当启用 repair.stop_on_same_error_hash 时,连续尝试出现相同验证错误哈希立即终止修复。
- 终态拒绝状态返回失败类别和修复次数给调用方,且不写入接受记录,除非启用了显式人工审核路径。
实现指导
- 保持验证代码独立于供应商 SDK 的解析辅助工具,以保证失败类别的可移植性。
- 将结构化错误路径传入修复提示,而非仅传入原始模型输出。
- 在接受记录旁存储模式版本和验证器版本,便于回放和审计。
失败处理与保障措施
- 使用与每次调用模型延迟分开的墙钟时间预算来超时修复循环。
- 在信封达到接受状态前,不执行工具调用或数据库写入。
- 当先前输出意外包含敏感令牌时,从修复提示中脱敏秘密信息。
验证与运维
- 测量接受率、失败类别分布、平均修复次数和循环检测终止次数。
- 独立进行解析、模式和语义失败的夹具测试。
- 证明尝试丢弃必填字段的情况绝不会达到接受状态。
本包中看似可执行的示例是夹具和接受合约。先对包结构和元数据运行静态验证,然后在目标仓库中实现并执行场景。
采用假设
example.yaml中的名称和数值是采用配置,不是通用默认值。- JSON Schema 2020-12 仅作描述性引用;团队可使用等效验证器。
- 供应商结构化输出功能可辅助生成,但不替代服务器端验证。