
27 août 2026
Mistral AI et Home Assistant : développer un assistant pour la maison
« Allume la lumière du salon. » Derrière cette phrase toute simple se cache un processus complexe : l'assistant doit comprendre la demande, identifier l'équipement concerné et exécuter la bonne action. Avec Mistral AI Conversation, j’ai développé une intégration Python qui relie les modèles de Mistral AI à Home Assistant, la plateforme domotique que j’utilise pour mon infrastructure personnelle.
Ce projet associe deux sujets qui m’intéressent : la domotique et l’intégration de services d’intelligence artificielle. Il permet d'interagir avec un modèle depuis Assist, l'assistant de Home Assistant, et de lui donner accès aux outils domotiques sélectionnés dans la configuration.
Du langage naturel à une action concrète
Prenons un exemple d’utilisation : demander à Assist d’allumer une lampe. Home Assistant transmet alors la conversation à mon intégration, qui prépare les messages et la description des outils disponibles pour Mistral. Le modèle peut alors répondre directement ou demander l’exécution d’un outil avec des paramètres, comme le nom de l’équipement à commander.
Ce mécanisme s’appelle le « tool calling », ou appel d’outils. Le modèle formule une demande structurée et Home Assistant reste chargé de la validation et de l’exécution. Le résultat est ensuite renvoyé vers Mistral pour qu’il puisse construire sa réponse à l’utilisateur. Le choix des API et des entités exposées se fait donc dans Home Assistant.

Cette séparation des responsabilités est au cœur du projet : Mistral interprète le langage, l’intégration adapte les échanges entre les deux systèmes et Home Assistant gère les équipements. Il est également possible de désactiver les API exposées pour n'utiliser que la conversation.
Une intégration pensée pour Home Assistant
J’ai utilisé le SDK Python officiel de Mistral et les mécanismes natifs de Home Assistant. Les appels réseau sont asynchrones : pendant que le service distant prépare sa réponse, Home Assistant peut continuer à traiter ses autres tâches. Le texte arrive progressivement, sous forme de flux, ce qui permet de commencer à l’afficher avant la fin de la génération.
La configuration passe par l’interface : clé API, modèle, instructions et outils accessibles. Plusieurs agents peuvent avoir leurs propres réglages sur un même compte. La découverte des modèles et de leurs capacités permet aussi de vérifier la compatibilité des options demandées, par exemple les images ou le raisonnement.
Gérer une réponse qui arrive par morceaux
Recevoir du texte progressivement est une chose ; reconstruire une demande d’action fiable en est une autre. Un appel d’outil peut arriver en plusieurs fragments, avec des paramètres JSON incomplets. Plusieurs appels peuvent également être entrelacés dans le même flux.
J’ai donc séparé cette logique dans un composant dédié. Celui-ci rassemble les fragments de chaque appel, reconstitue les paramètres et rejette les demandes mal formées avant leur exécution. Cette étape permet de concilier la souplesse d’un modèle de langage et les données structurées attendues par la domotique.
Les échanges sont également limités : au maximum 128 outils peuvent être déclarés et une requête ne peut pas dépasser 10 tours d’appels d’outils. Ces limites évitent qu’une demande ne déclenche une boucle sans fin. Elles ne garantissent toutefois pas qu’un modèle choisira toujours la bonne action.
Tester les cas difficiles, pas seulement la démonstration
Une intégration utile doit également réagir correctement en cas d'expiration de la clé API, de défaillance du réseau ou de réponse invalide. Le projet distingue ces différentes situations afin de proposer une réauthentification, de signaler une indisponibilité ou de remonter une erreur compréhensible.
Les tests automatisés simulent les réponses de Mistral, y compris les flux fragmentés et les appels d'outils. Un scénario vérifie notamment qu’un outil Home Assistant est bien appelé, puis que son résultat est réinjecté dans la requête suivante. Ces tests s’exécutent sans clé API réelle et sans piloter une installation physique.
GitHub Actions regroupe les contrôles de style et de typage Python, les tests avec un seuil de couverture des branches de 85 %, ainsi que les validations HACS et Hassfest propres à l’écosystème Home Assistant. Ces contrôles aident à repérer les régressions et complètent les essais sur une installation réelle.
Au-delà de la conversation
L’intégration propose également des tâches IA capables de produire des données structurées et accepte les images ou les PDF avec les modèles compatibles. Les fonctions vocales Voxtral permettent de convertir la parole en texte et de générer une réponse audio dans une chaîne Assist. Leur disponibilité dépend des capacités du modèle et des accès du compte Mistral.
Pour faciliter l'installation et les mises à jour, le projet est distribué via le catalogue HACS. Il s'agit d'une intégration communautaire indépendante, accompagnée d'une documentation et d'un historique des versions.
Un choix cloud à rendre explicite
Home Assistant et l’intégration tournent localement, mais le traitement par Mistral utilise une API distante. Les messages, l’historique pertinent, les outils exposés et leurs résultats sont transmis au service, de même que les fichiers ou l’audio utilisés par les fonctions correspondantes. Il faut donc tenir compte de la connexion Internet, des données envoyées et des coûts d’API.
Je recommande de limiter les équipements exposés au besoin réel, particulièrement lorsqu’une action touche à un accès physique. L’intérêt de ce projet est également de relier un service d’IA à un système existant tout en prenant en charge la configuration, les erreurs, les tests et la maintenance. C’est cette continuité entre le développement logiciel et l’exploitation qui m’intéresse.