Documentation

Démo de l’assistant domotique

Code d’exemple : un assistant domotique qui utilise TypeSafe pour évaluer les demandes des utilisateurs.

Vois-la en action

Comment ça marche

Fan-out spéculatif

Le patron principal démontré ici est le fan-out spéculatif. Chaque demande utilisateur est évaluée contre une longue liste de questions, dont beaucoup finiront par être sans rapport pour la plupart des demandes.

Considérons la demande utilisateur suivante :

« Éteins toutes les lumières de la maison »

C’est une demande très simple, et notre code n’aura besoin de considérer que les réponses aux questions suivantes :

  • « Quelle catégorie de demande est-ce ? » (commande domotique)
  • « Quel domaine cette demande cible-t-elle ? » (toute la maison)
  • « Quel type d’appareil cette demande cible-t-elle ? » (lumières)
  • « Quelle action faut-il appliquer aux lumières ? » (éteindre)

Remarque que la dernière question est écrite en supposant que l’utilisateur donne un ordre aux lumières, et nous la posons avant de savoir ce que l’utilisateur demande réellement. C’est ce que nous appelons une « question spéculative » — nous la posons avant même de savoir si elle est pertinente, ce qui nous permet d’évaluer toutes les questions en parallèle et de nous appuyer sur le code pour filtrer les résultats sans rapport après coup. C’est un patron clé pour construire des systèmes capables de traiter une grande variété de demandes utilisateur avec un seul ensemble de questions.

La mauvaise façon : les appels d’API séquentiels

La mauvaise façon de faire serait de séparer les questions en plusieurs appels d’API, en attendant de poser les questions seulement une fois que tu es sûr d’avoir besoin de la réponse :

  • « Quelle catégorie de demande est-ce ? » (commande domotique)

Puis, seulement une fois que tu sais que c’est une commande domotique :

  • « Quel domaine cette demande cible-t-elle ? » (toute la maison)
  • « Quel type d’appareil cette demande cible-t-elle ? » (lumières)

Puis, seulement une fois que tu sais que ça cible les lumières :

  • « Quelle action faut-il appliquer aux lumières ? » (éteindre)

Cette approche optimise pour un nombre minimal de questions, mais elle finit par être bien plus lente et plus coûteuse que de regrouper toutes les questions en un seul appel d’API initial.

Association de TypeSafe et d’un LLM

Cette démo montre aussi comment TypeSafe peut être associé à des LLM pour gérer un système qui demande parfois une étape de génération de chaînes :

Diviser une demande utilisateur composée : L’une des questions de cette démo est une question Noul qui identifie si la demande utilisateur réclame plus d’une action distincte. Si c’est vrai, le système utilise un LLM pour diviser la demande en une liste de commandes atomiques. Les demandes divisées sont ensuite évaluées individuellement par TypeSafe.

Replier sur un LLM conversationnel : Quand TypeSafe détermine que la requête utilisateur est une demande d’information générale ou de conversation, le système appelle un LLM pour générer une réponse libre. Cela permet à un système interactif de traiter les demandes au comportement déterministe connu de façon rapide et économique, tout en gardant la souplesse qu’apporte un LLM génératif en cas de besoin. La réponse initiale de TypeSafe est si rapide comparée à celle du LLM qu’elle ajoute une latence négligeable au système global.

Lance-la toi-même

Cette démo est une application monopage simple en Vite/React qui utilise l’API TypeSafe pour évaluer les demandes utilisateur. Le code source complet sera disponible sur GitHub à la sortie. Son README contient des instructions pour lancer la démo en local et un aperçu des morceaux du code source responsables de chaque partie de la démo.