跳到主要内容
警告

本教程由社区贡献,不获得 Open WebUI 团队的支持。它仅作为演示,说明如何根据您的特定用例定制 Open WebUI。想要贡献?请查看贡献教程。

使用 Docker 将 openedai-speech 集成到 Open WebUI

什么是 openedai-speech

信息

openedai-speech 是一个与 OpenAI 音频/语音 API 兼容的文本转语音服务器。

它提供 /v1/audio/speech 端点,并提供免费、私有的文本转语音体验,支持自定义语音克隆功能。此服务与 OpenAI 没有任何关联,并且不需要 OpenAI API 密钥。

要求

  • 系统上已安装 Docker
  • 在 Docker 容器中运行的 Open WebUI
  • 对 Docker 和 Docker Compose 有基本了解

选项 1:使用 Docker Compose

步骤 1:为 openedai-speech 服务创建一个新文件夹

创建一个新文件夹,例如 openedai-speech-service,用于存储 docker-compose.ymlspeech.env 文件。

步骤 2:从 GitHub 克隆 openedai-speech 仓库

git clone https://github.com/matatonic/openedai-speech.git

这将把 openedai-speech 仓库下载到您的本地机器,其中包含 Docker Compose 文件(docker-compose.ymldocker-compose.min.ymldocker-compose.rocm.yml)以及其他必要文件。

步骤 3:将 sample.env 文件重命名为 speech.env(如果需要,请自定义)

openedai-speech 仓库文件夹中,创建一个名为 speech.env 的新文件,其内容如下

TTS_HOME=voices
HF_HOME=voices
#PRELOAD_MODEL=xtts
#PRELOAD_MODEL=xtts_v2.0.2
#PRELOAD_MODEL=parler-tts/parler_tts_mini_v0.1
#EXTRA_ARGS=--log-level DEBUG --unload-timer 300
#USE_ROCM=1

步骤 4:选择一个 Docker Compose 文件

您可以使用以下任何 Docker Compose 文件

步骤 4:构建所选的 Docker 镜像

在运行 Docker Compose 文件之前,您需要构建 Docker 镜像

  • Nvidia GPU (CUDA 支持):
docker build -t ghcr.io/matatonic/openedai-speech .
  • AMD GPU (ROCm 支持):
docker build -f Dockerfile --build-arg USE_ROCM=1 -t ghcr.io/matatonic/openedai-speech-rocm .
  • 仅限 CPU,无 GPU (仅限 Piper):
docker build -f Dockerfile.min -t ghcr.io/matatonic/openedai-speech-min .

步骤 5:运行正确的 docker compose up -d 命令

  • Nvidia GPU (CUDA 支持):运行以下命令以分离模式启动 openedai-speech 服务
docker compose up -d
  • AMD GPU (ROCm 支持):运行以下命令以分离模式启动 openedai-speech 服务
docker compose -f docker-compose.rocm.yml up -d
  • ARM64(Apple M 系列,Raspberry Pi):XTTS 在此仅支持 CPU,速度会非常慢。您可以将 Nvidia 镜像用于 XTTS(CPU 模式,慢),或使用仅支持 Piper 的镜像(推荐)
docker compose -f docker-compose.min.yml up -d
  • 仅限 CPU,无 GPU (仅限 Piper):对于仅支持 Piper 的最小 Docker 镜像(< 1GB vs. 8GB)
docker compose -f docker-compose.min.yml up -d

这将在分离模式下启动 openedai-speech 服务。

选项 2:使用 Docker Run 命令

您也可以使用以下 Docker run 命令以分离模式启动 openedai-speech 服务

  • Nvidia GPU (CUDA):运行以下命令来构建并启动 openedai-speech 服务
docker build -t ghcr.io/matatonic/openedai-speech .
docker run -d --gpus=all -p 8000:8000 -v voices:/app/voices -v config:/app/config --name openedai-speech ghcr.io/matatonic/openedai-speech
  • ROCm (AMD GPU):运行以下命令来构建并启动 openedai-speech 服务

要启用 ROCm 支持,请取消注释 speech.env 文件中的 #USE_ROCM=1 行。

docker build -f Dockerfile --build-arg USE_ROCM=1 -t ghcr.io/matatonic/openedai-speech-rocm .
docker run -d --privileged --init --name openedai-speech -p 8000:8000 -v voices:/app/voices -v config:/app/config ghcr.io/matatonic/openedai-speech-rocm
  • 仅限 CPU,无 GPU (仅限 Piper):运行以下命令来构建并启动 openedai-speech 服务
docker build -f Dockerfile.min -t ghcr.io/matatonic/openedai-speech-min .
docker run -d -p 8000:8000 -v voices:/app/voices -v config:/app/config --name openedai-speech ghcr.io/matatonic/openedai-speech-min

步骤 6:配置 Open WebUI 以使用 openedai-speech 进行 TTS

openedai-tts

打开 Open WebUI 设置并导航到 管理面板 > 设置 > 音频 下的 TTS 设置。添加以下配置

  • API 基础 URLhttp://host.docker.internal:8000/v1
  • API 密钥sk-111111111(请注意,这是一个虚拟 API 密钥,因为 openedai-speech 不需要 API 密钥。您可以为此字段使用任何您喜欢的内容,只要它不为空即可。)

步骤 7:选择一个声音

在管理面板的相同音频设置菜单中的 TTS 声音 下,您可以从 openedai-speech 支持的以下选项中设置要使用的 TTS 模型。这些模型的声音针对英语进行了优化。

  • tts-1tts-1-hdalloyechoecho-altfableonyxnovashimmertts-1-hd 可配置;默认使用 OpenAI 样本)

步骤 8:按下 保存 以应用更改并开始享受自然发音的声音

点击 保存 按钮将更改应用到您的 Open WebUI 设置。刷新页面以使更改完全生效,并享受在 Open WebUI 中使用 openedai-speech 集成,以自然发音的文本转语音朗读文本回复。

模型详情:

openedai-speech 支持多种文本转语音模型,每个模型都有其自身的优点和要求。以下模型可用

  • Piper TTS(速度极快,在 CPU 上运行):通过 voice_to_speaker.yaml 配置文件使用您自己的 Piper 声音。此模型非常适用于需要低延迟和高性能的应用程序。Piper TTS 还支持多语言声音。
  • Coqui AI/TTS XTTS v2(快速,但需要约 4GB GPU 显存和支持 CUDA 的 Nvidia GPU):此模型使用 Coqui AI 的 XTTS v2 语音克隆技术生成高质量声音。虽然它需要更强大的 GPU,但它提供出色的性能和高质量音频。Coqui 也支持多语言声音。
  • Beta Parler-TTS 支持(实验性,较慢):此模型使用 Parler-TTS 框架生成声音。尽管目前处于测试阶段,它允许您描述说话者声音的非常基本特征。每次生成的确切声音会略有不同,但应与提供的说话者描述相似。有关如何描述声音的灵感,请参阅 Text Description to Speech

故障排除

如果您在将 openedai-speech 与 Open WebUI 集成时遇到任何问题,请遵循以下故障排除步骤

  • 验证 openedai-speech 服务:确保 openedai-speech 服务正在运行,并且 docker-compose.yml 文件中指定的端口已暴露。
  • 检查对 host.docker.internal 的访问:验证 host.docker.internal 主机名在 Open WebUI 容器内部是否可解析。这是必要的,因为 openedai-speech 通过您 PC 上的 localhost 暴露,但 open-webui 通常无法从其容器内部访问它。您可以在 docker-compose.yml 文件中添加一个卷,将文件从主机挂载到容器,例如,挂载到 openedai-speech 将提供服务的目录。
  • 检查 API 密钥配置:确保 API 密钥设置为虚拟值或实际上未选中,因为 openedai-speech 不需要 API 密钥。
  • 检查语音配置:验证您尝试用于 TTS 的声音是否存在于您的 voice_to_speaker.yaml 文件中,并且相应的配置文件(例如,语音 XML 文件)位于正确的目录中。
  • 验证语音模型路径:如果您在语音模型加载方面遇到问题,请仔细检查 voice_to_speaker.yaml 文件中的路径是否与您的语音模型的实际位置匹配。

其他故障排除提示

  • 检查 openedai-speech 日志,查找可能指示问题所在位置的错误或警告。
  • 验证 docker-compose.yml 文件是否为您的环境正确配置。
  • 如果您仍然遇到问题,请尝试重新启动 openedai-speech 服务或整个 Docker 环境。
  • 如果问题仍然存在,请查阅 openedai-speech GitHub 仓库或在相关社区论坛寻求帮助。

常见问题

如何控制生成音频的情感范围?

没有直接机制来控制生成音频的情感输出。某些因素,例如大小写或语法,可能会影响输出音频,但内部测试结果喜忧参半。

语音文件存储在哪里?配置文件呢?.

配置文件(定义可用声音及其属性)存储在配置卷中。具体来说,默认声音在 voice_to_speaker.default.yaml 中定义。

附加资源

有关配置 Open WebUI 以使用 openedai-speech 的更多信息,包括设置环境变量,请参阅 Open WebUI 文档

有关 openedai-speech 的更多信息,请访问 GitHub 仓库

如何向 openedai-speech 添加更多声音: 自定义声音指南

注意

您可以在 docker-compose.yml 文件中将端口号更改为任何开放且可用的端口,但请务必相应地更新 Open WebUI 管理员音频设置中的 API 基础 URL