1.介绍
基本介绍
JSON 是世界上应用最广泛的数据交换格式之一。Structured Outputs 是一个功能,可以确保模型始终生成符合你提供的 JSON Schema 的响应,因此你无需担心模型遗漏必要的键,或生成无效的枚举值。 Structured Outputs 的一些好处包括:- 可靠的类型安全性:无需验证或重试格式错误的响应
- 明确拒绝:基于安全的模型拒绝现在可以程序化检测
- 简化提示:无需使用强烈措辞的提示即可实现一致的格式化
注意:支持的模型情况可能会发生变化,请查阅本文档了解最新支持的模型列表。
你的应用必须检测并处理可能导致模型输出不完整JSON对象的边缘案例。
请合理设置max_tokens,防止JSON字符串被中断。
3.使用场景
在 OpenAI API 中,Structured Outputs 有两种形式:- 使用函数调用时
- 当使用 json_schema 响应格式时
- 如果你将模型连接到系统中的工具、函数、数据等,那么你应该使用函数调用。
- 如果你希望在模型回应用户时结构化其输出,那么你应该使用一个结构化的 response_format
本指南的其余部分将专注于 Chat Completions API 中的非函数调用用例。如需了解如何使用结构化输出进行函数调用,请参阅函数调用指南。
4. Structured Outputs vs JSON mode
Structured Outputs 是 JSON 模式的进化。虽然两者都能确保生成有效的 JSON,但只有 Structured Outputs 能确保遵循模式。在语言模型中和语言微调模型中,都支持 Structured Outputs 和 JSON 模式。 我们建议在可能的情况下始终使用结构化输出,而不是 JSON 模式。示例
思维链
思维链
你可以让模型以结构化、分步骤的方式输出答案,引导用户解决问题。输出示例:
链式思维数学辅导的结构化输出
结构化数据提取
结构化数据提取
您可以定义结构化字段以从无结构输入数据中提取信息,例如研究论文。输出示例:
从研究论文中提取数据使用结构化输出
UI生成
UI生成
你可以通过将 HTML 表示为具有约束条件的递归数据结构(如枚举)来生成有效的 HTML。
使用结构化输出生成 HTML
内容审核
内容审核
你可以根据多个类别对输入进行分类,这是一种常见的审核方式。
使用结构化输出进行内容审核
如何使用
如何使用response_format输出结构化数据
您可以使用新 SDK 辅助程序中的结构化输出来将模型的输出解析为您所需的格式,或者可以直接指定 JSON 方案。SDK对象
SDK对象
-
步骤 1: 定义你的对象
首先,您必须定义一个对象或数据结构来表示模型应遵循的 JSON Schema。请参阅本指南顶部的示例以获取参考。
Structured Outputs 支持大部分 JSON Schema,但出于性能或技术原因,有些功能是不可用的。更多详情请见此处。
为了最大化模型生成的质量,我们建议如下:
- 名称键要清晰直观
- 为结构中的重要键创建清晰的标题和描述
- 创建并使用 evals 来确定最适合您用例的结构
- 步骤 2: 在 API 调用中提供您的对象 你可以使用 create 方法将 JSON 响应自动解析为你定义的对象。SDK 内部会处理提供与您的数据结构对应的 JSON 模式,然后将响应解析为对象。
- 步骤 3: 处理边缘情况 在某些情况下,模型可能不会生成符合提供的 JSON schema 的有效响应。这可能发生在拒绝的情况下,如果模型出于安全原因拒绝回答,或者例如您达到了最大 tokens 限制,导致响应不完整。
手动模式
手动模式