Skip to content

Latest commit

 

History

History
19 lines (10 loc) · 1.83 KB

File metadata and controls

19 lines (10 loc) · 1.83 KB

9.4 结构化输出与约束解码

在很多实际应用中,大语言模型的输出不仅需要语义正确,还需要满足特定的格式约束。例如,输出合法的 JSON 对象、生成符合语法的 SQL 查询、或按照特定模板进行函数调用。标准的采样策略只考虑概率分布,不保证输出的结构合法性。

9.4.1 为什么需要约束解码

当模型输出需要被程序解析时,格式错误(如缺少引号、括号不匹配)会导致下游解析失败、重试或错误处理。

9.4.2 主要方法

引导解码(Guided Decoding):在每个解码步,根据当前生成状态和目标格式的语法规则,将不合法的词元概率设为零,只对合法词元集合 $$V_{\text{valid}}(s_t)$$ 重新归一化采样。例如,如果上一步生成了 JSON 键名后的冒号,下一步只允许生成值类型的词元(字符串引号、数字、true/false 等):

$$P_{\text{constrained}}(x) = \begin{cases} \frac{P(x)}{\sum_{x' \in V_{\text{valid}}} P(x')} & \text{if } x \in V_{\text{valid}}(s_t) \ 0 & \text{otherwise} \end{cases}$$

JSON 模式:vLLM、TGI 等推理框架已内建 JSON 模式支持。简单正则约束可编译为有限状态自动机;JSON Schema、上下文无关语法或嵌套结构通常还需要 parser state、栈状态或 grammar-based decoder 跟踪生成进度。

正则表达式约束:Outlines 等工具允许开发者定义正则表达式或上下文无关语法,约束模型输出必须匹配。

这些结构化输出技术在 LLM 与工具调用、API 集成和智能体(Agent)工作流中发挥着关键作用。它们保证的是语法层面的可解析性,不自动保证字段含义、业务约束和安全权限正确;生产系统仍需要 schema 校验、语义校验、超时控制和失败回退。