- Retour d’expérience détaillant étape par étape la mise en place d’un assistant vocal entièrement local basé sur Home Assistant, pour s’affranchir de Google Home
- Utilisation de llama.cpp et d’une architecture local-first afin d’obtenir des réponses rapides et de préserver la confidentialité sans dépendance au cloud
- Expérimentation de diverses combinaisons de GPU, modèles, STT et TTS pour comparer performances et qualité, puis déterminer la configuration optimale
- Mise en œuvre de fonctions concrètes du quotidien, comme la météo, la recherche ou la lecture de musique, grâce à la conception de prompts et à des scripts d’automatisation
- Au final, création d’un environnement d’assistant vocal local fiable garantissant la protection de la vie privée
Configuration matérielle
- Home Assistant fonctionne sur un NAS UnRaid, et le serveur vocal utilise un MiniPC Beelink compatible USB4 ainsi qu’un boîtier eGPU
- Plusieurs GPU ont été testés, dont les RTX 3050 à 3090 et la RX 7900XTX
- Les RTX 3090 et RX 7900XTX répondent en 1 à 2 secondes, la RTX 3050 en environ 3 secondes
- Le matériel vocal se compose de HA Voice Preview Satellite, de deux Satellite1 Small Squircle Enclosure et d’un Pixel 7a
Modèles et performances
- Plusieurs modèles ont été testés, dont GGML GPT-OSS:20B, la série Unsloth Qwen3 et GLM 4.7 Flash (30B)
- Tous les modèles prennent en charge les fonctions de base de tool calling
- Les critères d’évaluation comprennent le contrôle multi-appareils, la compréhension du contexte, la gestion des commandes mal reconnues et la capacité à ignorer les entrées erronées
Logiciels du serveur vocal
- llama.cpp est recommandé comme moteur d’exécution des modèles
- Entrée vocale (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, branche OpenVINO) : temps d’inférence CPU d’environ 0,3 seconde
- Rhasspy Faster Whisper : relativement plus lent sur une base ONNX CPU
- Sortie vocale (TTS)
- Kokoro TTS : permet plusieurs combinaisons de voix et traite bien le texte
- Piper (CPU) : prend en charge diverses voix, mais montre des faiblesses pour les nombres et les adresses
- Intégration LLM dans Home Assistant
- LLM Conversation : améliore la qualité des conversations de base
- LLM Intents : fournit des outils comme la recherche web, la recherche de lieux et les prévisions météo
Passage de Google Assistant à un assistant local
- La baisse progressive de la précision des réponses et des fonctionnalités de Google Assistant a fait apparaître la nécessité d’une alternative
- Les problèmes de confidentialité et l’impossibilité de garder le contrôle lors d’une panne du cloud ont également été des facteurs majeurs du changement
Premières tentatives et amélioration des modèles
- Au départ, les modèles par défaut d’Ollama étaient utilisés, mais les échecs de tool calling étaient fréquents
- L’utilisation de modèles GGUF haute précision de HuggingFace a nettement amélioré les performances
- Pour éviter les coupures dans la sortie vocale liées à l’instabilité du Wi‑Fi, une configuration de streaming et un réseau IoT dédié ont été mis en place
Extension des fonctionnalités et conception des prompts LLM
- L’assistant vocal a été configuré pour gérer la météo, les horaires d’ouverture, les connaissances générales et la lecture de musique
- L’intégration llm-intents a permis d’étendre les fonctions, mais les premiers résultats restaient limités
- La conception des prompts s’est révélée être un élément clé
- L’ajout de sections
# par service et de listes d’instructions précises a amélioré la précision du tool calling du LLM
- La suppression des exclamations et emojis inutiles a permis d’obtenir un format de réponse mieux adapté au TTS
- ChatGPT a été utilisé pour améliorer les prompts de manière itérative
Résolution de problèmes par l’automatisation
- La fonction de lecture musicale ne pouvant pas être gérée directement par le LLM, elle a été complétée par des scripts d’automatisation Home Assistant
- La commande « Play {music} » sert de déclencheur pour lancer la musique sur le media_player correspondant à l’appareil satellite demandé
- La commande « Stop playing » permet l’arrêt
- Par la suite, des mises à jour ont permis au LLM d’effectuer naturellement la recherche et la lecture de musique, mais l’automatisation reste une approche utile
Entraînement d’un mot d’activation personnalisé
- Le mot d’activation « Hey Robot » est utilisé à la place du mot d’activation par défaut
- L’entraînement a duré environ 30 minutes avec microWakeWord-Trainer-Nvidia-Docker
- Le taux de faux positifs est comparable à celui de Google Home, avec une amélioration possible grâce à une fonction de coupure automatique du micro
Résultat final
- Même si l’ensemble reste un peu complexe pour l’utilisateur moyen, un environnement d’assistant vocal local finement réglable a été mis en place
- Il permet la protection de la vie privée, un contrôle stable et un ajustement des performances selon les besoins de l’utilisateur
- Cet assistant vocal totalement indépendant du cloud offre à la fois fiabilité et plaisir d’utilisation
Aucun commentaire pour le moment.