结构化输出

让模型输出严格符合你提供的 JSON Schema 的结构化数据,用于数据抽取、函数参数和多步骤工作流,而不是只靠提示词要求“返回 JSON”。

适用场景

  • 从非结构化文本中抽取固定字段(如日程的名称、日期、参与人)。
  • 函数调用时要求参数严格符合 schema(需 strict: true)。
  • 下游系统需要稳定的字段名与类型,不能容忍解析失败。

与 JSON mode 的区别

维度
JSON mode(旧)
结构化输出(Structured outputs)
保证
保证输出是合法 JSON
保证输出遵循给定的 JSON Schema
定义方式
无 schema
提供 JSON Schema
Chat Completions 字段
旧 JSON mode 的具体参数名:待核实(本次未读取 JSON mode 页面)
response_format,并设置 JSON Schema
Responses API 字段
待核实(本次未读取 JSON mode 页面)
text.format

前提

项目
要求
API 版本
2024-08-01-preview 是首个支持的版本;最新预览版与 GA 的 v1 也支持(官方说明)
模型
官方列出的模型与版本(示例:gpt-5、gpt-5-mini、gpt-5.1、gpt-4o 2024-08-06、gpt-4.1 2025-04-14 等);完整列表以官方页面为准(待核实)
SDK
Python 示例使用 openai,并可配合 Pydantic;JavaScript 示例使用 zod;.NET 与 REST 也有示例

两种 API 中的写法

API
位置
说明
Chat Completions
response_format,type 为 json_schema,json_schema.strict 为 true
可使用 SDK 的 parse 辅助方法
Responses
text.format,包含 type、name、schema、strict
结果在 output_text 或 SDK 的 output_parsed 中
函数调用
函数定义中设置 strict: true
需设置 parallel_tool_calls 为 false

步骤

  1. 用 JSON Schema(或 Pydantic、zod 等库)定义输出结构。
  1. 在请求中设置 response_format(Chat Completions)或 text.format(Responses)。
  1. 解析结果;如果存在拒绝(refusal),按拒绝处理,不做解析。

写 schema 的规则(官方限制)

规则
说明
所有字段必须 required
可选字段用 ["string", "null"] 这类联合类型模拟
additionalProperties 为 false
每个对象都要设置
支持的类型
string、number、boolean、integer、object、array、enum、anyOf
根对象
不能是 anyOf 类型
规模
最多 100 个对象属性,嵌套最多 5 层(官方说明)
字段顺序
输出顺序与 schema 中的顺序一致
支持 $defs 与递归($ref)
支持

不支持的关键字

类型
不支持的关键字
字符串
minLength、maxLength、pattern、format
数字
minimum、maximum、multipleOf
对象
patternProperties、unevaluatedProperties、propertyNames、minProperties、maxProperties
数组
unevaluatedItems、contains、minContains、maxContains、minItems、maxItems、uniqueItems

不支持结构化输出的场景

  • Bring your own data(使用自有数据)场景。
  • Assistants 与 Foundry Agent 服务。
  • gpt-audio 与 gpt-audio-mini。

验证

检查项
预期结果
响应内容
能被目标结构解析,字段齐全
拒绝
若存在 refusal,应用应给出提示而非解析失败
函数调用
parallel_tool_calls 为 false,且参数符合 schema

排错表

现象
处理方式
请求被拒绝,提示 schema 不支持
对照“不支持的关键字”表删除对应约束,改在应用端校验
可选字段缺失
将字段改为必填并使用 null 联合类型
函数调用中出现多个并行调用
设置 parallel_tool_calls 为 false
在 Agent 服务或 Assistants 中使用无效
这些场景不支持,改用普通 Responses 或 Chat Completions 调用

示例说明

官方页面提供了 Python、JavaScript、.NET 与 REST 的完整示例,包括抽取日程、数学推理步骤和函数调用场景。本页不复制示例代码,实际使用时以官方示例为准。

来源与核对

  • 核对范围:正文已读(概述、与 JSON mode 的差异、两种 API 写法、schema 限制与不支持场景、支持模型与 API 版本已核对;各语言示例代码未逐段核对)。
  • 获取日期:2026-11-05。模型版本清单、API 版本与示例中的模型名称待核实。
上一篇
第一个检索索引
下一篇
函数调用
Loading...
文章列表
分享AI实践与思考
入门
Microsoft Foundry
开发工具
治理与网络
观测与评测
工具与知识
模型与部署
Azure OpenAI
Azure AI Search
性能与基准
索引与分块
概念解释
快速上手
Foundry Tools
RAG 与知识工程
检索质量与评测
数据准备
智能体与工具
评测、观测与安全
企业架构与成本
成本与容量
架构
解决方案场景
文档与服务
知识与分析
样例与学习资源
附录