要解决的问题
智能体和工具调用要求模型输出严格符合 JSON Schema、正则表达式或某种语法,否则下游程序无法解析。仅靠提示词不能保证格式正确,这是工程上的刚需。
核心方法
- logits 掩码:每生成一个 token 前,计算哪些 token 在当前位置是合法的,把不合法 token 的概率置零。
- 有限状态机(FSM):适合正则语言和可转换为此类约束的部分 schema。任意深度的嵌套、递归 JSON Schema 不能一概编译成有限状态机;支持范围由具体引擎决定。
- 上下文无关文法:对于嵌套结构等更复杂的语法,使用下推自动机或 Earley 等解析器,在解码时增量计算掩码。
实现与工具
- Outlines:提供正则、JSON Schema、文法等结构约束接口,具体编译与解码能力取决于所选后端及版本,不能把所有接口都等同为有限状态机。
- XGrammar:面向上下文无关文法的高效结构化生成引擎,已集成进多个主流推理引擎。
- guidance:微软开源的提示与生成控制框架。
- llguidance:guidance 项目中用 Rust 实现的约束解码核心库,支持任意上下文无关文法,每个 token 的掩码计算开销很低。
格式约束只保证所支持的语法或 schema 条件,不保证字段内容真实、SQL 语义正确或工具调用权限合法;输出还可能因长度上限而截断。下游仍需校验完整结果。
开放问题
- 约束对生成质量与速度的影响。
- 复杂语法的高效编译。
- 与推理(思维链)和工具调用的协同。
参考资料
相关专题
- 工具使用与智能体设计:工具调用是结构化生成最主要的应用场景。
- 推理并行与服务调度:SGLang 等推理引擎把结构化生成作为核心能力。