跳到主要内容

结构化输出的隐性代价:JSON 模式质量税

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队采用结构化输出,是因为厌倦了用脆弱的正则表达式从模型响应中抽取数据。这个动机合情合理。但他们没料到的是,几个月后当他们真正度量任务准确率时,会发现那次"可靠性提升"同时让推理密集型任务的内容质量下降了 10 到 15 个百分点。语法问题解决了,语义问题却悄然而生。

本文的目的是精确理解这一权衡——约束解码的实际代价是什么、什么时候值得支付这笔税,以及如何在上线前构建评测来判断它是否正在拖累你的系统。

约束解码的工作原理

理解失效模式,首先要理解机制本身。在每个生成步骤中,语言模型会在整个词汇表(数万个 token)上产生一个概率分布。约束解码(JSON 模式、结构化输出 API 以及 Outlines、XGrammar 等框架背后的核心机制)的工作方式是:在采样之前对该分布进行掩蔽,将所有会导致 Schema 不合法的 token 清零,模型只能从剩余合法的 token 中进行采样。

对于 JSON 和正则模式,这一机制通过有限状态机(FSM)实现;对于更复杂的上下文无关文法,则使用下推自动机(PDA)。XGrammar 等库——目前已成为 vLLM 和 SGLang 的默认方案——会提前将 Schema 编译为这些自动机,在推理时实现低于 40 微秒的 token 掩码生成。

问题的根源在于:模型在某一步骤偏好的 token,未必是 Schema 约束下的合法 token。 当排名靠前的 10 个 token 全部被掩蔽时,模型被迫从概率更低的候选中采样。这些候选在语法上是合法的,但在语义上可能是错误的、生硬的或不完整的。在整个响应生成过程中,这些被迫做出的次优选择会不断积累。

语法正确性得到了保证,语义质量却没有。

质量下降的证据

NeurIPS 2024 的研究对约束生成与自由生成后解析两种方式进行了对比,发现约束条件下推理任务的性能下降了 10 到 15 个百分点。原因正如预期:当模型无法自由选择偏好的 token 时,每一步都会做出稍差的决策,而这些错误会在多步推理中不断叠加。

这并不意味着约束生成总是处于劣势。对于较简单的抽取任务——从文本中提取命名字段、固定标签集分类、结构化数据规范化——质量损耗微乎其微。这类任务不需要模型将推理步骤串联起来;它不过是在填写模板,而答案空间本身已经受到约束。约束的代价越低,答案空间本身就越受限。

质量损失最严重的场景包括:

  • 多步推理,模型的工作空间就是输出本身(思维链被压缩进 JSON 字段)
  • 复杂的嵌套 Schema,字段数超过 10 个或嵌套层级超过两层
  • 开放式生成被困在固定字符串字段中(模型的创造力被双重惩罚:既受 Schema 限制,又受 token 掩蔽限制)

研究人员还识别出约束生成中三类结构性输出变异:Schema 变异(模型生成了完全不同的字段结构)、表达变异(语义释义)和语义变异(底层内容的含义发生改变)。只有第一类会被 Schema 验证捕获。

另一面:速度与可靠性

约束解码并非纯粹的成本。对于较简单的 Schema,它通常更快。现代实现可以通过跳过样板内容,将延迟降低 50%。当 Schema 的脚手架是固定的(花括号、字段名、引号),模型只需生成值,约束机制负责其余部分。DOMINO 算法中的推测性解码技术更进一步,能够对可预测的结构区域实现多 token 跳跃。

可靠性提升是真实且显著的:

方式解析失败率
仅靠提示词工程5–20%
JSON 模式(无 Schema)1–5%
带 Schema 的约束解码<0.1%

一个做金融数据抽取的团队,切换到约束解码后,验证失败率从 27% 降至 2%,提升了 92%。对于解析失败需要人工介入的系统,这是巨大的运营收益。

问题在于,你是否为你的工作负载做出了正确的权衡。如果内容准确率同时下降了 12% 而你没有度量,那 92% 的解析失败率下降意义有限。

服务商的差异不可忽视

各服务商对结构化输出的实现方式不同,差异具有实质性影响:

OpenAI(Strict 模式,2024 年 8 月发布):服务端 Schema 强制执行,数学上保证 JSON 输出合法,失败率最低。约束在响应到达你之前已经施加。

Anthropic Claude:通过工具调用实现结构化输出,而非语法约束解码。模型经过训练会遵循工具 Schema,但并非通过 token 掩蔽强制执行。失败率视 Schema 复杂度在 0.5% 到 5% 之间。Claude 在复杂推理任务上的语义质量往往优于原生约束方式,但你需要在客户端进行验证。

Google Gemini:带严格 JSON 强制执行的响应 Schema,服务端实现,与 OpenAI 方式相当。在基准测试中对复杂嵌套 Schema 的处理表现良好。

Mistral:JSON 模式强制约束结构形态,但不严格遵守 Schema。需要客户端验证。适用于偶发失败可接受的成本敏感型工作负载。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates