Pular para o conteúdo

Tutor IA: pipeline multi-agente

Detalhes do pipeline multi-agente do tutor IA do Studeia: orchestrator, retrieval, pedagogical, evaluation, content, supervisor. Fallback automatico Claude/GPT/Grok/Gemini. RAG per-tenant. Detecção de misconceptions.

2026-05-23 10 min
Resposta curta

O tutor IA do Studeia executa 6 agentes em pipeline: Orchestrator coordena → StudentModelService carrega contexto do aluno → RetrievalAgent busca RAG → PedagogicalAgent escolhe estrategia → LLM responde (com fallback automatico) → EvaluationAgent + ContentAgent + SupervisorAgent rodam em background. 3 agentes sao TypeScript puro (zero custo LLM), 3 sao Haiku background (~$0.003 total). Personalizacao real baseada em ConceptMastery bayesiano.

Pipeline detalhado

Pre-LLM (sincrono, zero custo LLM)

  1. StudentModelService.getSnapshot(userId, courseId)

    • Carrega ConceptMastery (Beta distribution per concept)
    • Carrega misconceptions ativas/resolving (com evidence trail)
    • Carrega EpisodicMemory (o que funcionou antes)
    • Carrega quizContext (avgScore, passRate, totalAttempts, weakAreas)
    • Carrega ChatSession history (sliding window 10 msgs)
  2. RetrievalAgent.retrieve(query, studentModel)

    • Reformula query usando contexto (substitui "isso", "aquilo" por conceitos atuais)
    • Busca pgvector com filtros (tenantId, courseId)
    • Boost por areas fracas em quizzes (quizWeakAreas do studentModel)
    • Top-K com reranking semantico
  3. PedagogicalAgent.select(studentModel, query)

    • Avalia mastery medio + dominio especifico da query
    • Aplica ajustes (chat-quiz divergence, age, learning style)
    • Retorna estrategia + system prompt addition
  4. buildEnrichedPrompt(query, studentModel, ragChunks, strategy, misconceptions)

    • Monta system prompt com:
      • Estrategia pedagogica selecionada
      • RAG context (top-5 chunks com source attribution)
      • Misconceptions ativas (com instrucoes para abordar)
      • Recent quiz attempts (memoria inter-turno)
      • inline quiz trigger context (se houve quiz recente)

LLM principal (streaming, SSE)

router.stream(taskType: "chat_tutor", messages, options) resolve provider via TenantTaskModelConfig:

  • Claude (primary) → OpenAI → xAI Grok → Google Gemini (fallback chain)
  • Circuit breaker per provider (Redis state)
  • Metering middleware: rate limit + credit check + cost calculator
  • Streaming via Server-Sent Events para cliente

LLM pode emitir tool calls especiais:

  • [INLINE_QUIZ]{...}[/INLINE_QUIZ] — quiz interativo renderizado no chat
  • present_quiz tool call — formato Vercel AI SDK

Post-LLM (background via after(), fire-and-forget)

  1. EvaluationAgent.evaluate(turn, studentModel) — Haiku, ~$0.001

    • Classifica understanding: correct | partial | incorrect | unclear
    • Detecta StudentMisconception com:
      • source: "chat"
      • sourceSessionId
      • contextSnippet (max 500 chars)
      • concepts[] (mapped to ConceptMastery)
    • Atualiza ConceptMastery (Bayesian update via beta(alpha+success, beta+failure))
    • Chama MisconceptionResolutionService.checkAndTransition (state machine)
  2. ContentAgent.preGenerate(studentModel, conceptId) — Haiku, ~$0.001

    • Gera exercicio follow-up baseado em weak concepts
    • Armazena em Redis (TTL 30min) para servir no proximo turno
    • Reduz latencia percebida pelo aluno
  3. SessionSummarizer (a cada 10 turnos) — Haiku, ~$0.001

    • Resume historico longo
    • Substitui mensagens antigas no sliding window
    • Preserva insights pedagogicos relevantes
  4. SupervisorAgent.run(turn, courseContext) — Haiku, ~$0.001

    • Classifica severity (5 niveis) + category (8 tipos)
    • Cria AiSupervisorIncident se severity != "none"
    • Aplica strikes / quarantine / safety cooldown conforme regras

Configuracao por admin

TenantTaskModelConfig

Admin escolhe provider+model por tipo de tarefa:

chat_tutor          → Claude Sonnet 4.6 (ou GPT-4o, ou Grok-3, etc)
chat_evaluation     → Claude Haiku
chat_summarization  → Claude Haiku
chat_supervisor     → Claude Haiku
content_generation  → Claude Haiku
course_review       → Claude Sonnet
gamification_agent  → Claude Sonnet
course_agent        → Claude Sonnet

PedagogicalConfig

Configurabilidade pedagogica por tenant:

  • masteryThresholds: thresholds para mudar estrategia (default 0.3, 0.5, 0.7, 0.9)
  • domainOverrides: ajuste por dominio (ex: matematica usa scaffolding mais agressivo)
  • ageOverrides: ajuste por faixa etaria (crianca = direct_instruction mais frequente)
  • learningStyleOverrides: visual, auditivo, kinestesico

Prompt template customization

Admin institucional pode editar system prompt do tutor via PromptTemplate (no banco):

  • Por taskType (chat_tutor)
  • Por provider (Anthropic, OpenAI, Google, xAI — variantes otimizadas)
  • Por locale (pt-BR, en-US, es-ES, fr-FR)
  • Por tenant (ou null = global)
  • Por curso (override per-course)

Limitacoes tecnicas

  • Latencia first-token: 800-1500ms (incluindo pre-LLM pipeline)
  • Latencia total turno: 2-8s para resposta media (~300 palavras)
  • Context window: limitado pelo provider (Claude Sonnet 4.6 = 200K, GPT-4o = 128K)
  • Idiomas: tutor responde no idioma do aluno mas internamente o pipeline e bilingue (en/pt)
  • Imagens: tutor aceita imagens no input (multimodal Claude/GPT/Gemini) mas RAG e text-only
  • Voz: nao implementado (roadmap)

Veja tambem

FAQ

Quantos agentes IA o tutor usa?

6 agentes ativos: Orchestrator (TypeScript puro), RetrievalAgent (TypeScript puro), PedagogicalAgent (TypeScript puro), LLM principal (Claude/GPT/Grok/Gemini com fallback), EvaluationAgent (Haiku background), ContentAgent (Haiku background), SupervisorAgent (Haiku background). 3 sao deterministicos (sem custo LLM), 3 sao background fire-and-forget (custo ~$0.003 total por turno).

Quanto custa um turno completo do tutor?

Tipicamente $0.005-$0.05 por turno completo. Breakdown: LLM principal (Sonnet) $0.005-$0.04 + EvaluationAgent (Haiku) $0.001 + ContentAgent (Haiku) $0.001 + SupervisorAgent (Haiku) $0.001. Mensagens curtas em conceitos simples podem custar $0.001 (Haiku-only).

Posso desabilitar o tutor IA para um curso especifico?

Sim. Course.aiTutorEnabled (boolean, default true). Admin institucional toggle em /institution/courses/[id]/settings. Sidebar do aluno e Course sub-nav escondem 'Chat Tutor' quando desabilitado.

Veja tambem

Tutor IA: pipeline multi-agente | Studeia Docs