结构化输出
3 秒看懂
结构化输出让大语言模型(LLM)不再只吐自然语言,而是能直接产出符合指定格式(如 JSON、XML、pydantic 模型、数据库记录)的精确数据。它使模型输出从“人看”升级为“机器可处理”,是 LLM 落地业务系统的关键桥梁:自动化提取、工具调用、报表填充、生成 API 参数,一站完成,不再需要脆弱的后处理解析与重试。
3 分钟产业解释
在 LLM 应用中,非结构化文本易导致“形似 JSON 实则解析失败”、字段缺失、类型错误等生产事故。结构化输出技术通过训练或推理时的约束,确保生成的每个 token 都严格遵循预期的模式定义(Schema)。核心价值在于将不确定的生成过程转变为可靠的数据生产管线。
产业落地分三层:
- 格式对齐:通过提示词要求模型输出 JSON,并配合后处理修复,这是最早期低成本方案。
- 约束解码:在生成过程中实时屏蔽违反 Schema 的 token,将合法输出率提至近乎 100%,代表如 OpenAI 的 Structured Outputs、开源项目 Outlines、SGLang 的 constrained decoding。
- 训练注入:用大量 Schema 及其对应数据微调模型,使其内化格式表达习惯,如 function calling 微调版、Gorilla、CodeLlama 的结构化生成等。
目前,约束解码已成为主流交付手段,因为它无需重新训练模型,且可保证形式正确性,正在被云厂商和开源框架快速集成。延迟开销通常控制在个位数毫秒级,对业务几乎“无感”。结构化输出是构建智能体(Agent)的基石,所有工具调用本质上都依赖它来生成准确的函数参数。
15 分钟专家深入
结构化输出不等于“把模型输出当字符串再解析”——那是早期走弯路的思路。真正的结构化输出需要 端到端的保证:从概率最高的 token 开始,解码器只考虑那些能让当前序列继续符合目标 Schema 的备选 token,直到生成完一个完整且合法的数据单元。
这背后涉及形式语言和自动机理论。一个 JSON Schema 可被编译为有限状态机(FSM),而生成模型每步的输出 logits 只在 FSM 的合法转移范围内做 softmax,其余 token 的 logit 设为 -inf。状态机根据已生成字符逐步迁移,如:
- 期望
{"name": "→ 状态要求输出字符串内容,直到遇到非转义的"; - 生成嵌套对象时,状态记录当前深度;
- 针对
oneOf/anyOf等复杂关键字,状态机会在多个分支间动态回溯。
此技术有两个关键难题:一是如何高效构建覆盖所有 JSON 语法(以及正则、上下文无关约束)的极快索引,二是如何将其与 LLM 的 GPU 推理流水线深度融合,避免每步都额外做状态查询。开源框架 Outlines 和 SGLang 通过编译期将 Schema 转化为索引表(或 trie),在 CUDA kernel 层面实现 token masking,使得额外开销几乎不可感知(通常 < 1 ms per token,具体数值因实现而异,公开 benchmark 显示性能损失在 5% 以内)。
另一种路线是 语法引导生成(如 Guidance、LMQL),通过高级 DSL 书写生成流程,由解释器介入选择可用的 token 集合,更灵活,但优化难度高,延迟波动较大。
此外,基于训练的方法(如 CodeGen2.0、OpenAI 的 function calling 模型)虽然不提供 100% 的正确性保证,却在复杂指令理解与 Schema 变化的泛化能力上更优。产业级实践常将两者结合:先用训练过的基础模型理解业务意图,再通过约束解码锁定输出格式。
技术原理(最深)
核心机制:限定解码空间,使自回归生成每一步只能在 Schema 推导的合法 token 子集中选择。
以 JSON 为例,工作流程如下:
输入: prompt + schema
↓
编译 Schema → 下推自动机(PDA) / 上下文无关文法(CFG)
↓
初始化状态 S0(包括栈状态)
↓
生成循环(for each token):
获取原始 logits L (vocab_size)
计算合法 token 掩码 M = legal_tokens(state) // 用状态机导出
写 L'[i] = L[i] 如果 M[i]=1,否则 -inf
采样/贪心得到 next_token
更新 state = transition(state, next_token)
↓
结束 → 输出完整 token 序列,保证被 schema 接受
关键参数与实现方案:
- 索引构建:Schema → 正则表达式(如 JSON Schema 有规范的正则对应,对于 recursive schema 利用 CFG 近似),然后用 Aho-Corasick 或 trie 构建能从任意前缀找出所有合法续写 token 的数据结构。典型文献《Outlines: Fast and Accurate Structured Generation》中,将 token-id 到字符串的模式提前哈希,实际查询仅需 O(1)。
- 多种约束类型:
- Regex 模式:生成电话号码、邮箱等。
- JSON / Pydantic:对象属性顺序、必填/可选、类型、枚举……
- Context-Free Grammar:处理嵌套括号、XML/HTML 等。
- 内核融合:如 SGLang 将 token masking 操作放在 decoding kernel 内部,利用共享内存并行查表和写入 mask,避免 PCIe 往返。据其开源报告(截止 2025 年 3 月),在 LLaMA-70B 上连续生成 JSON 对象,延迟差异小于 3%。
ASCII 示意流程(简化版)
+--------+ +-------------------+ +-------------------+
| Prompt | ---> | 编译后的 Schema | ---> | 合法 token 掩码 |
+--------+ | (状态机,trie) | | (vocab 大小的比特)|
+-------------------+ +---------+---------+
|
v
+---------+---------+
| Logits 处理器 |
| (masking + softmax)|
+---------+---------+
|
v
下一个 token (必然合法)
技术演进史
- 2019‑2022 试水期:GPT‑3 等模型通过 few‑shot 提示要求输出 JSON,后处理用 eval/json.loads 兜底,成功率波动大(60%‑95%,据多家企业实测)。
- 2022‑2023 训练侧突破:Code‑LLaMA、StarCoder 等代码模型诞生,天然对格式敏感;OpenAI 推出 function calling(2023 年 6 月),通过指令微调 + 系统提示,让模型学会输出符合预期模式的 JSON,但仍偶有格式错误。
- 2023 Q4 约束解码开源潮:Outlines、Guidance、LMQL、SGLang 等项目公开了基于自动机的解码方案,将 JSON 生成成功率推至 >99.9%,并集成到 vLLM、TGI 等推理框架。
- 2024 年商业化里程碑:OpenAI 发布 Structured Outputs(2024 年 8 月),在 API 层原生支持传入 JSON Schema,并保证输出 100% 合法;Anthropic 在 Claude 中强化 tool use 的强约束;Google Gemini 推出 controlled generation。至此,结构化输出成为旗舰模型标配。
- 后续趋势(2025 至今):约束机制与多模态输出结合(如生成特定结构的图像标注),以及“分级保证”——弱约束(建议格式)到强约束(必须合法)动态切换,以适应不同业务风险偏好。
技术路线对比(量化表)
下表中数字因缺乏统一基准,均标注为“估算/定性”(基于社区开源报告及企业实践反馈)。
| 维度 | 约束解码 (Outlines/SGLang) | 语法引导引擎 (Guidance/LMQL) | 微调/训练注入 (function calling 模型) | 纯提示 + 后处理修复 |
|---|---|---|---|---|
| 格式正确性 | ≈100%(理论保证) | 高(受引擎实现限制,约 95‑99%) | 较高(95‑99%,依赖模型训练数据覆盖) | 低(80‑95%) |
| 复杂 schema 支持 | 完备(递归、引用、oneOf 等) | 弱(DSL 表达能力有限) | 强(模型理解力) | 几乎不可行 |
| 额外推理延迟 | 极低(< 5% 总延迟,据 SGLang 报告) | 中等(10‑30% 延迟增长) | 几乎无额外延迟 | 轻微(后处理开销) |
| 适应新 schema | 无需训练,即换即用 | 需修改 DSL 脚本 | 需重新微调或依赖泛化能力 | 修改提示词即可 |
| 易用性/接入成本 | 需集成推理框架,有一定工程门槛 | 中等,需学习 DSL | 低(切换 API model 即可) | 极低,无额外依赖 |
| 适用场景 | 格式敏感业务(票据、API 参数、日志) | 研究、复杂控制流程 | 工具调用、开放域但格式要求适中的场景 | 原型验证、非生产系统 |
数据来源:[Outlines 论文及社区 benchmark]/[SGLang 开发团队报告]/[OpenAI、Anthropic 产品文档 2024‑2025],量化值为综合估算。
上下游
上游:
- 基础模型:GPT‑4o、Claude 3、Gemini、LLaMA 3、Qwen 等,提供强大的语义理解和指令跟随能力。
- 推理框架:vLLM、TGI、TensorRT‑LLM、SGLang,负责高效生成,并提供约束解码插件接口。
- Schema 规范与工具:JSON Schema 规范、Pydantic、Zod、TypeScript interfaces,业务侧用于定义数据结构。
- 编译技术:正则表达式引擎、上下文无关解析器(如 lark、peg.js),用于将 Schema 转译成状态机。
下游:
- RPA / 企业自动化:发票提取、合同要素解析,自动填入 SAP、Salesforce 等系统。
- AI Agent 框架:LangChain、AutoGen、CrewAI,依靠结构化输出进行可靠的工具调用与状态传递。
- 数据工程:LLM 作为 ETL 核心,输出严格的数据库格式,直接写入数仓。
- 合规与风控:生成监摘要、审计日志等需严格字段对齐的报告。
关键指标
- Schema 合规率:正确生成且完全遵循 schema 的响应比例,生产级目标 > 99.9%。
- 延迟开销:引入约束解码相比纯文本生成额外增加的毫秒数或百分比,衡量计算效率。
- 首次 Token 生成时间 (TTFT) 增量:约束可能延长首 token 出现时间,需控制在可接受范围(如 < 20 ms)。
- Schema 复杂度的可扩展性:支持嵌套深度、枚举数量、组合关键字的能力上限。
- 泛化误差:对未见过的 schema 或提示变化的适应能力,主要通过训练型方案评估。
供需与市场数据
由于独立的“结构化输出”市场规模尚未有权威机构单独划拨,市场评价多嵌套在 LLM 平台与中间件范畴内。据多家风投与技术咨询机构的定性分析(2024‑2025):
- 需求端:超过 80% 的企业 LLM 应用场景(如客服工单自动填单、合同比对、数据转 Excel)都要求输出确定性结构,结构化输出已成企业采纳 LLM 的技术前提。
- 供给端:头部模型 API 已将结构化输出作为基本特性免费或低溢价提供,压低了下游创业公司的“纯包装”空间;但在垂直领域(医疗、法律、工业)的深度定制、私有化部署仍存在缺口。
- 开源方案兴起降低使用门槛,但后期运维与稳定性保障成为云厂商和 MLOps 服务商的增值入口。
具体市场规模尚无公开估算数据,【未充分披露】。
代表公司与资本映射
(融资与估值信息来自公开资料,截至 2025 年一季度)
- OpenAI:Structured Outputs 内嵌于 ChatGPT 和 API,2024 年完成数十亿美元融资,估值超 1000 亿美元。
- Anthropic:Claude Tool Use 具备强约束输出能力,从 Google、Spark Capital 等累计融资超过 70 亿美元。
- Meta:开源 LLaMA 及周边,社区约束解码插件繁荣,无直接营收。
- Google (Gemini):通过 Vertex AI 提供 controlled generation,与云生态绑定。
- SGLang(加州大学伯克利分校等):开源约束解码框架,无独立融资,但注入到多家云厂商产品。
- Outlines(独立研发团队):高效约束生成库,在开发者社区广泛采用,尚未披露融资。
- LangChain、LlamaIndex:中间件商,将结构化输出打包进框架,LangChain 已获红杉等投资,估值约 2.5 亿美元(估算)。
- Vellum、Braintrust:LLM 评测与部署平台,聚焦企业级结构化输出与监控,早期融资阶段。
投资逻辑
- 平台型巨头受益于标准化:模型即服务(MaaS)公司通过内置结构化输出,提升企业用户留存和 token 消耗量,客户迁移成本进一步升高。
- 垂直场景解决方案仍有金矿:通用保证只是“语法正确”,业务需“语义正确 + 领域合规”。能为特定行业提供训练数据、微调、校验全链路的服务商将获得溢价。
- 推理基础设施的优化故事:约束解码对 GPU 利用率和延迟的极致优化是算力效率的新战场,相关性能提升(如 SGLang 的 kernel 创新)会直接影响毛利率。
- 开源对简单中间件的降维打击:纯粹将 OpenAI 约束输出 API 做转卖的商业模式难以持久,投资需关注有无数据壁垒或专有微调能力。
常见误读纠偏(≥2)
误读 1:“只要要求模型输出 JSON,然后解析,出错了就重试,一样能用。”
纠偏:解析后重试在形式自由、容错度高的场景勉强可用,但对复杂嵌套、必填字段或高吞吐场景,重试可能带来指数级延迟,且无法保证最终正确率。约束解码从数学上杜绝了语法错误,才是生产级基础。
误读 2:“结构化输出就是 function calling,模型能自动选择工具。”
纠偏:function calling 是结构化输出的一个子集应用,侧重选择函数并填参。真正的结构化输出还包括静态 Schema 提取(如从合同提取实体)、枚举分类、无“函数”概念的数据模版生成等,适用范围更广。
学习路径
- 先理解 JSON Schema 标准及 Pydantic 数据模型定义。
- 阅读 Outlines 官方文档和论文《Outlines: Fast and Accurate Structured Generation》,领会编译、状态机与 token masking 的结合。
- 实践使用 SGLang 或 vLLM 的约束生成例子,测量延迟跟正确率。
- 研究 Guidance/LMQL 的 DSL 思维,思考与程序化流程的结合。
- 关注 OpenAI 和 Anthropic 的官方博客,理解产品侧的权衡与迭代方向。
- 拓展到多模态 & 多步 Agent 场景:如何在不同步骤间传递结构化上下文。
一句话总结
结构化输出将 LLM 从“说人话”升级为“说机器话”,通过约束解码或训练保证格式恒对,是智能体时代数据管道的语法契约。
延伸阅读与来源
由于实时检索错误(HTTP 403),本页未列出具体网络链接。推荐查找以下关键资料:
- OpenAI 官方博客《Introducing Structured Outputs in the API》(2024‑08)
- Outlines 项目及论文(GitHub 仓库 dottxt-ai/outlines)
- SGLang 论文《Efficient Structured Generation for Large Language Models》
- Anthropic 开发者文档“Tool use”章节
- 社区基准测试:structured-generation-benchmark(GitHub)
- 技术博客:Lilian Weng 的“Controllable Text Generation”,解释约束解码原理
本页所有量化数据均为定性估算,具体数值以官方最新发布为准。