调用OpenAI Whisper模型POST请求报错:已传model仍提示需提供该参数
解决OpenAI Whisper转录请求中"必须提供model参数"的错误
问题原因
你的请求存在两个关键问题:
- 直接用普通JavaScript对象作为请求体,浏览器无法正确编码成
multipart/form-data格式,导致接口无法识别model参数 - 手动设置了
Content-Type: audio/webm,这会告诉接口请求体只是单一音频文件,而非包含表单字段的multipart请求
解决步骤
- 改用原生
FormData对象构建请求体,它会自动处理multipart格式的编码 - 移除手动设置的
Content-Type头,浏览器会自动生成带boundary的正确Content-Type - 确保API密钥有调用Whisper模型的权限
修正后的代码
const handleUpload = async () => { const audioBlob = new Blob(audioChunks, { type: "audio/webm" }); // 初始化FormData对象 const formData = new FormData(); // 添加音频文件,第三个参数可选,是文件名 formData.append("file", audioBlob, "recording.webm"); // 添加model参数 formData.append("model", "whisper-1"); fetch("https://api.openai.com/v1/audio/transcriptions", { method: "POST", headers: { Authorization: `Bearer REDACTED_OPENAIKEY`, // 不要手动设置Content-Type,浏览器会自动处理 }, body: formData, }) .then((response) => response.json()) .then((data) => console.log(data)) .catch((error) => console.error(error)); };
额外说明
OpenAI的音频转录接口要求必须用multipart/form-data格式提交,同时包含file(音频文件)和model(指定模型)两个字段。用普通对象作为请求体时,接口无法解析出model参数,所以才会报错提示缺少该参数。
内容的提问来源于stack exchange,提问作者manik-sharma
相关产品推荐
相关产品推荐

