- Sistema que permite conversas de voz naturais com IA em tempo real usando o microfone do navegador
- Por meio do fluxo STT → LLM → TTS, converte a voz do usuário em texto e depois transforma a resposta da IA novamente em voz para reprodução
- Os principais componentes são servidor FastAPI, streaming via WebSocket, módulo de processamento de voz baseado em Pods e diversos backends de LLM
- Um ambiente de implantação baseado em Docker é fornecido, e com GPU é possível esperar latência ainda menor e melhor desempenho
- Oferece um ambiente altamente customizável, com grande flexibilidade para alterar configurações avançadas como detecção de interrupção do usuário, troca de modelo e seleção de voz
Chat de voz com IA em tempo real
- Este projeto foi projetado com uma arquitetura cliente-servidor para conversas de voz bidirecionais em tempo real
- O usuário fala no navegador, e a IA retorna a resposta em voz
- Suporta tratamento de interrupções, exibição parcial do texto de resposta e diferentes opções de TTS
Fluxo principal de funcionamento
- Entrada de voz: captura a fala do usuário no navegador
- Transmissão por streaming: envia chunks de áudio ao backend em Python via WebSocket
- Reconhecimento de fala:
RealtimeSTT converte a voz em texto
- Processamento pelo LLM: envia o texto ao LLM para gerar uma resposta
- Conversão em voz:
RealtimeTTS transforma o texto de resposta em fala
- Reprodução da resposta: faz streaming do áudio gerado de volta para o navegador
- Detecção de interrupção: detecta e trata automaticamente quando o usuário interrompe
Principais recursos
- Conversa por voz em tempo real e prévia parcial de transcrição/resposta
- Streaming baseado em chunks de áudio para baixa latência
- Suporte a detecção de silêncio estática/dinâmica (turn detection)
- Diversos backends de LLM: Ollama por padrão, com OpenAI opcional
- Suporte a vários motores de TTS: Kokoro, Coqui, Orpheus
- Interface web disponível: UI em Vanilla JS baseada em Web Audio API
- Implantação baseada em Docker Compose
Stack tecnológica
- Backend: Python 3.x, FastAPI
- Frontend: HTML, CSS, JavaScript (Web Audio API)
- Comunicação: WebSockets
- Conteinerização: Docker, Docker Compose
- Bibliotecas de IA/ML:
RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
ollama, openai
- Processamento de áudio:
numpy, scipy
Requisitos e recomendações do sistema
- Sistema operacional: recomendado usar Docker no Linux (melhor integração com GPU)
- Python 3.9+, recomenda-se GPU NVIDIA com CUDA 12.1 ou superior
- Ao usar Docker, o NVIDIA Container Toolkit é obrigatório
- Configure Ollama ou uma OpenAI API Key quando necessário
Como instalar
Opção A: Instalação com Docker (recomendada)
- Clone o repositório e execute
docker compose build
- Inicie o app e o Ollama com
docker compose up -d
- Baixe separadamente o modelo do Ollama (ex.:
docker compose exec ollama ollama pull ...)
- Encerrar os serviços:
docker compose down
- Reiniciar:
docker compose up -d
Opção B: Instalação manual
- Configure um Python venv e instale as dependências
- Instale manualmente o PyTorch compatível com sua versão do CUDA
- Execute
server.py para iniciar o servidor FastAPI
Como executar
- Acesse
http://localhost:8000 no navegador
- Permita o acesso ao microfone e clique em "Start"
- Use "Stop" para encerrar e "Reset" para reinicializar a conversa
Guia de alteração de configurações
- Alterar motor/voz de TTS: edite
server.py e audio_module.py
- Alterar modelo/backend de LLM: configure em
server.py e llm_module.py
- Alterar modelo de STT/critérios de silêncio:
transcribe.py, turndetect.py
- Configuração de SSL disponível: em
server.py, defina uso de HTTPS e certificados
Licença
- Disponibilizado sob a licença MIT
- Motores externos como Coqui seguem licenças próprias
2 comentários
O vídeo de demonstração do original é impressionante.
Comentários do Hacker News
O motivo para desenvolver o RealtimeVoiceChat foi que a latência na maioria das interações com IA por voz era insatisfatória. Este é um sistema open source projetado para conversas de voz locais em tempo real
Como usuário desse tipo de ferramenta, ela é rápida, mas não permite pausas ao falar naturalmente
Muito legal! O recurso de interrupção foi o momento de "uau" (não é algo novo, mas é surpreendente ver isso tão bem implementado em open source)
Pesquisei esse tema há cerca de 1 ano. Aprendi alguns fatos interessantes
Excelente. Olhando o código-fonte, achei interessante que o autor implementou uma estratégia personalizada de detecção de turno em vez de usar Silero VAD. Fiquei curioso sobre o motivo disso e quais vantagens ele observou
Estou começando a achar que os LLMs deveriam ser ajustados para respostas mais curtas. Você digita uma frase curta e recebe um parágrafo longo de texto
Surpreso que ninguém mencionou isso. Interage como um humano e me interrompe em muitas situações quando há contexto suficiente. Tem latência muito baixa
Muito bom. Ficaria muito melhor se soasse como voz SOTA
Impressionante! Acho que é a melhor qualidade de síntese de voz entre os open source disponíveis hoje
Eu estava trabalhando em algo parecido e encontrei isto. Excelente trabalho. Gostei da demo