平时使用 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:18000

Download 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" | jq

NOTE

注意不是所有的模型都是 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 POST

Config 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) 但是似乎就没有多语言支持了。有点可惜。