Cas client · Brique IA produit

Construire la brique IA de Reezet : comprendre, mémoriser et recommander

Sur Reezet, nous avons pris en charge le backend IA d'Izzy. Le travail couvre la conversation en streaming, les sorties structurées, la mémoire sélective, l'extraction prudente de signaux et les recommandations de contenus.

Le point le plus sensible était simple : le système devait pouvoir laisser une valeur vide lorsque la conversation ne permettait pas de conclure.

Architecture de la brique IA personnalisée de Reezet, de la conversation aux recommandations

Le contexte

Le besoin côté produit

Reezet est une application de bien-être. Côté utilisateur, l'expérience repose sur une conversation avec Izzy, une continuité entre les échanges et des contenus adaptés.

Derrière cette interface, plusieurs contraintes se croisent. La réponse doit arriver vite. Le contexte utile doit être retrouvé sans rejouer tout l'historique. Les informations extraites doivent garder une structure stable. Et une formulation vague ne doit jamais être transformée en certitude psychologique.

Le périmètre de Tensoria porte sur le backend et les briques IA d'Izzy, pas sur la totalité de l'application Reezet.

Limite produit explicite : Izzy ne pose pas de diagnostic médical ou psychologique et ne remplace pas un professionnel de santé. Cette limite intervient dans les instructions et dans la manière d'extraire les signaux.

Le problème d'architecture

Le problème technique à résoudre

Il fallait transformer une conversation libre en données utilisables, sans ralentir l'échange et sans inventer une précision absente du texte.

01

Conversation fluide

Afficher la réponse progressivement et persister l'échange sans bloquer l'interface.

02

Données stables

Produire des objets typés que le backend peut valider, stocker et exposer par API.

03

Contexte durable

Garder les informations utiles dans le temps sans accumuler chaque détail ponctuel.

04

Qualité contrôlée

Comparer les versions et repérer les régressions sur des scénarios représentatifs.

Schéma des sorties structurées Reezet avec conversation, schéma Pydantic et contrôles

Structured outputs

Un contrat de données entre le LLM et l'application

Les analyses sont demandées à Gemini sous forme de JSON conforme à des schémas Pydantic. Chaque schéma décrit les champs, les types, les énumérations, les objets imbriqués et les bornes autorisées.

Le backend récupère une réponse parsée plutôt qu'un paragraphe à réparer. Il peut ensuite appliquer ses propres contrôles de cohérence avant de stocker ou d'exposer la donnée.

Un format valide n'est pas encore une valeur juste. Le schéma sécurise la syntaxe et une partie des contraintes ; les scénarios d'évaluation et les règles métier contrôlent la pertinence.

Comprendre les structured outputs et Pydantic →

La solution

Les briques mises en place

Conversation

Streaming et historique

La réponse est diffusée token par token avec SSE. L'historique et le contexte sont chargés en parallèle, puis les messages sont persistés à la fin du flux.

Extraction

Signaux structurés et abstention

Résumé, facettes et autres signaux restent à null quand l'échange ne permet pas de les inférer. Une valeur absente vaut mieux qu'un score plausible mais faux.

Mémoire

Retenir moins, mais mieux

La mémoire conserve des préférences, objectifs et éléments de contexte durables. Les émotions et événements ponctuels sont exclus ; les informations contredites peuvent être remplacées.

Profil

Personnalisation explicite

Le profil est généré depuis l'onboarding, utilisé par le chat, puis peut être raffiné à partir du retour de l'utilisateur. La personnalisation reste explicite et ne dépend pas d'un réentraînement automatique.

Contenus

Ingestion vidéo structurée

Une vidéo ou sa transcription est analysée pour extraire titre, thème, type, description et publics cibles. Les contenus sont ensuite vectorisés et indexés dans Qdrant.

Recommandation

Recherche par le sens

Les thèmes de la conversation deviennent une requête vectorielle. Un seuil de pertinence filtre les résultats et des contenus de repli évitent une liste vide lorsque le signal est insuffisant.

Orchestration

Séparer la réponse des traitements de fond

Après la conversation, l'analyse structurée, la mise à jour de la mémoire et la recherche de contenus sont lancées en parallèle. Elles n'allongent pas artificiellement le temps avant le premier mot affiché.

Chaque tâche expose un état explicite : en attente, terminée ou échouée. Les appels modèles sensibles disposent de reprises automatiques. Si une analyse échoue, le système ne transforme pas cet échec en donnée plausible.

01

Répondre

Streaming de la réponse visible.

02

Enrichir

Analyse, mémoire et recommandations en parallèle.

03

Contrôler

Schémas, cohérence et abstention.

04

Exposer

API stable et statuts de traitement lisibles.

Évaluation LLM

Comment les versions ont été évaluées

La boucle d'évaluation a accompagné les itérations sur les prompts et les schémas : jouer des scénarios de conversation, inspecter les sorties structurées, corriger, puis rejouer les mêmes cas.

Les critères ne se résument pas à la qualité rédactionnelle. Il faut vérifier le respect du rôle d'Izzy, l'abstention quand le signal manque, la cohérence entre champs, la mémoire d'une conversation à l'autre et la pertinence des contenus proposés.

Nous ne publions pas de taux de précision. Aucun jeu de référence ni résultat quantitatif consolidé dans le projet ne permet de soutenir honnêtement un chiffre public.

Construire une évaluation LLM reproductible →

Grille de contrôle

  • Rôle : la réponse reste dans le périmètre d'un compagnon de bien-être.
  • Structure : les sorties respectent le contrat attendu par l'API.
  • Prudence : les cas ambigus restent vides au lieu d'être surinterprétés.
  • Mémoire : les informations conservées sont durables et non contradictoires.
  • Recommandation : les contenus restent reliés au contexte exprimé.
  • Tests de régression : une amélioration locale ne doit pas dégrader les autres scénarios.

Les arbitrages

Les erreurs à éviter

Forcer une valeur partout

Un modèle finit par convertir un indice faible en certitude. Le schéma doit accepter explicitement null, et les consignes doivent expliquer quand l'utiliser.

Tout calculer avant de répondre

La mémoire et les recommandations n'ont pas besoin de retarder le premier token. Le flux visible et les traitements de fond doivent être découplés.

Accumuler une mémoire sans filtre

Une mémoire qui ne fait qu'ajouter devient longue et contradictoire. Elle doit savoir ignorer le ponctuel, actualiser et oublier.

Confondre format et vérité

Pydantic peut valider un entier entre 0 et 10. Il ne peut pas décider seul si cet entier correspond réellement à la conversation.

Le résultat vérifiable

Ce qui est effectivement livré

Le résultat présenté ici est vérifiable dans le code. Nous ne publions pas encore de métriques d'usage, d'adoption ou d'impact métier, car elles ne sont pas consolidées.

  • Chat streaming Réponse progressive et historique persistant.
  • Sorties typées Schémas Pydantic et parsing JSON.
  • Mémoire sélective Contexte durable et actualisable.
  • Profil raffiné Onboarding et feedback utilisateur.
  • Recherche vectorielle Embeddings OpenAI et Qdrant.
  • Résilience Retries, fallbacks et statuts explicites.

Questions fréquentes

Intégrer et évaluer une IA dans un produit

La brique IA doit être isolée derrière une API stable. L'application lui transmet un contexte contrôlé ; le service IA gère les modèles, les schémas de sortie, la mémoire, les erreurs et l'évaluation. Cette séparation permet de faire évoluer les modèles sans réécrire tout le produit.
Les structured outputs imposent les champs, les types, les valeurs autorisées et les bornes attendues. Ils stabilisent le contrat entre le modèle et l'application. Ils garantissent la forme de la réponse, mais pas sa justesse sémantique, qui doit être évaluée séparément.
On peut combiner un profil utilisateur, une mémoire sélective, les résumés des échanges et une recherche sémantique dans des contenus existants. Le modèle reçoit ainsi le bon contexte à chaque requête sans entraînement spécifique ni réentraînement automatique.
Il faut construire des scénarios représentatifs, définir des critères par composant, comparer les sorties et rejouer les mêmes cas après chaque modification. Pour Reezet, la boucle a notamment porté sur le respect du rôle, l'abstention quand l'information manque, la stabilité des structures, la mémoire et la pertinence des recommandations.
Non. Reezet présente Izzy comme un compagnon de bien-être et de connaissance de soi. Il ne pose pas de diagnostic et ne remplace pas un psychologue, un médecin ou un autre professionnel de santé.

Votre produit comporte une brique IA ?

Vous développez une fonctionnalité IA dans une application ?

Nous pouvons cadrer son architecture, ses sorties structurées, sa mémoire, ses recommandations et son évaluation.