Visión ejecutiva
El tutor IA de Studeia no es ChatGPT en un iframe. Es un sistema pedagógico construido para e-learning:
Mensaje del alumno
↓
1. StudentModelService → carga ConceptMastery (bayesiano), misconceptions, quiz history
↓
2. RetrievalAgent → búsqueda RAG tenant-scoped, boost por áreas débiles en quizzes
↓
3. PedagogicalAgent → selecciona estrategia (5 opciones) según mastery
↓
4. Orquestador → construye prompt enriquecido (mastery + misconceptions + RAG context)
↓
5. LLM (Vercel AI SDK) → streaming, con fallback Claude → GPT → Grok → Gemini
↓ tras respuesta (after())
6. EvaluationAgent → clasifica misconceptions (Haiku, $0.001)
7. ContentAgent → pre-genera ejercicio de seguimiento
8. SupervisorAgent → modera (5 niveles de severidad, 8 categorías)
Por qué multi-agente vs single LLM call
Single call:
- Sin memoria del alumno → repite explicaciones ya dadas
- Sin awareness del rendimiento en quizzes → trata igual a un alumno débil que a uno fuerte
- Sin moderación → riesgos de jailbreak, off-topic, contenido inadecuado
- Sin RAG → inventa hechos sobre el curso
Multi-agente:
- StudentModel garantiza personalización real
- RetrievalAgent garantiza grounding en el material del curso
- PedagogicalAgent garantiza adecuación de la estrategia
- EvaluationAgent garantiza el feedback loop para que el sistema aprenda
- SupervisorAgent garantiza la seguridad
Estrategias pedagógicas
PedagogicalAgent selecciona una de 5 estrategias según el mastery (probabilidad de dominio):
| Mastery | Estrategia | Comportamiento |
|---|---|---|
| < 0.3 | direct_instruction | Explicación clara, ejemplos concretos, paso a paso |
| 0.3-0.5 | scaffolding | Pistas progresivas, preguntas guiadas simples |
| 0.5-0.7 | socratic | Preguntas que llevan al descubrimiento |
| 0.7-0.9 | guided_practice | Ejercicios con feedback, aplicación práctica |
| > 0.9 | challenge | Problemas complejos, conexiones entre conceptos |
Los umbrales son configurables por el admin vía PedagogicalConfig (tenant-level), con override por dominio.
Ajuste por rendimiento en quizzes
Si mastery alta (chat) + quiz bajo → "comprensión superficial" → nudge DOWN de estrategia. Si mastery baja + quiz alto → "alumno silencioso" → nudge UP. Pass rate < 40% → cap en scaffolding (no avanza a socratic).
RAG per-tenant
Cada curso puede ser ingerido en el RAG del tenant:
POST /api/institution/courses/[id]/rag-ingest(modes: full | incremental)- Itera clases publicadas, extrae texto por tipo (rich_text→HTML strip, slides→elements, quiz→question+explanation, PDF→OCR vía document-extractor)
- Chunking (800 tokens, 200 overlap, preserva estructura)
- Embeddings vía Voyage AI (1024 dims, fallback OpenAI)
- Metadata en cada chunk:
{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } autoSyncRag: truere-ingiere incrementalmente cuando el admin edita clases
Moderación por agente Supervisor
SupervisorAgent (Haiku, background) se ejecuta tras cada turno del chat:
- 5 niveles de severidad: low, medium, high, critical, safety
- 8 categorías: lenguaje inapropiado, violencia, ilegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt
- 3 strikes (LOW/MEDIUM en 7 días) → cuarentena 48h
- safety NUNCA penaliza — muestra acogida + recursos de crisis + notifica admin URGENT
- Costo: ~$0.001/turno (Haiku vía generateDirect)
- Habilitación en cascada: Course.supervisorEnabled → Tenant.supervisorEnabled → default ON
Detalles en Agente Supervisor.
Multi-provider IA
Los componentes LLM-backed del tutor y de los agentes administrativos usan TenantTaskModelConfig. Los componentes determinísticos en TypeScript, como Orchestrator/Retrieval/Pedagogical, no seleccionan provider:
| Agente | Método router | ¿Provider configurable? |
|---|---|---|
| Tutor (chat streaming) | router.stream() | Sí |
| Orchestrator | TypeScript puro | N/A |
| RetrievalAgent | TypeScript puro | N/A |
| PedagogicalAgent | TypeScript puro | N/A |
| EvaluationAgent | router.generateDirect() | Sí |
| ContentAgent | router.generateDirect() | Sí |
| SessionSummarizer | router.generateDirect() | Sí |
| CourseReviewAgent | router.generate() | Sí |
| CourseAgent (CMS) | router.generate() + tools | Sí |
| GamificationAgent | router.generate() + tools | Sí |
| SupervisorAgent | router.generateDirect() | Sí |
Cadena de fallback por tier:
LLM rápido (Haiku): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash
LLM medio (Sonnet): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro
LLM complejo (Opus): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro
Circuit breaker por provider (estado en Redis): si falla 5x en 30s, salta al fallback hasta 60s.
Limitaciones
- Text-to-speech de salida y avatar visual del tutor están disponibles como experiencias opt-in.
- Entrada por voz/STT y avatar real-time vía WebRTC/proveedores externos siguen en el roadmap.
- El RAG es por curso, no por institución completa. Cada curso se ingiere por separado.
- Los misconceptions resueltos pueden regresar (re-detectados) — esto es esperado, el sistema marca la regresión en la evidencia.