把原来跑 whisper-1 的脚本里的模型名改成 gpt-4o-transcribe,其他不动,调用 audio.transcriptions 立刻返回 400,原文是 response_format is not supported for this model,脚本里写的是 verbose_json。
一开始怀疑是「SDK 版本低于 1.48,请求里仍带着旧字段」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。新转写模型只支持 json 和 text 两种返回格式。也可能是timestamp_granularities 参数同样不被接受。
少数情况下是请求走了兼容网关,网关按旧模型做了参数校验。
上来先打印 SDK 版本确认支持范围
python -c "import openai;print(openai.__version__)"
去掉 response_format 用默认值重试
python -c "from openai import OpenAI;c=OpenAI();print(c.audio.transcriptions.create(model='gpt-4o-transcribe',file=open('a.mp3','rb')).text[:60])"
需要时间轴时改用 diarization 或分段请求
python -c "print('split by silence then transcribe each part')"
末了用 curl 直连排除网关改写参数
curl https://api.openai.com/v1/audio/transcriptions -H "Authorization: Bearer $KEY" -F model=gpt-4o-transcribe -F file=@a.mp3
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
恢复的判定其实很直接。请求返回 200 并能拿到 text 字段,日志里不再出现 response_format 相关的 400,长音频分段后时间轴可自行拼出。
新模型不是旧模型的超集,参数支持范围要按模型分别查,批量迁移前先用一条短音频做冒烟。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
