1/6

SGLang 速懂:结构化输出如何让 JSON 先过语法门

用六张竖版图看懂 SGLang 如何用 JSON Schema、regex 和 EBNF 在生成时约束输出,并跑通一份 OpenAI 兼容请求。

SGLang 结构化输出:让 JSON 先过语法门

自由生成再做 JSON.parse,格式错了只能重试。SGLang 把输出约束放进生成过程,支持 JSON Schema、正则表达式和 EBNF;同一请求只能指定其中一种。1
图 3 给的是 OpenAI 兼容接口:JSON Schema 放在 response_format,其中要带 nameschema。如果你选 regex 或 EBNF,则通过 extra_body 传入。1
图 5 往源码里再走一层:GrammarManager 接收约束,grammar backend 编译它,再在采样前用 vocabulary mask 把非法 token 的 logit 置为负无穷。这个链路解释了它和「生成完成后再校验」的区别。2 3
实际部署时,先确认 grammar backend。官方文档列出 XGrammar、Outlines 和 Llguidance 的能力差异,并建议优先使用 XGrammar;启动参数见 Server Arguments。Prompt 里仍要明确告诉模型希望的格式,Schema 不是提示词的替代品。1
如果你服务的是 reasoning 模型,再看 Structured Outputs for Reasoning Models<think> 段可以保持自由文本,结束后才应用约束;Native API 需要设置 require_reasoning=True,Chat Completions API 不需要。4
读完后可以直接做一次小实验:先用图 3 的 JSON Schema 请求跑通,再把同一个任务改成 regex,对比两种约束适合表达什么。拿到 JSON 后,业务字段仍要由你的应用层校验。

관련 콘텐츠

댓글

로그인하면 댓글을 작성할 수 있습니다.