- Système permettant d’avoir en temps réel des conversations vocales naturelles avec une IA à l’aide du micro du navigateur
- Grâce au flux STT → LLM → TTS, la voix de l’utilisateur est convertie en texte, puis la réponse de l’IA est reconvertie en audio pour lecture
- Les composants clés sont un serveur FastAPI, du streaming WebSocket, des modules de traitement vocal basés sur des pods et divers backends LLM
- Un environnement de déploiement basé sur Docker est fourni, et l’utilisation d’un GPU peut encore réduire la latence et améliorer les performances
- Offre un environnement très personnalisable, avec de nombreuses possibilités de réglages avancés comme la détection d’interruption utilisateur, le changement de modèle ou le choix de la voix
Chat vocal IA en temps réel
- Ce projet repose sur une architecture client-serveur conçue pour une conversation vocale bidirectionnelle en temps réel
- L’utilisateur parle dans son navigateur, et l’IA renvoie sa réponse sous forme vocale
- La gestion des interruptions, l’affichage de réponses textuelles partielles et le choix parmi plusieurs TTS sont pris en charge
Flux de fonctionnement principal
- Entrée vocale : capture de la voix de l’utilisateur dans le navigateur
- Transmission en streaming : envoi des chunks audio vers le backend Python via WebSocket
- Reconnaissance vocale :
RealtimeSTT convertit la voix en texte
- Traitement LLM : le texte est transmis au LLM pour générer une réponse
- Conversion vocale :
RealtimeTTS transforme le texte de réponse en audio
- Lecture de la réponse : le son généré est renvoyé en streaming vers le navigateur
- Détection d’interruption : les prises de parole de l’utilisateur sont détectées et traitées automatiquement
Fonctionnalités principales
- Conversation vocale en temps réel et aperçu partiel de la transcription/réponse
- Streaming basé sur des chunks audio pour une faible latence
- Prise en charge de la détection de silence statique/dynamique (turn detection)
- Divers backends LLM : Ollama par défaut, OpenAI en option
- Prise en charge de plusieurs moteurs TTS : Kokoro, Coqui, Orpheus
- Interface web fournie : UI en Vanilla JS basée sur la Web Audio API
- Déploiement basé sur Docker Compose
Stack technique
- Backend : Python 3.x, FastAPI
- Frontend : HTML, CSS, JavaScript (Web Audio API)
- Communication : WebSockets
- Conteneurisation : Docker, Docker Compose
- Bibliothèques IA/ML :
RealtimeSTT, RealtimeTTS, transformers, torch, torchaudio
ollama, openai
- Traitement audio :
numpy, scipy
Exigences système et recommandations
- Système d’exploitation : utilisation de Docker recommandée sous Linux (avantageux pour l’intégration GPU)
- Python 3.9+, GPU NVIDIA avec CUDA 12.1 ou supérieur recommandés
- NVIDIA Container Toolkit requis en cas d’utilisation de Docker
- Configurer Ollama ou une clé API OpenAI si nécessaire
Installation
Option A : installation via Docker (recommandée)
- Cloner le dépôt puis exécuter
docker compose build
- Lancer l’application et Ollama avec
docker compose up -d
- Télécharger séparément un modèle Ollama (ex. :
docker compose exec ollama ollama pull ...)
- Arrêt des services :
docker compose down
- Redémarrage :
docker compose up -d
Option B : installation manuelle
- Configurer un venv Python puis installer les dépendances
- Installer manuellement PyTorch selon la version de CUDA
- Exécuter
server.py pour démarrer le serveur FastAPI
Exécution
- Ouvrir
http://localhost:8000 dans le navigateur
- Autoriser l’accès au micro puis cliquer sur "Start"
- Utiliser "Stop" pour arrêter et "Reset" pour réinitialiser la conversation
Guide de modification de configuration
- Changer le moteur/la voix TTS : modifier
server.py et audio_module.py
- Changer le modèle/backend LLM : configurer
server.py et llm_module.py
- Changer le modèle STT / les critères de silence :
transcribe.py, turndetect.py
- Configuration SSL possible : dans
server.py, définir l’activation de HTTPS et les certificats
Licence
- Publié sous licence MIT
- Les moteurs externes comme Coqui relèvent de licences distinctes
2 commentaires
La vidéo de démonstration de l’article original est impressionnante.
Avis Hacker News
La raison du développement de RealtimeVoiceChat est que la latence de la plupart des interactions vocales avec l’IA était jugée insatisfaisante. Il s’agit d’un système open source conçu pour des conversations vocales locales en temps réel
En tant qu’utilisateur de ce type d’outils, c’est rapide, mais cela ne tolère pas les pauses naturelles dans la parole
Très impressionnant ! La fonction d’interruption a été le moment "wow" (ce n’est pas nouveau, mais c’est surprenant de voir cela aussi bien implémenté en open source)
J’ai fait des recherches sur ce sujet il y a environ un an. J’y ai appris quelques faits intéressants
Excellent. En regardant le code source, je trouve intéressant que l’auteur ait implémenté une stratégie personnalisée de détection des tours de parole au lieu d’utiliser Silero VAD. Je me demande pourquoi ce choix a été fait et quels avantages ont été observés
Je commence à penser que les LLMs devraient être ajustés pour produire des réponses plus courtes. On leur envoie une phrase brève, et ils renvoient un long paragraphe de texte
Je suis surpris que personne ne l’ait mentionné. Cela interagit comme un humain et m’interrompt dans de nombreuses situations lorsqu’il a suffisamment de contexte. La latence est très faible
C’est plutôt bon. Ce serait encore mieux avec une voix SOTA
Impressionnant ! Je pense que c’est la meilleure qualité de synthèse vocale actuellement disponible en open source
J’étais en train de travailler sur quelque chose de similaire quand je suis tombé là-dessus. Excellent travail. J’aime beaucoup la démo