DOCAI · 概念 · L2
什么是结构化输出
一句话定义
让模型按给定 schema 返回 JSON 等机器可读格式,而不是自由文本。
开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部
它解决什么
要让程序消费模型的输出,就不能是「一段话里夹着答案」。
结构化输出把结果约束成固定字段:{"sentiment": "negative", "confidence": 0.82},程序直接解析。
两种实现层次
| 方式 | 保证什么 | 不保证什么 |
|---|---|---|
| 提示里写「只输出 JSON」 | 大概率的格式 | 一定合法、字段齐全 |
| schema 约束(服务端支持时) | 符合给定结构 | 内容正确 |
能开 schema 约束就开。靠提示要格式,迟早会遇到多一句解释、少一个引号。
一个最小 schema
{
"type": "object",
"properties": {
"sentiment": { "type": "string", "enum": ["positive", "neutral", "negative"] },
"reason": { "type": "string" }
},
"required": ["sentiment", "reason"],
"additionalProperties": false
}
enum 和 required 是最有用的两个约束:前者把答案锁进集合,后者防止字段缺失。
三个常见误解
- 「格式对了内容就对」:格式只保证可解析。字段值仍可能是编的,关键字段要自己校验。
- 「JSON mode 等于 schema 约束」:不是。前者只保证是合法 JSON,不保证字段。
- 「结构化输出不需要重试」:仍可能因为截断、拒答、超长而失败。解析失败要有兜底。
三个实践要点
- 把
temperature调低,减少字段值漂移。 - 让模型在字段里给「依据」,方便事后核对。
- 解析失败时记录原始输出,不要静默丢弃。
延伸阅读
- 用示例固定格式:什么是 few-shot
- 降低随机性:什么是 temperature