You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

zodResponseFormat适配OpenAI responses.create接口报错解决方案咨询

在OpenAI openai.responses.create接口中结合Zod实现结构化输出

当使用openai.responses.create时,直接沿用旧接口的zodResponseFormat会触发类型不匹配错误,原因是新接口的响应格式配置逻辑不同。以下是具体实现步骤:

1. 安装依赖

确保安装对应版本的包:

npm install openai zod zod-to-json-schema

2. 定义Zod Schema

先创建需要的结构化数据校验规则:

import { z } from 'zod';

// 示例:定义用户信息Schema
const UserSchema = z.object({
  name: z.string().describe('用户姓名'),
  age: z.number().int().min(18).describe('用户年龄,需为成年整数'),
  email: z.string().email().describe('用户合法电子邮箱')
});

3. 转换为OpenAI兼容的JSON Schema

使用zod-to-json-schema将Zod Schema转换为OpenAI支持的JSON Schema格式:

import { zodToJsonSchema } from 'zod-to-json-schema';
import OpenAI from 'openai';

const jsonSchema = zodToJsonSchema(UserSchema, { name: 'User' });

// 配置响应格式,适配openai.responses.create的要求
const responseFormat: OpenAI.Chat.ChatCompletionCreateParams.ResponseFormat = {
  type: 'json_schema',
  json_schema: {
    name: 'User',
    schema: jsonSchema,
    strict: true // 强制模型严格遵循Schema,禁止额外字段
  }
};

4. 调用openai.responses.create接口

传入配置好的响应格式,获取结构化输出:

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function fetchStructuredData() {
  const response = await openai.responses.create({
    model: 'gpt-4o-2024-08-06', // 必须使用支持json_schema的模型(如gpt-4o、gpt-4-turbo-2024-04-09等)
    prompt: '提取用户信息:我叫李四,今年30岁,邮箱是lisi@example.com',
    response_format: responseFormat
  });

  // 解析并验证返回数据
  const parsedData = UserSchema.parse(JSON.parse(response.data));
  console.log('结构化输出结果:', parsedData);
}

// 执行调用
fetchStructuredData().catch(err => console.error('请求失败:', err));

关键注意事项

  • 模型兼容性:仅gpt-4o系列、gpt-4-turbo-2024-04-09、gpt-3.5-turbo-1106及以上版本支持json_schema响应格式。
  • 严格模式:开启strict: true可避免模型返回Schema外的字段,提升数据一致性。
  • 数据验证:务必用Zod的parse方法校验返回数据,确保符合预期结构,避免脏数据。

内容的提问来源于stack exchange,提问作者Kyle H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:10:10