平时使用 OpenWebUI 的时候遇到的一个核心的问题就是: OpenWebUI 默认搭载的 Speech to Text 引擎,它的识别率是不行的。 而且应该是只支持英文。它的识别率又差,然后又不支持中英文和英文的混合输入,这使用中就造成了非常多的不便。 然后我就去找了一下如何在OpenWebUI上让这个中英文输入,可以达到,或者接近,我在手机上用微信输入法的这个程度。 然后目前来讲那就是 Whisper 或者就是这个 Faster Whisper。 然后是使用中发现一个很蛋疼的地方就是 Faster Whisper 它用的这套 API,还有 Whisper.cpp 给的那套 API,都是都不是 OpenAI 的那个API规范。 导致我没有办法在这个 OpenWebUI 上面直接配置使用。
直到我后来找到了这个项目:https://github.com/speaches-ai/speaches/tree/master 这个项目它实际上后端也是用的 Faster Whisper。但是它把 API 搞成 OpenAI 的格式。这样我就可以直接在 OpenWebUI 上调用这个Faster Whisper,实现快速优质的 STT。 也是找了一晚上才找到这么一个就是开箱即用的一个产品。所以在这里记录一下它的使用和部署的流程。
Docker Compose
services:
speaches:
image: ghcr.io/speaches-ai/speaches:latest-cuda-12.6.3
restart: unless-stopped
ports:
- 18000:8000
volumes:
- /mnt/data/speaches/hf-hub-cache:/home/ubuntu/.cache/huggingface/hub
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities:
- gpu有一点没想到的是,/mnt/data/speaches/hf-hub-cache 需要明确把 owner 改成 1000:1000 的用户和组,
否则后面下载模型的时候,会有 permission 的错误(curl 上是返回 server internal error)。估计 image
里面用的不是root用户(毕竟能看出来 base 大概率是 Ubuntu)。
存一下 URL,之后用着方便。
export SPEACHES_BASE_URL=http://192.168.1.1:18000Download Model
Use this command to list all the models supported to download for automatic-speech-recognition.
curl "$SPEACHES_BASE_URL/v1/registry?task=automatic-speech-recognition" | jqNOTE
注意不是所有的模型都是 STT 的,只有 task=automatic-speach-recognition 的才是。 如果不指定 task,那 TTS 的也会返回。
Download a specific one (one with large-v3 and support multiple languages)
curl "$SPEACHES_BASE_URL/v1/models/Zoont/faster-whisper-large-v3-turbo-int8-ct2" -X POSTConfig OpenWebUI
Using the UI
- Go to the Admin Settings page
- Click on the “Audio” tab
- Update settings
- Speech-to-Text Engine: OpenAI
- API Base URL: http://speaches:8000/v1
- API Key: does-not-matter-what-you-put-but-should-not-be-empty
- Model: Zoont/faster-whisper-large-v3-turbo-int8-ct2
- Click “Save”
Using environment variables (Docker Compose)
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
...
environment:
...
# Environment variables are documented here https://docs.openwebui.com/getting-started/env-configuration#speech-to-text
AUDIO_STT_ENGINE: "openai"
AUDIO_STT_OPENAI_API_BASE_URL: "http://<your-speeches-ip>:18000/v1"
AUDIO_STT_OPENAI_API_KEY: "does-not-matter-what-you-put-but-should-not-be-empty"
AUDIO_STT_MODEL: "Zoont/faster-whisper-large-v3-turbo-int8-ct2"
...WARNING
但是如果之前在 OpenWebUI 里面但凡调整过 STT,那这个 Env variable 的方法似乎就不管用了。
使用
OpenWebUI 目前还只是直接进行录音,然后将整个录音发给 Speeches,然后 faster-whisper 再识别。 而不是 streaming 的形式,一段段的识别。这个导致在使用的时候,实际上是看不到识别的进度的。
好在 large-v3 的识别率确实非常惊人。实测中文英文混杂完全没有什么问题。所以识别率高,就算没有 streaming,也算是没有太大的问题。
还有一个问题就是 Whisper large v3 也还是依旧不会添加标点符号。虽然实际上有带有标点符号的模型(比如:https://huggingface.co/BELLE-2/Belle-whisper-large-v3-zh-punct) 但是似乎就没有多语言支持了。有点可惜。