OpenAI 在 API 中引入结构化输出
24-08-07
OpenAI 于 2024 年 8 月 6 日推出了一项新功能——Structured Outputs,该功能确保 API 的模型输出严格符合开发者提供的 JSON Schema。这项功能旨在提高 AI 在处理结构化数据生成时的可靠性,特别是在从非结构化输入中提取信息的场景中。
主要特点和优势:
-
高可靠性:新模型
gpt-4o-2024-08-06
在复杂 JSON Schema 的遵循性测试中达到了 100% 的准确率,相较于之前的模型gpt-4-0613
(准确率不到 40%)有显著提升。 -
两种使用方式:
- 函数调用:通过在函数定义中设置
strict: true
来启用 Structured Outputs。 - 响应格式参数:开发者可以通过
response_format
参数提供 JSON Schema,以便模型以结构化方式响应用户。
- 函数调用:通过在函数定义中设置
-
安全性:Structured Outputs 遵循 OpenAI 的安全政策,允许模型拒绝不安全的请求。
-
SDK 支持:OpenAI 的 Python 和 Node SDK 已更新,支持 Structured Outputs,简化了开发者的使用。
-
应用场景广泛:包括动态生成用户界面、分离最终答案与支持推理、从非结构化数据中提取结构化数据等。
技术实现:
- 使用受限解码(constrained decoding)技术,确保模型输出仅包含符合给定 Schema 的有效 Token。
- 将 JSON Schema 转换为上下文无关文法(Context-Free Grammar, CFG),以动态确定每个步骤后的有效 Token。
限制和注意事项:
- Structured Outputs 只支持 JSON Schema 的子集。
- 使用新 Schema 的首次 API 响应可能会有额外的延迟。
- 如果模型拒绝请求或生成达到最大 Token 数限制,可能无法遵循 Schema。
- Structured Outputs 并不防止所有类型的模型错误,例如在 JSON 对象的值中可能仍然存在错误。
- 不与并行函数调用兼容。
- 提供的 JSON Schema 不符合零数据保留(Zero Data Retention, ZDR)资格。
可用性:
Structured Outputs 目前已在 API 中普遍可用,支持 Chat Completions API、Assistants API 和 Batch API,并兼容视觉输入。
结论:
Structured Outputs 的推出显著提升了 OpenAI API 在生成结构化数据时的准确性和可靠性,为开发者在构建应用程序时提供了更强大的工具。通过严格的 Schema 遵循和高效的技术实现,这项功能有望在多种应用场景中发挥重要作用。