Constrained Decoding(受限解码)
在文本生成过程中实时约束模型输出必须符合指定语法规则(如JSON Schema)的推理技术。通过在每一步解码时屏蔽不合法的token,从根本上保证输出格式正确,是Structured Outputs的底层实现机制。
Constrained Decoding(受限解码)
一句话理解
在模型"一个 token 一个 token 吐字"的过程中,实时屏蔽掉所有会导致格式违规的 token,让输出从生成过程本身就不可能出错。
工作原理
大语言模型生成文本时,每一步都会为词表中的所有 token 计算概率分布,然后选出概率最高的(或按概率采样)。Constrained Decoding 在这个选择环节加了一层语法约束:
- 维护一个目标格式的状态机(如 JSON Schema 对应的有限状态自动机)
- 每次解码前,根据当前状态计算哪些 token 是"合法的下一步"
- 将不合法 token 的概率置为 0(mask),只从合法 token 中采样
这样模型在每一步都只能输出符合格式要求的 token,最终结果必然是合法的。
与后处理校验的区别
| 后处理校验 | Constrained Decoding | |
|---|---|---|
| 时机 | 生成完成后检查 | 生成过程中实时约束 |
| 保证 | 不保证,需要重试 | 100% 保证格式合法 |
| 类比 | 运行时类型检查 | 编译期类型约束 |
| 性能 | 可能需要多次重试 | 一次生成即合法 |
应用场景
- Structured Outputs:OpenAI 的
strict: true底层就是 Constrained Decoding - JSON Mode:各厂商的 JSON 输出模式也依赖类似技术
- 代码生成:保证输出的代码在语法上合法
- 结构化数据提取:从非结构化文本中提取符合 schema 的数据