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
相关产品推荐
相关产品推荐

