Visión ejecutiva
El tutor IA de Studeia no es ChatGPT en un iframe. Es un sistema pedagógico construido para la educación en línea:
Mensaje del alumno
↓
1. StudentModelService → carga ConceptMastery (bayesiano), misconceptions, historial de quizzes
↓
2. RetrievalAgent → búsqueda RAG tenant-scoped, boost por áreas débiles en quizzes
↓
3. PedagogicalAgent → selecciona estrategia (5 opciones) basado en mastery
↓
4. Orquestrador → construye prompt enriquecido (mastery + misconceptions + RAG context)
↓
5. LLM (Vercel AI SDK) → streaming, con fallback Claude → GPT → Grok → Gemini
↓ tras la respuesta (after())
6. EvaluationAgent → clasifica misconceptions (Haiku, $0.001)
7. ContentAgent → pre-genera ejercicio de follow-up
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 un feedback loop para que el sistema aprenda
- SupervisorAgent garantiza seguridad
Estrategias pedagógicas
PedagogicalAgent selecciona una de 5 estrategias basándose en 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 mediante PedagogicalConfig (a nivel de tenant), 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(modos: full | incremental)- Itera las 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 de overlap, preserva estructura)
- Embeddings mediante Voyage AI (1024 dims, fallback OpenAI)
- Metadata en cada chunk:
{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } autoSyncRag: truereingiere 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 URGENTE
- 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 5 veces en 30s, salta al fallback hasta 60s.
Limitaciones
- El text-to-speech de salida y el avatar visual del tutor están disponibles como experiencias opt-in.
- La entrada por voz/STT (dictado) ya está implementada en B2B y el avatar en tiempo real (HeyGen/D-ID vía WebRTC) está disponible por curso; siguen en el roadmap la conversación bidireccional por voz (STT en bucle con el avatar) y la nota automática de pronunciación.
- 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 regression en la evidence.