请求排查OpenAI Transcription API返回400 Bad Request错误
调用OpenAI Transcription API返回400 Bad Request的排查方案
以下是几个常见的排查方向和解决方法:
音频文件格式不兼容
Whisper-1对MP3的编码有明确要求,必须是标准MPEG-1 Layer 3编码,建议采用16kHz采样率、单声道配置。如果你的MP3是异常编码(比如VBR参数错误、非标准采样率),会触发400错误。
解决:用ffmpeg转码为标准格式,执行命令:ffmpeg -i input.mp3 -acodec libmp3lame -ar 16000 -ac 1 output.mp3请求参数传递错误
OpenAI Node.js SDK的createTranscription参数顺序可能随版本变化,直接按位置传参容易出错。参数顺序不匹配会导致API无法识别字段,返回400错误。
解决:改用命名参数明确指定每个字段,避免顺序问题:async function transcribeAudio() { const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY, }); const openai = new OpenAIApi(configuration); const response = await openai.createTranscription( fs.createReadStream('./audio.mp3'), "whisper-1", { prompt: undefined, response_format: 'json', temperature: 1, language: 'en' } ); }另外,
temperature参数有效值为0-1,虽然1在范围内,但部分场景下可尝试改为0测试是否能正常请求。文件流读取异常
即使文件存在,相对路径可能因脚本执行目录不同导致读取失败,或者文件权限不足导致API接收到空流/损坏数据,引发400错误。
解决:- 使用绝对路径确保文件可被读取:
fs.createReadStream(path.resolve(__dirname, './audio.mp3'))(需先引入path模块) - 检查文件权限,确保执行脚本的用户有读取该文件的权限
- 先验证文件完整性:执行
fs.readFileSync('./audio.mp3').length,确认文件大小不为0
- 使用绝对路径确保文件可被读取:
环境变量加载失败
若process.env.OPENAI_API_KEY未正确加载,会导致请求头的Authorization字段为空,部分场景下API会返回400而非401。
解决:- 打印
console.log(process.env.OPENAI_API_KEY)确认值已正确加载 - 本地测试时可临时直接传入密钥,排除环境变量问题(上线前务必移除硬编码)
- 打印
内容的提问来源于stack exchange,提问作者aryaxt
相关产品推荐
相关产品推荐

