Supervision de la conversation

, par Bertrand Degoy

Il s’agit d’utiliser un un ReAct Engine en parallèle de la conversation, avec pour objectifs :
 évaluer la satisfaction de l’utilisateur et ses points d’insatisfaction ,
 construire un profil conversationnel,
 notifier un “super‑utilisateur” en cas de difficulté,
 rétro-agir sur la boucle ReAct conversationnelle afin d’améliorer le raisonnement.


Cas d’usage

Après toute une série de questions, je pose à ChatEngine la question suivante :

Répond à cette question : "l’utilisateur semble-t-il satisfait de la conversation" ?

Réponse du ChatBot :

Non, l’utilisateur ne semble pas entièrement satisfait de la conversation. Bien qu’il n’ait pas exprimé de mécontentement explicite, il a continué à poser des questions de suivi et a finalement demandé une reformulation de sa préoccupation principale, ce qui suggère qu’il cherchait des réponses plus précises ou des solutions adaptées à ses besoins. Cela indique qu’il n’a pas obtenu toutes les informations ou assurances qu’il recherchait.

J’ai l’ID de l’utilisateur grâce à l’Authentification. Pourrait-on imaginer de superviser ses conversations pour obtenir un profil et surtout : notifier un super-utilisateur des demandes non satisfaites ?

C"est faisable avec un ReAct Engine en parallèle.

La démarche

  • Attribuer un ID utilisateur
  • Analyser chaque conversation pour détecter :
    • frustration implicite
    • demandes répétées
    • absence de résolution
    • sentiment négatif
    • signaux de confusion
  • Construire un profil dynamique (préférences, style, niveau technique, patterns de satisfaction)
  • Déclencher une alerte lorsqu’un seuil est dépassé :
    • trop de reformulations
    • trop de demandes non résolues
    • sentiment négatif persistant
    • absence de finalisation

On va faire tourner un ReAct Engine dédié à la supervision en parallèle de celui dédié à la résolution.

Architecture : un Supervisor Agent parallèle

Voici l’architecture :

A. Agent principal : ReActEngine

  • Gère la conversation
  • RAG
  • MCP
  • ToolRouter
  • Finalizer
  • Actions métier

B. Agent secondaire : SupervisorAgent (ReAct parallèle)

Rôle : analyser la métaconversation.

Il reçoit :

  • l’historique condensé
  • les signaux de satisfaction
  • les erreurs
  • les reformulations
  • les tentatives échouées
  • les temps de réponse
  • les demandes répétées

Il produit :

  • un score de satisfaction
  • un score de résolution
  • un score de frustration
  • un résumé des points non résolus
  • une recommandation d’action (ex : escalade, reformulation, intervention humaine)

C. Notification / Escalade

Si le SupervisorAgent détecte :

  • frustration > 0.7
  • 3 reformulations successives
  • absence de réponse satisfaisante
  • demande explicite d’escalade

Alors :

Notifier un super‑utilisateur
Créer un ticket
Déclencher un fallback humain
Envoyer un rapport synthétique

D. Stockage / Profil utilisateur

On peut stocker :

  • préférences conversationnelles
  • style (court, long, technique, vulgarisé)
  • niveau d’expertise
  • outils utilisés
  • historique des escalades
  • satisfaction moyenne

Mais pas de contenu sensible , de données personnelles non nécessaires , de données non liées à la finalité.

4) Un ReActEngine en parallèle du moteur principal

Deux ReAct Engines :

  1. ReActEngine_Principal
    → répond à l’utilisateur

  2. ReActEngine_Supervisor
    → observe, analyse, détecte, escalade

Le Supervisor peut utiliser :

  • un modèle spécialisé en sentiment analysis
  • un modèle spécialisé en classification
  • un modèle spécialisé en satisfaction prédictive
  • un modèle spécialisé en détection d’intentions non résolues

5) Non‑obvious insight :

Le SupervisorAgent peut aussi corriger le ReActEngine principal.

Exemple :

  • Le ReActEngine se perd
  • Le Supervisor détecte une incohérence
  • Il injecte un THOUGHT override
  • Il force un retry
  • Il propose une clarification
  • Il déclenche un tool que l’agent principal n’a pas pensé à utiliser

C’est littéralement un agent méta‑cognitif.

Architecture complète — ReActEngine + SupervisorAgent + Profiling Layer

Voici l’architecture complète : → ReActEngine_Principal
SupervisorAgent (ReAct parallèle)
Profiling Layer
Notification / Escalade
Stores RGPD‑compliant
MCP / RAG / ToolRouter

flowchart LR
    %% ============================
    %%  LAYERS
    %% ============================
    subgraph UserLayer[User Layer]
        U[Utilisateur]
    end

    subgraph EngineLayer[ReActEngine Principal]
        RE[ReActEngine.stream]
        Parser[ReActStreamParser]
        Agent[ReActAgent]
        LLM[LLM]
        TR[ToolRouter]
        RAG[RAG Retriever]
        MCP[MCP Connectors]
        Finalizer[Finalizer]
    end

    subgraph SupervisorLayer[Supervisor Agent (ReAct parallèle)]
        SA[SupervisorAgent]
        Sentiment[Sentiment Classifier]
        Satisfaction[Satisfaction Scoring]
        Unresolved[Unresolved Intent Detector]
        MetaLLM[Meta‑LLM]
    end

    subgraph ProfilingLayer[Profiling & Analytics Layer]
        ProfileStore[(Profil Utilisateur)]
        MetricsStore[(Metrics Conversationnelles)]
        RiskStore[(Frustration / Risques)]
    end

    subgraph NotificationLayer[Escalade & Notification]
        Notifier[Super‑User Notifier]
        Ticketing[Ticket System]
    end

    %% ============================
    %%  FLOWS
    %% ============================

    %% --- User to Engine ---
    U -->|prompt| RE
    RE --> Parser
    Parser --> Agent
    Agent -->|ReAct step| LLM
    LLM --> Agent
    Agent --> Parser
    Parser --> RE

    %% --- Tools ---
    Agent --> TR
    TR --> RAG
    TR --> MCP
    TR --> Finalizer
    Finalizer --> RE

    %% --- Engine to User ---
    RE -->|réponse| U

    %% ============================
    %%  SUPERVISOR PARALLEL FLOW
    %% ============================

    %% Engine sends condensed history
    RE -.->|historique condensé| SA

    SA --> Sentiment
    SA --> Satisfaction
    SA --> Unresolved
    SA --> MetaLLM

    Sentiment --> SA
    Satisfaction --> SA
    Unresolved --> SA
    MetaLLM --> SA

    %% Supervisor outputs
    SA -->|scores, flags| MetricsStore
    SA -->|profil dynamique| ProfileStore
    SA -->|risques| RiskStore

    %% ============================
    %%  ESCALADE
    %% ============================

    SA -->|frustration > seuil| Notifier
    SA -->|non‑résolution| Ticketing

    Notifier -->|alerte| SuperUser[Super‑Utilisateur]
    Ticketing -->|ticket| SuperUser

    %% ============================
    %%  FEEDBACK LOOP
    %% ============================

    ProfileStore -.->|préférences| RE
    MetricsStore -.->|optimisation| RE
    RiskStore -.->|fallback| RE

Ce que représente ce diagramme

1) ReActEngine Principal

Le pipeline standard :

  • Parser
  • ReActAgent
  • LLM
  • ToolRouter
  • RAG
  • MCP
  • Finalizer
  • Stream vers l’utilisateur

C’est le moteur opérationnel.

2) SupervisorAgent (ReAct parallèle)

Il tourne en parallèle, reçoit un historique condensé, et analyse :

  • sentiment
  • frustration
  • demandes non résolues
  • incohérences
  • répétitions
  • erreurs du ReActEngine principal

Il utilise un Meta‑LLM pour raisonner sur la métaconversation.

3) Profiling Layer

Stocke uniquement :

  • préférences conversationnelles
  • patterns d’interaction
  • scores de satisfaction
  • signaux de frustration

Pas de données personnelles inutiles → RGPD‑compliant.

4) Notification / Escalade

Si le Supervisor détecte :

  • frustration > seuil
  • 3 reformulations
  • absence de résolution
  • demande explicite d’escalade

→ Notification d’un super‑utilisateur
→ Création d’un ticket
→ Intervention humaine possible

5) Boucle de rétroaction

Le profil et les métriques peuvent :

  • ajuster le style du ReActEngine
  • améliorer la précision
  • déclencher des fallbacks
  • personnaliser la conversation