OpenAI 官宣结构化输出功能
根据广泛的用户需求,OpenAI 的 API 现已正式支持结构化输出(Structured Outputs)。这一功能允许模型输出遵循开发人员提供的 JSON Schema,从而将自然语言转换为具有明确格式和结构的数据。
什么是结构化输出?
在大型语言模型(LLMs)的应用中,让模型进行结构化输出是一个重要目标。结构化输出指的是将自然语言转换成具有明确格式和结构的数据,如表格、数据库条目、JSON 对象等。通过实现这一点,不仅可以提高模型输出的可预测性和可用性,还能增强其在各种应用场景中的实用性。
结构化输出有助于减少误差,提高数据处理效率,并确保在与其他系统和应用程序集成时的一致性和兼容性。这一特性对于自动化工作流程、数据分析、自然语言处理任务以及智能助手等方面尤为重要。
结构化输出 vs JSON Mode
结构化输出是 JSON 模式的演变。虽然两者都确保生成有效的 JSON,但只有结构化输出确保架构合规性。
- JSON Mode: 强制模型返回 JSON 格式,但不保证符合特定的 Schema 定义。
- 结构化输出: 不仅要求 JSON 格式,还严格验证字段类型、必填项和嵌套结构,确保数据完全符合 Pydantic 模型或 JSON Schema 的定义。
Chat Completions API、Assistants API、Fine-tuning API 和 Batch API 均支持结构化输出和 JSON 模式。建议尽可能始终使用结构化输出而不是 JSON 模式,以获得更强的可靠性。
注意:目前仅 gpt-4o-mini、gpt-4o-mini-2024-07-18 和 gpt-4o-2024-08-06 模型快照及更高版本支持结构化输出。
代码示例:OpenAI SDK
1. 思维链数学辅导
此示例展示了如何使用结构化输出来引导模型逐步解决数学问题。
from pydantic import BaseModel
from openai import OpenAI
client = OpenAI()
class Step(BaseModel):
explanation: str
output: str
class MathReasoning(BaseModel):
steps: list[Step]
final_answer: str
completion = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[
{"role": "system", "content": "You are a helpful math tutor. Guide the user through the solution step by step."},
{"role": "user", "content": "how can I solve 8x + 7 = -23"}
],
response_format=MathReasoning,
)
math_reasoning = completion.choices[].message.parsed
(math_reasoning)


