Assistant vocal 100 % local : Whisper + Ollama + Piper
Un assistant vocal local écoute, comprend et répond à voix haute sans jamais envoyer un octet dans le cloud. Ce guide assemble trois briques open source — Whisper pour la reconnaissance vocale, un LLM servi par Ollama pour le raisonnement, et Piper pour une voix française naturelle — en une boucle complète qui tourne sur votre propre machine. On détaille la chaîne STT → LLM → TTS, le matériel conseillé, et la latence à laquelle vous attendre réellement.
#Pourquoi un assistant vocal local
Alexa, Google Assistant et Siri partagent le même défaut : chaque phrase que vous prononcez part sur des serveurs distants pour être transcrite et interprétée. Un assistant vocal local inverse ce modèle. Le micro, la reconnaissance, le raisonnement et la voix de réponse vivent tous sur votre matériel. Rien ne transite par internet, et l'assistant continue de fonctionner même connexion coupée.
Au-delà de la vie privée, l'intérêt est le contrôle. Vous choisissez le modèle de langage, sa personnalité via le prompt système, la voix de sortie, et vous pouvez le brancher sur vos propres outils — domotique, agenda, notes — sans dépendre d'une API tierce qui peut fermer ou changer ses conditions du jour au lendemain.
- Confidentialité
- Aucune commande vocale n'est enregistrée ni analysée par un tiers. Idéal pour un usage domestique ou professionnel sensible.
- Hors-ligne
- La chaîne complète fonctionne sans internet une fois les modèles téléchargés.
- Personnalisable
- Prompt système, voix, langue, wake-word et outils sont tous sous votre contrôle.
- Sans abonnement
- Tout est open source. Le seul coût est votre matériel et l'électricité.
#La chaîne STT → LLM → TTS
Un assistant vocal, aussi sophistiqué soit-il, n'est qu'un enchaînement de trois étapes. Comprendre ce découpage est la clé pour diagnostiquer la latence et remplacer un maillon sans casser le reste.
- 01STT — Speech To TextLe micro capte votre voix, et Whisper la transforme en texte. C'est la reconnaissance vocale. La qualité dépend du modèle Whisper choisi et du bruit ambiant.
- 02LLM — le raisonnementLe texte transcrit est envoyé à un modèle de langage servi par Ollama, avec un prompt système qui définit le rôle de l'assistant. Le LLM génère une réponse écrite.
- 03TTS — Text To SpeechLa réponse texte est passée à Piper, qui la prononce à voix haute avec une voix française. C'est la synthèse vocale.
La latence perçue est la somme des trois étapes : le temps de transcription Whisper, le temps de génération du LLM (le plus variable), et le temps de synthèse Piper. On y revient en détail plus bas.
#Prérequis et matériel
Un assistant vocal local est plus exigeant qu'un simple chat texte : Whisper et le LLM se partagent le GPU, et la réactivité compte. Voici les repères matériels selon l'ambition.
- Minimal (CPU seul)
- Whisper base + un LLM 3B en Q4_K_M (≈2 Go). Fonctionne, mais comptez plusieurs secondes de latence par tour. Acceptable pour de la domotique où l'on ne parle pas en continu.
- Confortable
- RTX 3060 12GB ou RTX 4070 12GB. Whisper small/medium sur GPU + un LLM 7B Q4_K_M (≈5 Go). Latence de l'ordre de 1 à 3 secondes par tour.
- Fluide
- RTX 4080 16GB / RTX 4090 24GB ou un Mac M4 Pro (24-48 Go unifiés). Whisper medium + un LLM 14B Q4_K_M (≈9 Go), réponses quasi immédiates.
- Micro et audio
- Un micro USB correct suffit. Sous Linux, PipeWire ou PulseAudio ; sous macOS/Windows, la config par défaut convient.
Côté logiciel, on suppose Ollama déjà installé et fonctionnel. Si ce n'est pas le cas, commencez par le guide d'installation d'Ollama avant de continuer. Vérifiez que le daemon répond.
#1. Écoute et transcription (Whisper)
Whisper est le modèle de reconnaissance vocale d'OpenAI, distribué en open source. Pour un usage local temps réel, on privilégie faster-whisper, une réimplémentation optimisée qui utilise CTranslate2 et tourne bien plus vite que la version de référence, sur CPU comme sur GPU.
Les modèles Whisper existent en plusieurs tailles. Plus le modèle est gros, meilleure est la transcription — surtout en français et en environnement bruyant — mais plus il est lent.
- tiny / base
- Très rapides, parfaits pour un CPU modeste ou de la domotique. Transcription correcte de commandes courtes en français.
- small
- Bon compromis vitesse/qualité pour la plupart des assistants. Recommandé comme point de départ.
- medium
- Nettement meilleur sur les phrases longues et les accents, mais demande un GPU pour rester fluide.
- large-v3
- Qualité maximale, réservé aux GPU confortables si la latence importe.
Voici une fonction d'écoute qui enregistre depuis le micro et renvoie le texte transcrit. On force la langue française pour éviter les erreurs de détection.
#2. Raisonnement (Ollama)
Le texte transcrit part maintenant vers le LLM. Ollama expose une API HTTP sur http://localhost:11434 ; on l'interroge en Python. Le choix du modèle dépend de votre GPU : un 7B comme Llama 3.1 8B ou Qwen2.5 7B en Q4_K_M offre un excellent équilibre pour un assistant conversationnel.
Le prompt système est ce qui transforme un LLM générique en assistant vocal utile. Pour la voix, une consigne cruciale : demander des réponses courtes. Un pavé de texte devient interminable une fois lu à voix haute.
#3. Synthèse vocale française (Piper)
Piper est un moteur de synthèse vocale neuronale rapide et local, conçu par la communauté Home Assistant (projet Rhasspy). Il produit une voix française bien plus naturelle que les vieux moteurs comme espeak, tout en restant assez léger pour tourner sur un Raspberry Pi.
Piper fonctionne avec des voix pré-entraînées, une par langue et par timbre. Pour le français, plusieurs voix sont disponibles (fr_FR) en différentes qualités. Chaque voix est un couple de fichiers : le modèle .onnx et sa configuration .onnx.json.
On l'utilise ensuite pour transformer une phrase en audio et la jouer directement.
#4. Assembler la boucle complète
Les trois briques testées séparément, il ne reste qu'à les enchaîner dans une boucle : écouter, raisonner, parler, recommencer. Voici l'assistant minimal complet, en réunissant les fonctions précédentes.
C'est tout : une centaine de lignes réparties sur trois fichiers, et vous avez un assistant vocal qui écoute en français, réfléchit avec un LLM local et répond à voix haute, sans le moindre appel réseau sortant. À partir de là, on peut ajouter un wake-word (« Ok maison ») avec openWakeWord, une VAD pour l'écoute continue, ou brancher des outils.
#Latence réelle et optimisations
La question qui fait ou défait un assistant vocal : combien de temps entre la fin de votre phrase et le début de la réponse parlée ? Voici des ordres de grandeur observés sur une RTX 4070 avec Whisper small et un 7B Q4_K_M.
- Transcription Whisper
- ≈ 0,3 à 0,8 s pour une phrase de 5 s avec le modèle small sur GPU. Sur CPU, comptez 2 à 4 s.
- Génération LLM
- Le poste le plus variable. Un 7B sur GPU produit la première réponse en ≈ 0,5 à 1,5 s selon la longueur. C'est ici que num_predict bas et un modèle rapide comptent le plus.
- Synthèse Piper
- ≈ 0,2 à 0,5 s pour une ou deux phrases avec une voix medium. Très rapide, rarement le goulot.
- Total ressenti
- Autour de 1 à 3 s par tour sur GPU milieu de gamme. Sous la seconde relève du haut de gamme ou du streaming.
- Garder les modèles chargés
- Réglez OLLAMA_KEEP_ALIVE pour éviter qu'Ollama décharge le modèle entre deux questions — le rechargement coûte plusieurs secondes.
- Réponses courtes
- Un num_predict bas et un prompt système qui exige la concision réduisent directement le temps de génération et la durée de lecture.
- Whisper adapté
- Ne prenez pas large-v3 si small suffit à votre acoustique : vous économisez des centaines de millisecondes à chaque tour.
#5. Intégrer à Home Assistant
Si votre objectif est de piloter une maison connectée à la voix, il n'est pas nécessaire de tout recoder. Home Assistant intègre nativement le pipeline « Assist », et Whisper comme Piper y sont branchables via des add-ons officiels — ils ont d'ailleurs été développés dans cet écosystème.
- 01Installer les add-ons voixDepuis Paramètres → Modules complémentaires, ajoutez « Whisper » et « Piper ». Home Assistant les fait tourner localement comme services STT et TTS.
- 02Créer un pipeline AssistDans Paramètres → Voix, créez un assistant : choisissez Whisper pour la reconnaissance, Piper (voix fr_FR) pour la synthèse.
- 03Brancher le LLM OllamaHome Assistant propose une intégration « Ollama » comme agent de conversation. Renseignez l'URL http://localhost:11434 et votre modèle pour remplacer l'analyse d'intention par défaut.
- 04Choisir un point d'entrée vocalUn satellite ESP32 (Voice PE), un ancien téléphone ou l'appli mobile servent de micro/haut-parleur dans les pièces.
#Dépannage
- Whisper transcrit dans la mauvaise langue
- Forcez language='fr' dans transcribe(). Sans ça, une phrase courte peut être détectée comme de l'anglais.
- Aucun son en sortie
- Vérifiez le périphérique de sortie de sounddevice (sd.query_devices()) et que le samplerate passé à sd.play correspond bien à voix.config.sample_rate.
- Le micro n'enregistre rien
- Testez sd.query_devices() pour repérer le bon index d'entrée, et vérifiez les permissions micro (macOS) ou la source PipeWire/PulseAudio (Linux).
- Réponses trop longues et illisibles
- Renforcez la consigne de brièveté du prompt système et baissez num_predict. Un LLM verbeux ruine l'expérience vocale.
- Latence qui monte au fil de la conversation
- L'historique gonfle le contexte. Tronquez-le aux N derniers messages.
- Ollama recharge le modèle à chaque question
- Augmentez OLLAMA_KEEP_ALIVE (par ex. à 30m) pour garder le modèle en VRAM entre les tours.
#Pour aller plus loin
Votre assistant vocal repose sur un LLM local bien choisi et bien réglé. Ces guides du site complètent la mise en place :
- Whisper + Ollama : transcription et résumé
- Pour approfondir la partie audio et traiter des fichiers longs plutôt que du temps réel.
- LLM local pour la domotique
- Pour relier votre assistant à Home Assistant et piloter la maison à la voix, en préservant la vie privée.
- Q4, Q5, Q8 : quelle quantification choisir
- Pour arbitrer entre qualité de réponse, vitesse et VRAM selon votre GPU.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.