选择输出方式
兼容接口不代表每个模型都支持
json_schema。先用最小 Schema 验证目标模型;遇到不支持的参数错误时,确认能力后再调整,不要悄悄降级并把不合格结果写入业务系统。
可运行示例:提取商品
先完成 TypeScript SDK 配置,保存为structured-output.mts,运行 node structured-output.mts。示例要求模型提取商品名称和数量,使用严格 Schema;解析后再次检查名称非空、数量为非负安全整数。
失败处理
finish_reason=length:输出可能被截断,不应拼补 JSON 后当作完整结果使用。message.refusal或没有可用内容:交给拒答/失败分支,不要直接JSON.parse。- Schema 不支持或字段校验失败:保留失败状态,检查请求和模型能力;不要无限重试。
- 流式输出:JSON 文本片段通常不能单独解析,应确认完成后解析完整文本;流中断时放弃本次结构化结果。
additionalProperties: false,并将属性列入 required。需要可空字段时可用相应 Schema 表达,但仍应确认目标模型支持。
Responses 写法不同
Chat Completions 使用response_format: {type: "json_schema", json_schema: {...}};Responses 使用 text: {format: {type: "json_schema", name, schema, strict}}。不要把 response_format 原样搬到 Responses 请求中。
API 参数 · 错误与重试
TypeScript:Responses 结构化提取
保存为responses-structured.mts,按 TypeScript SDK配置后运行 node responses-structured.mts。需要渠道支持 Responses 的 text.format 严格 Schema;不假设支持 Chat Completions 的模型同时支持该能力。
output[].content[] 中,即使整体状态为 completed 也不能跳过检查。
参考:OpenAI 结构化输出说明。
Read in English