OpenAI 结构化输出 API 功能公告

TL;DR

OpenAI 为其 API 宣布了 结构化输出 功能,该功能保证模型响应严格符合开发者提供的 JSON Schema,从而提升面向数据的应用的可靠性。

什么是结构化输出

结构化输出强制模型的输出必须匹配开发者提供的 JSON Schema。这超越了之前的 JSON 模式,后者仅鼓励生成有效的 JSON,却未能确保遵循特定的 schema。

如何使用结构化输出

函数调用接口

  • 在工具定义中将 strict: true 设置为 true。
  • 适用于所有支持工具的模型(例如 gpt‑4‑0613gpt‑3.5‑turbo‑0613 以及更新的模型)。
  • 示例请求展示了一个 query 函数及其针对表名、列、条件和排序的详细 schema。模型返回的 JSON 对象完全符合该 schema。

response_format 接口

  • response_format 中通过新的 json_schema 选项提供 JSON Schema。
  • 适用于最新的 GPT‑4o 系列模型:gpt‑4o‑2024‑08‑06gpt‑4o‑mini‑2024‑07‑18
  • 示例请求将数学辅导的响应格式化为包含 steps 数组和 final_answer 字段的结构,模型返回的数据符合该 schema。

安全保证

  • 结构化输出遵循现有的安全策略;模型仍然可以拒绝不安全的请求。
  • 当发生拒绝时,API 在响应中包含 refusal 字段,开发者可以以编程方式检测到不符合的输出。

原生 SDK 支持

  • 更新后的 Python 与 Node SDK 可直接接受 Pydantic(Python)或 Zod(Node)对象。
  • SDK 将这些类型化对象转换为 JSON Schema,发送至 API,并将返回的 JSON 反序列化回原始的类型结构。
  • 示例代码演示了如何解析 Query Pydantic 模型和 MathResponse 模型。

关键使用场景

  • 动态 UI 生成 – 生成符合递归 schema 的 UI 组件树,实现即时界面创建。
  • 将推理与最终答案分离 – 返回 reasoning_steps 数组和简洁的 answer 字段,提高透明度。
  • 提取结构化数据 – 将会议记录中的行动项、截止日期和负责人提取到明确的 schema 中。

技术细节

受限解码

  • 模型的 token 采样器在每一步都被限制为仅能产生在给定 schema 下仍保持有效的 token。
  • JSON Schema 被编译为上下文无关文法(CFG)。在生成过程中,推理引擎根据当前的部分输出屏蔽无效 token。
  • 首次使用新 schema 的请求会产生预处理延迟(通常在 10 秒以内;复杂 schema 最多约一分钟),用于构建文法缓存。

为什么使用 CFG 而非 FSM/正则

  • CFG 能表示递归结构,而 FSM 无法可靠地处理递归。
  • 这使得能够支持包含嵌套或自引用对象的 schema,例如动态生成的 UI 组件树。

限制

  • 仅支持 JSON Schema 的子集(具体列表请参见文档)。
  • 首次使用新 schema 会有延迟;后续调用速度快。
  • 拒绝、token 限制或提前停止等原因可能导致模型返回不符合 schema 的响应。
  • JSON 中的值仍可能不正确;开发者应提供示例或将任务拆分为更小的子任务。
  • 并行工具调用不兼容;请将 parallel_tool_calls: false 设置为 false 以避免不匹配。
  • 在结构化输出中使用的 schema 不符合零数据保留(Zero Data Retention)的条件。

可用性与定价

  • 结构化输出已在 Chat Completions、Assistants 和 Batch API 中全面可用。
  • 函数调用模式适用于所有支持工具的模型,包括 gpt‑4ogpt‑4o‑mini 以及任何具备工具支持的微调模型。
  • response_format 模式适用于 gpt‑4o‑2024‑08‑06gpt‑4o‑mini‑2024‑07‑18 以及兼容的微调模型。
  • 相较于 2024 年 5 月的版本,切换到 gpt‑4o‑2024‑08‑06 可将输入费用降低 50%,输出费用降低 33%。

致谢

OpenAI 感谢开源社区的启发,提及 outlinesjsonformerinstructorguidancelark 等项目对结构化输出实现的影响。


本文概述了 OpenAI 于 2024 年 8 月 6 日发布的结构化输出官方公告。

Sources