为什么 AI 应用需要结构化输出?

AI 应用需要结构化输出,因为软件无法可靠地读取一段自然语言;它需要每次都收到相同的字段,且字段名和类型保持一致。多出一句话或少一个字段,都可能让应用的下一步出错。

设想一家虚构的物流初创公司“帕塞尔维斯”,有 12 名员工。开发人员萨娜正在开发一款工具,用于读取客户邮件并填写配送变更表单,包括订单编号、要求的日期、新地址,以及客户是否要求退款。一封典型的邮件是:'你好,订单 PW-88213,我周四不在,能改成周六送吗?或者放在 14 号那里。不行的话就取消并退款吧。' 她的第一个版本要求模型'以 JSON 格式回复'。大多数回复可以解析,但有些以'好的,以下是 JSON'开头,有些把字段命名为 'date' 而不是 'requested_date',还有一条把日期写成了'周六'。

什么是 JSON 模式,它有什么帮助?

JSON 模式是对预期数据的正式描述:包含哪些字段、哪些字段必填、每个字段的类型,以及允许使用哪些值。向模型提供模式,就能把“请以 JSON 格式回复”变成代码可以验证的约定。

对萨娜的案例,结构规范规定:order_reference 是必填字符串;requested_date 是必填字段,值必须是日期格式的字符串,如果未提供日期则为 null;new_address 是字符串或 null;refund_requested 是必填布尔值;不允许出现任何其他字段。最后一条规则可防止模型添加说明性字段。

模型 API 如何支持结构化输出?

主流模型的 API 允许你在请求中传入 JSON 模式,并约束模型输出符合该模式。

OpenAI

开启严格模式后,OpenAI 的结构化输出功能会将响应限制为符合所提供的 JSON 模式定义。其文档说明了该功能与旧版 JSON 模式的区别:后者只保证 JSON 格式有效,不保证符合你的模式定义。文档建议在可用时使用结构化输出。

Anthropic

Claude 的 API 可生成符合你所提供模式的 JSON 输出,还可在工具定义中启用严格选项,确保工具输入通过工具模式校验。其文档列明了支持哪些模式功能,以及哪些功能会返回错误。

Google

Gemini API 接受用于定义响应的 JSON 架构,并支持一组明确规定的架构关键字。其文档指出,虽然输出在语法上是有效的 JSON,但你仍应在应用中验证各项值。

为什么仍然需要验证和重试?

你仍然需要验证,因为数据模式只能约束数据的结构,不能保证数值或内容正确。格式完全符合要求的回复,仍可能包含错误的日期、编造的订单编号,或客户从未要求过的退款标记。

分两层验证。首先,用结构验证库检查数据结构,例如 Python 中的 Pydantic 或 JavaScript 中的 Zod,OpenAI、Anthropic 和 Google 的文档示例都展示了这种做法。其次,检查业务规则:订单编号是否符合格式并且存在于系统中,日期是否为未来的可配送日期,地址是否位于配送范围内?还要处理提供商文档中说明的情况:拒绝回答,其内容可能不符合你定义的结构;以及因达到最大词元限制而被截断的回复,这会导致 JSON 不完整。

谨慎重试。如果检查失败,重试时应附上具体错误,例如“requested_date 必须是日期;邮件写的是周六,订单日期是 14 日,月份为 10 月”。重试次数最多设为一两次,之后将邮件转交人工处理。

较差的结构化输出和稳健的结构化输出分别是什么样的?

薄弱的做法:提示词只写着“提取详细信息,并以 JSON 格式回复。”应用直接读取返回的内容。对于上面的邮件,它收到的字段名是 order 和 date,日期值为“星期六”,退款值为 true,因为模型把“不行就取消”当成了明确要求。结果表单填写错误,客户收到了自己并不想要的退款。

稳健版本:请求中包含 Sana 制定的数据结构定义,并启用严格模式;提示词逐一解释各个字段,包括“仅当客户无条件要求退款时,refund_requested 才为 true”。模型返回的 order_reference 为 PW-88213,requested_date 为下一个周六的日期,new_address 为 null,refund_requested 为 false;conditional_request 则设为“如果周六送达或交给邻居都不可行,则退款”。conditional_request 是 Sana 专门为这种情况添加到数据结构中的字段。验证确认该订单存在,且周六可以配送。由于邮件中包含附带条件的请求,规则将其转交人工做最终决定。

使用结构化输出时,有哪些常见错误?

最常见的错误是把格式有效的 JSON 当成正确的数据。其他错误包括:API 提供结构约束功能时,仍只依靠提示词中的要求;使用含糊的字段名且不加说明;本应如实返回 null 时却强行填入值;忽略拒绝回答和被截断的回复;以及重试时不告诉模型错在哪里。

结构化输出在 Tosheo.ai 课程体系中属于哪一部分?

结构化输出是“构建 AI 应用”类别下“构建 AI 应用课程”中的一节编程课。注册后,你可以在编程学习路径中学习包含代码的完整实操版:定义数据结构、调用 API、验证回复并添加重试机制,每一步都会获得基于评分标准的反馈。

来源与范围

OpenAI API 文档、结构化输出指南、JSON 模式对比及拒绝响应说明(核查日期:19 October 2026) ↗

Anthropic Claude 文档,结构化输出和严格工具调用(核查日期:19 October 2026) ↗

Google Gemini API 文档,结构化输出与验证建议(核查于 19 October 2026) ↗