微控制器调用Whisper API遇Socket限制及请求错误排查
问题解决:Socket通信调用OpenAI Whisper API的参数适配与错误修复
问题背景
微控制器上运行Whisper本地模型速度过慢,计划改用OpenAI Whisper API,但现有SDK仅支持Socket通信,调用时返回「缺少file字段」的验证错误,而GPT-3.5-turbo API可正常调用。需解决两个核心问题:
- 适配Socket通信调用Whisper API
- 修复Whisper API请求参数错误
错误原因分析
Whisper音频转录/翻译API与GPT类API的请求规则存在本质差异:
- 请求格式要求不同:Whisper API必须使用
multipart/form-data格式上传音频文件,而非GPT API的application/json格式 - 参数错误:
- 错误使用
audio字段传递音频,API必填字段为file - 额外添加了无效的
type参数,该参数不属于Whisper API的合法参数 - API URL存在多余斜杠(
https://api.openai.com//v1/...),虽多数场景可自动兼容,但需修正为规范格式 - 若需求是语音转录(同语言转文字),应使用
/v1/audio/transcriptions接口而非translations(翻译接口)
- 错误使用
解决方案与修正代码
适配后的Socket版本代码
## Socket版本(适配Whisper API)############################################################ import requests import json import os #### API密钥 with open('OPENAI_API_KEY', 'rb') as f: OPENAI_API_KEY = json.load(f)['key'][0] # 修正API URL:去掉多余斜杠,根据需求选择接口 # 转录(同语言转文字)用transcriptions,翻译(其他语言转英文)用translations url = "https://api.openai.com/v1/audio/transcriptions" # 代理 proxy = os.environ.get("HTTPS_PROXY") # 请求头:无需指定Content-Type,requests会自动处理multipart/form-data格式 headers = { "Authorization": f"Bearer {OPENAI_API_KEY}" } # 构造multipart/form-data格式的请求体 files = { "file": ("sample.mp3", open("sample.mp3", "rb"), "audio/mpeg"), "model": (None, "whisper-1") } # 发送请求 response = requests.post( url=url, headers=headers, files=files, proxies={'https': proxy} ) # 输出结果 result = response.json() print(json.dumps(result, indent=2, ensure_ascii=False))
关键改动说明
- 请求格式切换:放弃JSON格式,改用
multipart/form-data通过files参数直接上传音频字节流,无需base64编码 - 参数修正:
- 用
file字段传递音频文件,替换原错误的audio字段 - 移除无效的
type参数 - 将
model参数作为form-data的一部分传递
- 用
- URL修正:去掉URL中的多余斜杠,确保接口地址规范
- 请求头简化:无需手动指定
Content-Type,requests库会自动生成正确的multipart/form-data头信息
验证说明
运行修正后的代码后,Whisper API将正常处理音频文件并返回结果,格式示例如下:
{ "text": "这是音频中的文字内容示例" }
内容的提问来源于stack exchange,提问作者mogmol
相关产品推荐
相关产品推荐

