Skip to main content

选择输出方式

兼容接口不代表每个模型都支持 json_schema。先用最小 Schema 验证目标模型;遇到不支持的参数错误时,确认能力后再调整,不要悄悄降级并把不合格结果写入业务系统。

可运行示例:提取商品

先完成 TypeScript SDK 配置,保存为 structured-output.mts,运行 node structured-output.mts。示例要求模型提取商品名称和数量,使用严格 Schema;解析后再次检查名称非空、数量为非负安全整数。
成功输出的结构示例:
商品名称的具体文字可能不同。输出是 JSON 不等于内容符合业务事实;应用还需核对允许的商品、范围和操作规则。字段较多时,用已有的 JSON Schema 校验库或数据模型库替代手工逐字段检查。

失败处理

  • finish_reason=length:输出可能被截断,不应拼补 JSON 后当作完整结果使用。
  • message.refusal 或没有可用内容:交给拒答/失败分支,不要直接 JSON.parse。
  • Schema 不支持或字段校验失败:保留失败状态,检查请求和模型能力;不要无限重试。
  • 流式输出:JSON 文本片段通常不能单独解析,应确认完成后解析完整文本;流中断时放弃本次结构化结果。
OpenAI 风格严格 Schema 通常要求对象显式设置 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 的模型同时支持该能力。
与前面的 Chat 示例一样,成功结构为商品名称和非负安全整数数量。此例在解析前检查整体及消息完成状态,拒绝拒答、工具调用、空文本;再对 JSON 与业务字段进行校验。拒答可能出现在 output[].content[] 中,即使整体状态为 completed 也不能跳过检查。 参考:OpenAI 结构化输出说明。 Read in English

JSON 模式的完整示例

JSON 模式与结果校验 补充 Chat / Responses 的 json_object 示例、必需 nullable 字段、整数范围和失败短路;它不替代本页的 json_schema 示例。