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).