bot WhatsApp > 2) Orchestration & Routage

voici un module Orchestration & Routage prêt à implémenter, avec logique, données, et exemples.

Orchestration & Routage (matière)

Objectif

Router chaque message vers 1 matière TP agricole (sur 10) avec un score de confiance. En cas d’incertitude, fallback : clarification ou top-2 matières.

Pipeline (en 8 étapes)

flowchart LR A[Message entrant] --> B[Pré-proc: langue, normalisation, lemmatisation] B --> C[Features: n-grams, keywords, embeddings] C --> D[Filtre méta-données: période/chapitre/promos] D --> E[Scoring hybride: règles + classifieur + sémantique] E --> F{Confiance >= seuil?} F -- Oui --> G[Matière cible + chapitres filtrés] F -- Non --> H[Fallback: question de précision ou Top-2] G --> I[Dispatch vers RAG de la matière] H --> I

1) Pré-traitement

  • Détection langue (FR/MG) + normalisation (lowercase, enlever ponctuation inutile).
  • Lemmatisation (fr, mg si dispo) + suppression mots vides.
  • Si audio → ASR → texte.

2) Extraction de features

  • Mots-clés par matière (regex/phrases) avec poids (ex. “goutte-à-goutte”, “débit L/h” → Irrigation).
  • N-grams TF-IDF (1–3).
  • Embeddings (multilingues) du message.
  • Entités rapides (plante, outil : tomates, motopompe, pièges jaunes).

3) Filtre par méta-données du cours

  • Réduit le champ selon période/chapitre en cours (semaine 3 = Semis + Irrigation, p.ex.).
  • Si l’étudiant est en L1-S1, exclut matières S2.

4) Scoring hybride (règles + ML + sémantique)

Score final par matière m :

score(m) = w1 * règles(m) + w2 * clf(m) + w3 * sémantique(m) + w4 * meta_boost(m)

  • règles(m) : somme de poids des mots-clés/regex déclenchés.
  • clf(m) : proba du classifieur léger (LogReg/SVM/DistilTiny) entraîné sur Q/R étiquetées.
  • sémantique(m) : similarité cosinus embedding(message) ↔ centroides(matière).
  • meta_boost(m) : +α si matière alignée avec la période/chapitre.

Poids conseillés (départ) : w1=0.35, w2=0.35, w3=0.2, w4=0.1 (à calibrer).

5) Seuils & décisions

  • Confiance = score(max) − score(deuxième).
    • Si score(max) ≥ 0.60 et Confiance ≥ 0.15 → router vers matière max.
    • Sinon → Fallback.

Fallback (2 modes)

A) Clarification courte (si ambigu)

“Tu parles plutôt de Irrigation (0,64) ou de Maraîchage (0,58) ?

Choisis : 1) Irrigation 2) Maraîchage”

  • Boutons WhatsApp interactifs.
  • Si pas de réponse → choisir top-1 mais réponse prudente + proposer switch.

B) Top-2 direct (si message urgent/impératif)

  • Interroger les 2 matières et fusionner : présenter 2 résumés courts + laisser l’étudiant cliquer sur la source qui l’intéresse (TP OdoLearn, vidéo).

Données & schémas utiles

A) Table des matières (extrait)

matiere_id | nom | keywords | chapitres_actifs ---------- | -------------- | ------------------------------- | ---------------- IRR | Irrigation | "goutte", "L/h", "aspersion" | S1-W2,W3 MAR | Maraîchage | "semis", "repiquage", "planche" | S1-W1..W6 SOL | Sols & fertil. | "compost", "NPK", "pH" | S1-W2..W4 ...

B) Exemple de règles (regex) — Irrigation

  • \b(goutte[- ]?à[- ]?goutte|drip)\b → +0.30
  • \b(\d+)\s?(l/?h|litres?/?h)\b → +0.15
  • \b(aspersion|tuyau PE|émetteurs?)\b → +0.10

C) Payload interne (ex.)

{ "user_id": "whatsapp:+261...", "lang": "fr", "text": "Comment régler le débit de mon goutte-à-goutte pour tomates ?", "features": { "keywords": ["goutte-à-goutte","débit"], "entities": ["tomates"] }, "scores": { "IRR": 0.71, "MAR": 0.58, "SOL": 0.22 }, "decision": { "route": "IRR", "confidence_gap": 0.13, "needs_clarification": true } }

Entraînement du classifieur léger

  • Données : 300–800 exemples par matière (questions courtes), FR + MG.
  • Modèle : Logistic Regression TF-IDF ou petit transformer distillé.
  • Validation : F1 ≥ 0.80 par matière ; tester drift mensuel (nouveaux termes).

Multilingue FR/MG

  • Dictionnaire de synonymes agricoles (FR⇄MG) injecté dans les règles.
  • Embeddings multilingues pour la composante sémantique.
  • Classifieur entraîné sur données mixtes (FR+MG) pour robustesse.

Journaux & KPI

  • Hit-rate routage correct (gold annotations enseignants).
  • Ambiguïtés (% nécessitant fallback).
  • Temps routage p95 < 100 ms.
  • Taux de switch matière post-réponse (< 10 %).
  • Couverture mots-clés (termes orphelins à ajouter aux règles).

Exemple de réponse Fallback (prête à copier)

  • FR :

    “Je peux traiter via Irrigation (0,64) ou Maraîchage (0,58). Tu vises le réglage du débit sur goutte-à-goutte (Irrigation) ou l’implantation des lignes autour des plants (Maraîchage) ?”
    Boutons : Irrigation / Maraîchage / Je ne sais pas

  • MG (simplifiée) :

    Irrigation sa Maraîchage no tianao ? Momba ny débit sa fametrahana tsipika rano?”

Intégration avec le RAG

  • Le router renvoie : matiere_id, filtres de chapitres (ex. S1-W3), mots-clés utiles (pour booster le retriever).
  • Le RAG de la matière n’interroge que :
    • OdoLearn (fiches TP pertinentes),
    • YouTube (tutoriels timestampés),
    • MOOC (séquences chapitre exact).