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), idées fausses, historique de quiz
↓
2. RetrievalAgent → recherche RAG tenant-scoped, boost sur les domaines faibles aux quiz
↓
3. PedagogicalAgent → sélectionne la stratégie (5 options) en fonction du mastery
↓
4. Orchestrateur → construit un prompt enrichi (mastery + idées fausses + contexte RAG)
↓
5. LLM (Vercel AI SDK) → streaming, avec fallback Claude → GPT → Grok → Gemini
↓ après réponse (after())
6. EvaluationAgent → classe les idées fausses (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 prise en compte des performances aux quiz → traite un apprenant faible comme un apprenant fort
- Sans modération → risques de jailbreak, hors-sujet, contenu inadapté
- Sans RAG → invente des faits sur le cours
Multi-agent :
- StudentModel garantit une personnalisation réelle
- RetrievalAgent garantit l'ancrage dans le matériel du cours
- PedagogicalAgent garantit l'adéquation de la stratégie
- EvaluationAgent garantit une boucle de feedback pour que le système apprenne
- SupervisorAgent garantit la sécurité
Stratégies pédagogiques
PedagogicalAgent sélectionne l'une des 5 stratégies en fonction du mastery (probabilité de maîtrise) :
| Mastery | Stratégie | Comportement |
|---|---|---|
| < 0.3 | direct_instruction | Explication claire, exemples concrets, étape par étape |
| 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 feedback, application pratique |
| > 0.9 | challenge | Problèmes complexes, connexions entre les concepts |
Les seuils sont configurables par l'administrateur via PedagogicalConfig (niveau tenant), avec un override par domaine.
Ajustement selon les performances aux quiz
Si mastery élevé (chat) + quiz faible → « compréhension superficielle » → stratégie revue à la baisse. Si mastery faible + quiz élevé → « apprenant discret » → stratégie revue à la hausse. Taux de réussite < 40% → plafonné à scaffolding (n'avance pas vers socratic).
RAG per-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 en chunks (800 tokens, 200 de chevauchement, préserve la structure)
- Embeddings via Voyage AI (1024 dims, fallback OpenAI)
- Métadonnées dans chaque chunk :
{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } autoSyncRag: trueréingère de manière incrémentale lorsque l'administrateur modifie des leçons
Modération par l'agent Supervisor
SupervisorAgent (Haiku, arrière-plan) s'exécute après chaque tour du 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'accueil + ressources de crise + notifie l'admin en URGENCE
- Coût : ~$0.001/tour (Haiku via generateDirect)
- Activation en cascade : Course.supervisorEnabled → Tenant.supervisorEnabled → par défaut ON
Détails dans Agent Supervisor.
IA multi-provider
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 provider :
| Agent | Méthode router | Provider configurable ? |
|---|---|---|
| Tuteur (streaming chat) | router.stream() | Oui |
| Orchestrator | 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 fallback 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
Circuit breaker par provider (état dans Redis) : en cas de 5 échecs en 30s, bascule sur le fallback pendant 60s.
Limitations
- La synthèse vocale en sortie et l'avatar visuel du tuteur sont disponibles en tant qu'expériences opt-in.
- La saisie vocale/STT (dictée) est implémentée en B2B et l'avatar en temps réel (HeyGen/D-ID via WebRTC) est disponible par cours ; la conversation vocale bidirectionnelle (STT en boucle avec l'avatar) et la note automatique de prononciation restent sur la feuille de route.
- Le RAG est par cours, pas par établissement entier. Chaque cours est ingéré séparément.
- Les idées fausses résolues peuvent régresser (re-détectées) — c'est attendu, le système marque la régression dans les preuves.