结构化输出(Structured Output)
别名:JSON 模式Schema 约束函数调用结构化生成JSON Mode
| 分类 | 🔗 技术协议 |
| 阅读时间 | ⏱️ 14 分钟 |
| 更新时间 | 📅 2026-07-16 |
| 条目编号 | ENC-PROTOCOL-12-structured-output |
结构化输出指让 LLM 严格按预设 Schema(如 JSON)生成结果,而非自由文本。它是 Agent 可靠调用工具、解析模型结果的前提,通常通过 JSON Mode、Function Calling 或约束解码实现。
关键要点 ✦
- 结构化输出让 Agent 能可靠解析模型结果并驱动工具
- 实现方式:JSON Mode、Function Calling、约束解码(如 Grammar)
- 严格 Schema 避免解析失败,但牺牲部分表达灵活性
- 复杂嵌套结构建议配合 Schema 校验与重试
- 是 Agent 工程稳定性的基石之一
三种实现路径
① JSON Mode:要求模型只输出合法 JSON,再按约定结构解析。② Function Calling:模型不直接吐 JSON,而是输出符合工具 Schema 的参数对象,由运行时拼装。③ 约束解码(Constrained Decoding):在解码阶段用 Grammar/正则强制输出符合 Schema,从根上杜绝格式错误(如 outlines、guidance 库)。
为什么对 Agent 重要
Agent 的「行动」依赖对模型输出的程序化解析:要调用哪个工具、传什么参数,必须能从模型结果中确定性地提取。自由文本会让解析脆弱、易出错。结构化输出把「自然语言」变成「可执行的 typed 数据」,是工具闭环可靠性的底座。
工程实践
即便有 Schema,仍建议:用 JSON Schema 显式约束类型与必填;对解析失败做带错误信息的重试;对超长/递归结构分段生成。OpenAI、Anthropic 均提供 native structured output,显著优于仅靠提示「请输出 JSON」。
🎯 应用场景
工具调用
按工具 Schema 输出参数,驱动 Function Calling。
数据抽取
从非结构化文本抽取为结构化记录入库。
Agent 决策
输出带类型的计划/状态,供编排层消费。
✅ 最佳实践
- 优先使用厂商 native 结构化输出而非纯提示约束
- 对解析失败做带上下文的重试而非直接报错
- Schema 设计保持最小必要字段,降低生成难度
- 对关键输出做二次校验(范围/类型/必填)
🔮 未来展望
结构化输出将内建到模型推理中(原生约束解码),并支持更丰富的类型系统(枚举、引用、流式增量 JSON);Agent 框架会默认以 typed 接口消费模型输出,解析错误趋近于零。
📖 相关条目
🛠️ 相关产品
🏷️ 标签结构化输出Structured OutputJSONSchema函数调用约束解码