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

FastAPI接收音频直接调用Whisper API报错的解决方案咨询

解决FastAPI上传音频直接调用Whisper API格式无效的问题

问题原因

直接使用file.file调用Whisper API失败,核心原因有两点:

  • FastAPI的UploadFile对应的file属性是SpooledTemporaryFile对象,文件指针默认停留在文件末尾,导致Whisper读取不到有效音频内容
  • Whisper API依赖文件对象的name属性推断音频格式,而SpooledTemporaryFile默认未设置正确文件名,无法识别音频类型

解决方案

方案1:重置文件指针位置

将文件指针移到开头,确保Whisper能读取完整的音频数据:

from fastapi import FastAPI, UploadFile, File
import openai

app = FastAPI()

@app.post("/transcribe")
async def transcribe_audio(file: UploadFile = File(...)):
    # 将文件指针重置到文件开头
    file.file.seek(0)
    # 直接传入file.file调用Whisper API
    transcript = openai.Audio.transcribe("whisper-1", file.file)
    return {"transcript": transcript["text"]}

方案2:转换为BytesIO并设置文件名

将上传的音频内容读取到BytesIO对象中,手动设置文件名让Whisper识别格式:

import io
from fastapi import FastAPI, UploadFile, File
import openai

app = FastAPI()

@app.post("/transcribe")
async def transcribe_audio(file: UploadFile = File(...)):
    # 读取上传的音频内容
    audio_content = await file.read()
    # 转换为BytesIO对象
    audio_file = io.BytesIO(audio_content)
    # 设置文件名,用于Whisper识别音频格式
    audio_file.name = file.filename
    # 调用Whisper API
    transcript = openai.Audio.transcribe("whisper-1", audio_file)
    return {"transcript": transcript["text"]}

方案3:显式指定音频格式

如果前两种方法无效,可在调用时直接指定音频格式,无需依赖文件名推断:

from fastapi import FastAPI, UploadFile, File
import openai

app = FastAPI()

@app.post("/transcribe")
async def transcribe_audio(file: UploadFile = File(...)):
    file.file.seek(0)
    # 从文件名提取格式,显式传给Whisper API
    audio_format = file.filename.split(".")[-1]
    transcript = openai.Audio.transcribe(
        model="whisper-1",
        file=file.file,
        file_format=audio_format
    )
    return {"transcript": transcript["text"]}

总结

并非FastAPI接收的文件格式有问题,而是传递给Whisper API的文件对象缺少必要的格式标识或指针位置错误。通过重置指针、设置文件名或显式指定格式,即可实现直接调用,无需先写入磁盘再读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:17