Vue d'ensemble
Le tuteur IA de Studeia n'est pas ChatGPT dans une iframe. C'est un système pédagogique conçu pour la formation en ligne :
Message de l'apprenant
↓
1. StudentModelService → charge ConceptMastery (bayésien), misconceptions, historique de quiz
↓
2. RetrievalAgent → recherche RAG limité au tenant, boost sur les zones faibles aux quiz
↓
3. PedagogicalAgent → sélectionne la stratégie (5 options) selon la maîtrise
↓
4. Orchestrateur → construit le prompt enrichi (maîtrise + misconceptions + contexte RAG)
↓
5. LLM (Vercel AI SDK) → streaming, avec basculement Claude → GPT → Grok → Gemini
↓ après réponse (after())
6. EvaluationAgent → classifie les misconceptions (Haiku, $0.001)
7. ContentAgent → pré-génère un exercice de suivi
8. SupervisorAgent → modère (5 niveaux de sévérité, 8 catégories)
Pourquoi multi-agent plutôt qu'un seul appel LLM
Appel unique :
- Sans mémoire de l'apprenant → répète des explications déjà données
- Sans connaissance des performances aux quiz → traite un apprenant faible comme un fort
- Sans modération → risques de jailbreak, hors-sujet, contenu inapproprié
- Sans RAG → invente des faits sur le cours
Multi-agent :
- StudentModel garantit une personnalisation réelle
- RetrievalAgent garantit l'ancrage dans le contenu du cours
- PedagogicalAgent garantit l'adéquation de la stratégie
- EvaluationAgent garantit une boucle de rétroaction pour l'apprentissage du système
- SupervisorAgent garantit la sécurité
Stratégies pédagogiques
PedagogicalAgent sélectionne l'une des 5 stratégies en fonction de mastery (probabilité de maîtrise) :
| Maîtrise | Stratégie | Comportement |
|---|---|---|
| < 0.3 | direct_instruction | Explication claire, exemples concrets, pas à pas |
| 0.3-0.5 | scaffolding | Indices progressifs, questions guidées simples |
| 0.5-0.7 | socratic | Questions menant à la découverte |
| 0.7-0.9 | guided_practice | Exercices avec retour, application pratique |
| > 0.9 | challenge | Problèmes complexes, connexions entre concepts |
Les seuils sont configurables par l'administrateur via PedagogicalConfig (niveau tenant), avec surcharge par domaine.
Ajustement selon les performances aux quiz
Si maîtrise élevée (chat) + score faible au quiz → « compréhension superficielle » → ajustement DOWN de la stratégie. Si maîtrise faible + score élevé au quiz → « apprenant discret » → ajustement UP. Taux de réussite < 40% → plafonnement au scaffolding (pas d'avancement vers le mode socratique).
RAG par tenant
Chaque cours peut être ingéré dans le RAG du tenant :
POST /api/institution/courses/[id]/rag-ingest(modes : full | incremental)- Itère sur les leçons publiées, extrait le texte par type (rich_text→suppression HTML, slides→éléments, quiz→question+explication, PDF→OCR via document-extractor)
- Découpage (800 tokens, 200 de chevauchement, préserve la structure)
- Embeddings via Voyage AI (1024 dimensions, basculement OpenAI)
- Métadonnées dans chaque morceau :
{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } autoSyncRag: trueréingère de manière incrémentielle lorsque l'administrateur modifie les leçons
Modération par l'agent Superviseur
SupervisorAgent (Haiku, arrière-plan) s'exécute après chaque tour de chat :
- 5 niveaux de sévérité : low, medium, high, critical, safety
- 8 catégories : langage inapproprié, violence, illégal, sexuel, off_topic, harassment, self_harm, jailbreak_attempt
- 3 infractions (LOW/MEDIUM en 7 jours) → quarantaine 48h
- safety ne punit JAMAIS — affiche un message d'accompagnement + ressources de crise + notifie l'administrateur en URGENT
- Coût : ~$0.001/tour (Haiku via generateDirect)
- Activation en cascade : Course.supervisorEnabled → Tenant.supervisorEnabled → activé par défaut
Détails dans Agent Superviseur.
Multi-fournisseur IA
Les composants LLM-backed du tuteur et des agents administratifs utilisent TenantTaskModelConfig. Les composants déterministes en TypeScript, comme Orchestrator/Retrieval/Pedagogical, ne sélectionnent pas de fournisseur :
| Agent | Méthode router | Fournisseur configurable ? |
|---|---|---|
| Tuteur (streaming chat) | router.stream() | Oui |
| Orchestrateur | TypeScript pur | N/A |
| RetrievalAgent | TypeScript pur | N/A |
| PedagogicalAgent | TypeScript pur | N/A |
| EvaluationAgent | router.generateDirect() | Oui |
| ContentAgent | router.generateDirect() | Oui |
| SessionSummarizer | router.generateDirect() | Oui |
| CourseReviewAgent | router.generate() | Oui |
| CourseAgent (CMS) | router.generate() + tools | Oui |
| GamificationAgent | router.generate() + tools | Oui |
| SupervisorAgent | router.generateDirect() | Oui |
Chaîne de basculement par niveau :
LLM rapide (Haiku): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash
LLM moyen (Sonnet): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro
LLM complexe (Opus): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro
Disjoncteur par fournisseur (état dans Redis) : en cas d'échec 5 fois en 30s, bascule vers le suivant pendant 60s.
Limitations
- La sortie text-to-speech et l'avatar visuel du tuteur sont disponibles comme expériences opt-in.
- L'entrée vocale/STT et l'avatar real-time via WebRTC/fournisseurs externes restent sur la feuille de route.
- Le RAG est par cours, et non par établissement entier. Chaque cours est ingéré séparément.
- Les misconceptions résolus peuvent régresser (re-détectés) — c'est attendu, le système enregistre la régression dans l'evidence.