- Expérience avec Siri et Google Assistant. Ils peuvent contrôler des appareils, mais ne sont pas personnalisables et dépendent de services cloud.
- Envie d’apprendre quelque chose de nouveau et d’avoir quelque chose de cool à utiliser au quotidien. Le nouvel assistant devait avoir une personnalité sarcastique et mordante.
- Volonté que tout fonctionne en local. Sans aucune exception. Il n’y a aucune raison qu’une machine à café discute avec un serveur situé à l’autre bout du pays.
- Volonté d’aller au-delà de la simple fonction « allumer la lumière ». Souhait de pouvoir ajouter de nouvelles fonctions à l’avenir.
Architecture
- Utilisation d’un Protectli Vault VP2420 pour le pare-feu, le NIPS et le routage VLAN.
- Exposition de HomeAssistant à Internet pour permettre un usage à distance sans VPN. Pour cela, des mesures de sécurité extrêmes ont été prises.
- Choix d’un switch administrable TRENDnet TEG-3102WS pour obtenir du 2,5 gigabits à bas prix.
- Utilisation de deux RTX 4060Ti dans un ordinateur assemblé au coût le plus bas possible, avec la plupart des composants achetés sur eBay. La VRAM est importante pour fournir beaucoup de contexte au LLM.
- Utilisation d’un Minisforum UM690 pour exécuter HomeAssistant (et le WAF). Un Raspberry Pi 4 pourrait aussi convenir, mais de nombreux services tournent en même temps et Whisper est assez exigeant pour le CPU.
- Un énorme désordre de câbles Ethernet.
Moteur d’inférence
- Choix de vLLM, car l’objectif est de disposer d’un LLM générique utilisable aussi en dehors de HomeAssistant. Il est très rapide et c’est le seul moteur capable de servir plusieurs clients simultanément.
- Il prend en charge un serveur API compatible OpenAI, ce qui simplifie énormément les choses.
- Choix du modèle Mixtral de Mistral AI, dont le compromis entre VRAM et performances correspond parfaitement au besoin.
Quantification du modèle
- Impossible d’exécuter le modèle complet en fp32, donc choix d’une version quantifiée.
- La quantification dégrade légèrement la qualité, comme le MP3, mais améliore fortement les besoins en ressources.
- Il a fallu choisir entre GPTQ et AWQ, et comme tout l’état de la maison connectée devait être transmis au modèle, GPTQ a été retenu.
Intégration HomeAssistant
- Utilisation des add-ons Whisper et Piper fournis par défaut dans HomeAssistant OS, mais téléchargement d’un modèle vocal GlaDOS personnalisé depuis HuggingFace.
- HomeAssistant dispose déjà d’une intégration OpenAI, mais elle ne permet pas de contrôler les appareils et ne propose pas de réglage
base_url pour la forcer à parler à un faux serveur OpenAI au lieu des serveurs OpenAI, donc toute son extensibilité n’a pas été utilisée.
- Une intégration personnalisée a été trouvée, mais il était clair que le logiciel ne fonctionnait pas ainsi. Après l’installation, deux autres problèmes sont apparus.
Résolution des problèmes
- Mixtral utilise un template de chat inhabituel. Il n’accepte pas les system prompts et lève une exception s’il en détecte un.
- vLLM ne prend pas en charge l’API de function calling d’OpenAI. Et même si c’était le cas, il faudrait exécuter un modèle spécialement conçu pour le function calling.
- Pour corriger Mixtral, le template de chat a été modifié afin d’accepter un « system prompt ». Librechat a été utilisé comme interface pour que le system prompt fonctionne correctement.
Sortie JSON
- Même si le modèle ne peut pas appeler de fonctions, on peut lui demander de produire du JSON, puis l’exécuter.
- L’intégration personnalisée a été forkée afin d’ajouter la possibilité d’exécuter des services HomeAssistant en JSON.
Prompt GlaDOS
- Le prompt GlaDOS a été modifié pour être utilisé dans l’assistant personnel.
- Un problème est apparu : le modèle aime trop produire du JSON. Même pour des questions simples, il renvoie du JSON essayant d’appeler un service.
Solution
- Il lui a été demandé d’insérer un texte connu lorsque l’utilisateur demande une action. Le choix s’est porté sur "$ActionRequired".
- Le problème a été résolu en filtrant cela dans le fork.
Prompt final
- Le prompt initial a été mis à jour avec davantage d’appareils et moins d’entités inutiles.
- Il a été encouragé à ne pas effectuer d’action lorsqu’aucune demande explicite n’est faite.
- Après plusieurs essais, le résultat est devenu presque parfait (un peu lent à cause de la limitation du bus mémoire des 4060Ti).
Avis de GN⁺
- Ce projet peut être particulièrement intéressant pour les personnes qui accordent de l’importance à la confidentialité et à une expérience utilisateur personnalisée.
- Utiliser un LLM exécuté en local pour contrôler une maison connectée offre de grands avantages en matière de sécurité des données et de rapidité de réponse.
- Le fait que l’utilisateur construise et personnalise lui-même le système constitue un excellent exemple de promotion de l’apprentissage technique et de la culture DIY.
2 commentaires
C’est bien structuré, donc j’ai pris plaisir à le lire.
Comme Home Assistant prévoit d’ajouter des fonctionnalités LLM, cela devrait devenir encore plus simple à utiliser à l’avenir.
Même sur une chaîne YouTube de décoration intérieure que je regarde, ils disaient qu’ils allaient créer des produits IoT ; ce serait encore plus intéressant s’ils réfléchissaient dès le départ à permettre d’utiliser ce genre de chose dans ce type d’endroits également.
Avis sur Hacker News
Avis du fondateur de Home Assistant :
Expérience d’un autre utilisateur :
Utilisateur ayant testé des LLM locaux :
Retour d’un utilisateur de Home Assistant :
Question sur le réseau de micros :
Questions sur le matériel et la configuration :
Demande d’informations supplémentaires sur le choix du micro et l’implémentation de la reconnaissance vocale :
Expérience d’un utilisateur ayant utilisé l’API OpenAI :
Question sur la configuration réseau :