Este tutorial é uma contribuição da comunidade e não é suportado pela equipe Open WebUI. Ele serve apenas como demonstração de como personalizar o Open WebUI para seu caso de uso específico. Quer contribuir? Confira o tutorial de contribuição.
Integrando openedai-speech
ao Open WebUI usando Docker
O que é openedai-speech
?
openedai-speech é um servidor de texto para fala compatível com a API de áudio/fala do OpenAI.
Ele serve o endpoint /v1/audio/speech
e oferece uma experiência de texto para fala gratuita e privada com capacidades de clonagem de voz personalizada. Este serviço não possui qualquer afiliação com OpenAI e não requer uma chave de API do OpenAI.
Requisitos
- Docker instalado em seu sistema
- Open WebUI executando em um contêiner Docker
- Conhecimento básico sobre Docker e Docker Compose
Opção 1: Usando Docker Compose
Etapa 1: Crie uma nova pasta para o serviço openedai-speech
Crie uma nova pasta, por exemplo, openedai-speech-service
, para armazenar os arquivos docker-compose.yml
e speech.env
.
Etapa 2: Clone o repositório openedai-speech
do GitHub
git clone https://github.com/matatonic/openedai-speech.git
Isso baixará o repositório openedai-speech
para sua máquina local, incluindo os arquivos Docker Compose (docker-compose.yml
, docker-compose.min.yml
e docker-compose.rocm.yml
) e outros arquivos necessários.
Etapa 3: Renomeie o arquivo sample.env
para speech.env
(Personalize se necessário)
Na pasta do repositório openedai-speech
, crie um novo arquivo chamado speech.env
com o seguinte conteúdo:
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
Etapa 4: Escolha um arquivo Docker Compose
Você pode usar qualquer um dos seguintes arquivos Docker Compose:
- docker-compose.yml: Este arquivo usa a imagem
ghcr.io/matatonic/openedai-speech
e é construído a partir do Dockerfile. - docker-compose.min.yml: Este arquivo usa a imagem
ghcr.io/matatonic/openedai-speech-min
e é construído a partir do Dockerfile.min. Esta imagem é uma versão mínima que inclui apenas suporte ao Piper e não requer uma GPU. - docker-compose.rocm.yml: Este arquivo usa a imagem
ghcr.io/matatonic/openedai-speech-rocm
e é construído a partir do Dockerfile com suporte ao ROCm.
Etapa 4: Construa a imagem Docker escolhida
Antes de executar o arquivo Docker Compose, você precisa construir a imagem Docker:
- GPU Nvidia (suporte CUDA):
docker build -t ghcr.io/matatonic/openedai-speech .
- GPU AMD (suporte ROCm):
docker build -f Dockerfile --build-arg USE_ROCM=1 -t ghcr.io/matatonic/openedai-speech-rocm .
- Somente CPU, sem GPU (apenas Piper):
docker build -f Dockerfile.min -t ghcr.io/matatonic/openedai-speech-min .
Etapa 5: Execute o comando correto docker compose up -d
- GPU Nvidia (suporte CUDA): Execute o seguinte comando para iniciar o serviço
openedai-speech
em modo desconectado:
docker compose up -d
- GPU AMD (suporte ROCm): Execute o seguinte comando para iniciar o serviço
openedai-speech
em modo desconectado:
docker compose -f docker-compose.rocm.yml up -d
- ARM64 (Apple M-series, Raspberry Pi): XTTS tem suporte apenas para CPU aqui e será muito lento. Você pode usar a imagem Nvidia para XTTS com CPU (lento), ou usar a imagem apenas Piper (recomendado):
docker compose -f docker-compose.min.yml up -d
- Somente CPU, sem GPU (apenas Piper): Para uma imagem Docker mínima com apenas suporte Piper (< 1GB contra 8GB):
docker compose -f docker-compose.min.yml up -d
Isso iniciará o serviço openedai-speech
em modo desconectado.
Opção 2: Usando comandos Docker Run
Você também pode usar os seguintes comandos Docker run para iniciar o serviço openedai-speech
no modo desanexado:
- Nvidia GPU (CUDA): Execute o seguinte comando para construir e iniciar o serviço
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): Execute o seguinte comando para construir e iniciar o serviço
openedai-speech
:
Para habilitar o suporte ao ROCm, descomente a linha
#USE_ROCM=1
no arquivospeech.env
.
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
- Somente CPU, Sem GPU (Apenas Piper): Execute o seguinte comando para construir e iniciar o serviço
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
Passo 6: Configurando o Open WebUI para usar openedai-speech
para TTS
Abra as configurações do Open WebUI e navegue para as Configurações TTS em Painel de Administrador > Configurações > Áudio. Adicione a seguinte configuração:
- URL Base da API:
http://host.docker.internal:8000/v1
- Chave da API:
sk-111111111
(Observe que esta é uma chave de API fictícia, poisopenedai-speech
não requer uma chave de API. Você pode usar qualquer valor para este campo, desde que esteja preenchido.)
Passo 7: Escolha uma voz
Na opção TTS Voice
dentro do mesmo menu de configurações de áudio no painel de administração, você pode configurar o TTS Model
a ser usado a partir das opções abaixo que o openedai-speech
suporta. As vozes desses modelos são otimizadas para o idioma inglês.
tts-1
outts-1-hd
:alloy
,echo
,echo-alt
,fable
,onyx
,nova
eshimmer
(tts-1-hd
é configurável; usa amostras do OpenAI por padrão)
Passo 8: Pressione Salvar
para aplicar as alterações e começar a desfrutar de vozes com som natural
Pressione o botão Salvar
para aplicar as alterações nas configurações do Open WebUI. Atualize a página para que a alteração tenha efeito total e aproveite a integração do openedai-speech
no Open WebUI para ler respostas em texto em voz natural.
Detalhes do Modelo:
openedai-speech
suporta vários modelos de conversão de texto em fala, cada um com suas próprias forças e requisitos. Os seguintes modelos estão disponíveis:
- Piper TTS (muito rápido, funciona em CPU): Use suas próprias vozes Piper através do arquivo de configuração
voice_to_speaker.yaml
. Este modelo é ideal para aplicações que requerem baixa latência e alto desempenho. Piper TTS também suporta vozes multilíngues. - Coqui AI/TTS XTTS v2 (rápido, mas requer cerca de 4GB de VRAM GPU e Nvidia GPU com CUDA): Este modelo usa a tecnologia de clonagem de voz XTTS v2 da Coqui AI para gerar vozes de alta qualidade. Embora exija uma GPU mais potente, oferece excelente desempenho e áudio de alta qualidade. Coqui também suporta vozes multilíngues.
- Suporte Beta Parler-TTS (experimental, mais lento): Este modelo usa a estrutura Parler-TTS para gerar vozes. Embora esteja atualmente em beta, permite descrever características muito básicas da voz do locutor. A voz exata será ligeiramente diferente a cada geração, mas deve ser semelhante à descrição fornecida do locutor. Para inspiração sobre como descrever vozes, consulte Descrição de Texto para Fala.
Solução de Problemas
Se você encontrar problemas ao integrar openedai-speech
com Open WebUI, siga estas etapas de solução de problemas:
- Verificar o serviço
openedai-speech
: Certifique-se de que o serviçoopenedai-speech
esteja em execução e a porta especificada no arquivo docker-compose.yml esteja exposta. - Verifique o acesso ao host.docker.internal: Certifique-se de que o nome de host
host.docker.internal
pode ser resolvido de dentro do contêiner do Open WebUI. Isso é necessário porque oopenedai-speech
está exposto vialocalhost
no seu PC, mas oopen-webui
normalmente não pode acessá-lo de dentro de seu contêiner. Você pode adicionar um volume ao arquivo docker-compose.yml para montar um arquivo do host no contêiner, por exemplo, para um diretório que será servido pelo openedai-speech. - Revisar a configuração da chave da API: Certifique-se de que a chave da API esteja configurada como um valor fictício ou efetivamente desligada, pois o
openedai-speech
não requer uma chave da API. - Verificar a configuração de voz: Confirme se a voz que você está tentando usar para TTS existe no seu arquivo
voice_to_speaker.yaml
e se os arquivos correspondentes (por exemplo, arquivos XML de voz) estão presentes no diretório correto. - Verificar os caminhos dos modelos de voz: Se estiver enfrentando problemas ao carregar modelos de voz, verifique se os caminhos no seu arquivo
voice_to_speaker.yaml
correspondem aos locais reais de seus modelos de voz.
Dicas Adicionais de Solução de Problemas
- Verifique os logs do
openedai-speech
para erros ou avisos que possam indicar onde está o problema. - Certifique-se de que o arquivo
docker-compose.yml
está corretamente configurado para o seu ambiente. - Se ainda estiver enfrentando problemas, tente reiniciar o serviço
openedai-speech
ou todo o ambiente Docker. - Se o problema persistir, consulte o repositório GitHub do
openedai-speech
ou busque ajuda em um fórum da comunidade relevante.
FAQ
Como posso controlar a variação emocional do áudio gerado?
Não há um mecanismo direto para controlar a saída emocional do áudio gerado. Certos fatores, como capitalização ou gramática, podem afetar o áudio de saída, mas os testes internos apresentaram resultados variados.
Onde os arquivos de voz são armazenados? E o arquivo de configuração?
Os arquivos de configuração, que definem as vozes disponíveis e suas propriedades, são armazenados no volume de configuração. Especificamente, as vozes padrão são definidas em voice_to_speaker.default.yaml
.
Recursos Adicionais
Para mais informações sobre como configurar o Open WebUI para usar o openedai-speech
, incluindo como definir variáveis de ambiente, veja a documentação do Open WebUI.
Para mais informações sobre o openedai-speech
, visite o repositório do GitHub.
Como adicionar mais vozes ao openedai-speech: Custom-Voices-HowTo
Você pode alterar o número da porta no arquivo docker-compose.yml
para qualquer porta aberta e utilizável, mas certifique-se de atualizar a Base URL da API nas configurações de áudio do Open WebUI Admin de acordo.