当下游程序需要固定字段时,只在提示词里说“请输出 JSON”还不够。Structured Outputs 会让模型按提供的 JSON Schema 生成结果。Python 项目可以用 Pydantic 模型解析,再做业务规则校验。
定义字段和约束
下面把客服消息提取为类别、紧急程度和订单号。订单号允许为空,避免模型为缺失字段编造值:

from typing import Literal
from pydantic import BaseModel
from openai import OpenAI
class Ticket(BaseModel):
category: Literal["物流", "退款", "其他"]
urgent: bool
order_id: str | None
client = OpenAI()
response = client.responses.parse(
model="gpt-6-astra",
input=[
{"role": "system", "content": "只提取原文信息;缺失订单号填 null。"},
{"role": "user", "content": "包裹三天没更新,我明天出差。订单号 A102。"},
],
text_format=Ticket,
)
ticket = response.output_parsed
print(ticket.model_dump())
怎样验收结构化结果
预期字段应为 category=物流、urgent=true、order_id=A102。再测试一条没有订单号的消息,确认得到 null 而不是虚构编号。最后用非法类别测试 Pydantic 是否会阻止下游直接使用。
结构正确不等于事实正确
JSON Schema 约束的是形状和类型,不能保证提取事实一定正确。对金额、日期、身份、医疗信息等关键字段,还要与原文逐项比对。也要处理拒答、内容不完整、请求失败和解析异常,不得把空对象当作成功结果。
与工具调用的区别
如果模型只是把回答交给你的界面或数据库,使用结构化 text.format。如果模型要请求你的程序执行查库存、退款或发邮件等动作,使用函数或工具调用,并在应用端验证参数与权限。
本文依据 2026 年 10 月 1 日官方 Structured Outputs 文档,示例未在你的 SDK 版本、模型权限和业务数据上实测。
相关问题
所有模型都支持同样的 Schema 吗?
不要假定。应在模型目录确认支持情况,并把复杂 Schema 缩减后逐步测试。
可以直接把解析结果写入数据库吗?
先做业务校验、权限检查和幂等控制;高风险字段还需人工复核。
参考:OpenAI Structured model outputs
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31251.html