稳定获取结构化输出有三层手段。第一层提示工程:在提示中给出目标 JSON Schema 和示例,要求只输出 JSON 不要多余文字——简单但不保证合法,需配合解析重试。第二层模型原生能力:OpenAI 的 JSON mode 保证输出是合法 JSON;response_format 传入 JSON Schema 的 Structured Outputs 进一步保证字段与类型符合 Schema。第三层约束解码(constrained decoding):Outlines、XGrammar 等库在解码时把不符合语法的状态概率置零,逐 token 保证输出必然合法,可靠性最高,vLLM、SGLang 均支持。
工程实践:生产环境优先用原生 Structured Outputs 或约束解码;解析失败要有带错误信息的自动重试(把解析错误反馈给模型让它修正);字段加描述和枚举值可提升内容质量。
易错点:提示词要求格式与约束解码混用时注意兼容;复杂嵌套 Schema 会增加模型理解负担,扁平结构更稳。追问方向:约束解码的原理(把 Schema 编译为状态机指导采样)?结构化输出对 Agent 工具链的意义?