用途:从大模型 API 响应中提取类型化、经校验的数据,替代自由文本解析,适用于将模型输出直接接入数据库、API 调用或 UI 渲染的流水线。
主要能力:覆盖三种主流做法——OpenAI 的 response_format 配 JSON Schema(strict 模式启用约束解码)、Anthropic 将 tool_use 块用于结构化提取(tool_choice 强制指定工具)、Google Gemini 的 responseSchema 配 responseMimeType;本地模型可用 GBNF 或约束解码。还涉及 Zod 的 zodResponseFormat()、Pydantic、instructor/marvin 等。
使用方式:先确定目标 schema(字段类型、必填/可选、枚举),再按提供方选择方法;为每个字段写 description,系统提示强调“数据提取”角色;OpenAI strict 模式需设 strict: true 且 additionalProperties: false。响应在应用代码中再次用 Pydantic model_validate() 或 Zod .parse() 校验,失败可携带错误重试(建议上限 3 次),并记录输入、原始响应、解析结果与错误。Anthropic 数据仅在 type == "tool_use" 的 input 中,不要解析 text 块。
适用场景:结构化抽取(发票、评论分析、事件信息)、JSON/枚举输出、数据管道集成。
限制:约束解码只保证结构符合,不保证语义正确;长文本需分块后合并;递归或过深 schema 会增延迟;数组字段描述不清可能返回空;枚举大小写需归一化;流式输出不能按块解析;OpenAI 结构化输出可能返回 refusal。schema 变更需用真实样本回归测试,并固定模型版本。不要用于自由文本生成或真正的工具调用编排。