自托管 OpenAI Whisper API 替代方案:FunASR 一行起兼容 /v1/audio/transcriptions 服务
OpenAI 的 /v1/audio/transcriptions(Whisper API)按分钟计费、要把音频上传到云端、还有速率限制。如果你只是想把音频转成文字,完全可以在自己机器上起一个接口完全一致的服务——已有代码只改一个 base_url 就能切过来。FunASR 自带的 funasr-server 就是干这个的。下面每段代码都实测过。
一行启动 OpenAI 兼容服务
pip install -U funasr
funasr-server --model sensevoice --device cuda # 监听 localhost:8000
启动后就有了和 OpenAI 一致的两个端点:POST /v1/audio/transcriptions 和 GET /v1/models。
用 OpenAI 官方 SDK 直接调(只改 base_url)
你原来调 OpenAI 的代码,几乎一字不改,只把 base_url 指到本地服务、api_key 随便填:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
with open("audio.wav", "rb") as f:
r = client.audio.transcriptions.create(model="sensevoice", file=f)
print(r.text)
# -> 欢迎大家来体验达摩院推出的语音识别模型
列出可用模型也和 OpenAI 一样:
print([m.id for m in client.models.list().data])
# -> ['fun-asr-nano', 'sensevoice', 'paraformer']
或者用 curl / 任意 HTTP 客户端
curl http://localhost:8000/v1/audio/transcriptions \
-F "file=@audio.wav" \
-F "model=sensevoice"
# -> {"text": "欢迎大家来体验达摩院推出的语音识别模型"}
因为接口是 OpenAI 兼容的,Node 的 openai 包、LangChain、各种现成 SDK 都能直接连。
对比:OpenAI Whisper API vs FunASR 自托管
| OpenAI Whisper API | FunASR 自托管 | |
|---|---|---|
| 费用 | $0.006 / 分钟 | 免费(自己的机器) |
| 数据隐私 | 音频上传到云端 | 不出本地 |
| 速率限制 | 有 | 无 |
| 中文准确率 | 一般 | 更高(实测对比) |
| 速度 | — | SenseVoice 非自回归,远快于 Whisper |
| 接口 | /v1/audio/transcriptions | 完全一致 |
选哪个模型
sensevoice—— 默认,非自回归,极快,50+ 语言,带情感/事件;日常首选。fun-asr-nano—— LLM 解码,面向中英日及中文方言/口音的旗舰模型(需要 vLLM)。- 需要 31 语种 —— 部署独立的
FunAudioLLM/Fun-ASR-MLT-Nano-2512checkpoint。 paraformer—— 经典中文生产级,稳。
请求里把 model= 换成对应名字即可,无需重启服务。
从 OpenAI 迁移要改什么
- base_url:指到你的
funasr-server。 - api_key:本地服务不校验,随便填一个非空值。
- 其余不变:
client.audio.transcriptions.create(...)的调用方式一致。
在 Open-WebUI 里把语音输入接到 FunASR
Open-WebUI(15 万星的自托管 LLM 界面)的语音转文字(STT)支持任意 OpenAI 兼容端点。既然 funasr-server 本身就是 OpenAI 兼容的,直接指过去即可——无需插件、无需改 Open-WebUI 代码,中文识别比内置 Whisper 更准,而且本地、免费、隐私。
① 起 FunASR 服务(同上):
funasr-server --model sensevoice --device cuda # 监听 localhost:8000
② Open-WebUI 里:管理面板 → 设置 → 音频 → 语音转文本,引擎选 OpenAI,填:
- API Base URL:
http://localhost:8000/v1(Open-WebUI 在 Docker、FunASR 在宿主机时用http://host.docker.internal:8000/v1) - API Key:任意非空(funasr-server 不校验)
- STT Model:
sensevoice(或paraformer/fun-asr-nano)
用 Docker Compose 部署等价于这几个环境变量:
AUDIO_STT_ENGINE=openai AUDIO_STT_OPENAI_API_BASE_URL=http://host.docker.internal:8000/v1 AUDIO_STT_OPENAI_API_KEY=funasr AUDIO_STT_MODEL=sensevoice
之后 Open-WebUI 的麦克风语音输入就走 FunASR 了——中文转写更准、数据不出本地。同样的配置适用于任何"支持自定义 OpenAI STT 端点"的工具(LibreChat、AnythingLLM 等)。
FunASR 是通义实验室开源的工业级语音识别工具包。
在 GitHub 上 Star FunASR ★相关文章
- FunASR vs Whisper 实测对比
- SenseVoice 部署指南
- Fun-ASR-Nano 使用指南
- 说话人分离:谁在何时说话
- 情感与语种检测
- 实时流式语音识别
- 转写超长音频(1小时一次搞定)
- 命令行转写(文本/JSON/SRT)
- 自动生成字幕(SRT / VTT)
- Python 语音转文字教程
- FunASR 跑进 llama.cpp(whisper.cpp 替代)
- FunASR vs faster-whisper(中文/粤语)
- 轻量语音识别(CPU 250MB)
- 自托管替代 Deepgram/AssemblyAI
- 选哪个 FunASR 模型
- 粤语语音识别(SenseVoice 原生粤语)
- 日语语音识别(SenseVoice 转写+标点+情感)
- Python 语音活动检测(VAD)
- 自托管替代 Google/AWS/Azure 云语音 API
- 中文语音识别(普通话)实战
- 标点恢复 Python 实战
- 语音识别带时间戳(字级)