- Sistema que permite mantener conversaciones de voz naturales con una IA en tiempo real usando el micrófono del navegador
- A través del flujo STT → LLM → TTS, convierte la voz del usuario en texto y luego transforma la respuesta de la IA nuevamente en voz para reproducirla
- Sus componentes principales son servidor FastAPI, streaming por WebSocket, módulo de procesamiento de voz basado en Pods y varios backends de LLM
- Incluye un entorno de despliegue basado en Docker, y al usar GPU se puede esperar una latencia aún menor y mejor rendimiento
- Ofrece un entorno muy personalizable con gran capacidad para cambiar configuraciones avanzadas, como detección de interrupciones del usuario, cambio de modelo y selección de voz
Chat de voz con IA en tiempo real
- Este proyecto está diseñado con una arquitectura cliente-servidor para conversaciones de voz bidireccionales en tiempo real
- El usuario habla desde el navegador y la IA devuelve la respuesta en voz
- Permite manejo de interrupciones, visualización parcial de respuestas en texto y varias opciones de TTS
Flujo principal de funcionamiento
- Entrada de voz: captura la voz del usuario desde el navegador
- Transmisión en streaming: envía fragmentos de audio al backend en Python mediante WebSocket
- Reconocimiento de voz:
RealtimeSTT convierte la voz en texto
- Procesamiento con LLM: envía el texto al LLM para generar una respuesta
- Conversión a voz:
RealtimeTTS convierte el texto de respuesta en audio
- Reproducción de la respuesta: vuelve a transmitir el audio generado al navegador
- Detección de interrupciones: detecta y procesa automáticamente cuando el usuario interrumpe
Funciones principales
- Conversación de voz en tiempo real y transcripción parcial / vista previa de respuestas
- Streaming basado en fragmentos de audio para baja latencia
- Soporte para detección de silencio estática/dinámica (turn detection)
- Varios backends de LLM: Ollama por defecto, OpenAI opcional
- Soporte para múltiples motores TTS: Kokoro, Coqui, Orpheus
- Interfaz web incluida: UI en Vanilla JS basada en Web Audio API
- Despliegue con Docker Compose
Stack tecnológico
- Backend: Python 3.x, FastAPI
- Frontend: HTML, CSS, JavaScript (Web Audio API)
- Comunicación: WebSockets
- Contenerización: Docker, Docker Compose
- Bibliotecas de AI/ML:
RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
ollama, openai
- Procesamiento de audio:
numpy, scipy
Requisitos y recomendaciones del sistema
- Sistema operativo: se recomienda usar Docker en Linux (mejor integración con GPU)
- Python 3.9+ y se recomienda GPU NVIDIA con CUDA 12.1 o superior
- Si usas Docker, NVIDIA Container Toolkit es obligatorio
- Configurar Ollama o una API Key de OpenAI si es necesario
Instalación
Opción A: instalación con Docker (recomendada)
- Clonar el repositorio y luego ejecutar
docker compose build
- Iniciar la app y Ollama con
docker compose up -d
- Descargar por separado el modelo de Ollama (por ejemplo:
docker compose exec ollama ollama pull ...)
- Detener los servicios:
docker compose down
- Reiniciar:
docker compose up -d
Opción B: instalación manual
- Configurar un entorno virtual de Python e instalar las dependencias
- Instalar manualmente PyTorch según la versión de CUDA
- Ejecutar
server.py para iniciar el servidor FastAPI
Cómo usarlo
- Abrir
http://localhost:8000 en el navegador
- Permitir el acceso al micrófono y hacer clic en "Start"
- Finalizar con "Stop" y reiniciar la conversación con "Reset"
Guía para cambiar configuraciones
- Cambiar motor/voz de TTS: modificar
server.py y audio_module.py
- Cambiar modelo/backend de LLM: configurar en
server.py y llm_module.py
- Cambiar modelo STT/criterio de silencio:
transcribe.py, turndetect.py
- Posibilidad de configurar SSL: en
server.py se define el uso de HTTPS y los certificados
Licencia
- Publicado bajo licencia MIT
- Motores externos como Coqui están sujetos a licencias separadas
2 comentarios
El video de demostración original es impresionante.
Opiniones de Hacker News
La razón para desarrollar RealtimeVoiceChat fue que la latencia en la mayoría de las interacciones de voz con IA resultaba insatisfactoria. Este sistema es de código abierto y está diseñado para conversaciones de voz locales en tiempo real
Como usuario de este tipo de herramientas, aunque es rápido, no permite las pausas naturales al hablar
¡Muy genial! La capacidad de interrupción fue el momento de "wow" (no porque sea algo nuevo, sino porque sorprende verlo tan bien implementado en código abierto)
Investigué este tema hace alrededor de un año. Aprendí algunos datos interesantes
Excelente. Al revisar el código fuente, me pareció interesante que el autor implementara una estrategia personalizada de detección de turnos en vez de usar Silero VAD. Me pregunto por qué lo hizo así y qué ventajas observó
Estoy empezando a sentir que los LLMs deberían ajustarse para dar respuestas más cortas. Uno escribe una frase breve y obtiene párrafos largos de texto
Me sorprende que nadie lo haya mencionado. Interactúa como un humano y me interrumpe en muchas situaciones cuando tiene suficiente contexto. Tiene una latencia muy baja
Está bastante bien. Sería mucho mejor si sonara como voz SOTA
¡Impresionante! Creo que es la mejor calidad de síntesis de voz entre las opciones de código abierto disponibles actualmente
Estaba trabajando en algo parecido y me topé con esto. Excelente trabajo. Me gustó la demo