← Todos os cases

Produção · empresa de educação

Correção de atividades em escala

Arquitetura de pipeline assíncrono em NestJS com BullMQ que sincroniza submissões do LMS, envia cada uma para correção com LangChain e devolve nota e feedback ao Moodle.

Papel
Tech lead · arquitetura e desenvolvimento
Status
Em produção
Stack
  • TypeScript
  • NestJS
  • BullMQ
  • Redis
  • PostgreSQL
  • MongoDB
  • LangChain
  • Moodle
  • GCS
  • WebSocket
cron / manual~140 mil submissões/mêsLMS(Moodle)job daatividadesincronizajobs porsubmissão3 tentativas · backoff· dedupe · reenfileiraserviço PythonLangChainnota +feedbackstatus +resultadoeventos +duraçõesWebSocket~140 mil submissões/mês~99% menos custo por atividade vs. correção humana (estimativa)ROI estimado em ~3.000%

Problema

Corrigir atividades em volume, com critério consistente, dentro do LMS que alunos e professores já usam — sem perder submissões quando um serviço externo falha ou demora.

Dados disponíveis

As submissões chegam do LMS como arquivo ou texto online, com metadados de atividade, oferta e organização. Os arquivos ficam no Google Cloud Storage.

Decisões de arquitetura

Pipeline em etapas, em filas

Um job por atividade sincroniza as submissões e cria um job por submissão. Cada etapa — arquivo, análise, integração — roda em workers BullMQ, fora do request.

Falhar sem perder trabalho

Jobs de análise com até três tentativas e backoff exponencial, deduplicação por resposta e estado por submissão, o que permite reenfileirar o que ficou parado.

A IA num serviço separado

O NestJS orquestra; a correção com LangChain roda num serviço Python próprio, chamado por HTTP. Um lado escala a fila; o outro evolui o modelo e os critérios.

Viabilidade medida contra a alternativa real

O custo por atividade corrigida foi comparado ao da correção humana, que é o que o produto substitui.

Implementação

  • Disparo por cron ou manual → job da atividade → sincronização das submissões com o LMS.
  • Jobs BullMQ por submissão: download do arquivo, envio ao serviço de correção e persistência do resultado.
  • Nota e feedback gravados de volta no Moodle.
  • Eventos e durações de cada execução guardados para dashboards operacionais; progresso notificado via WebSocket.

Resultado

  • ~140 milsubmissões corrigidas por mês
  • ~99%menos custo por atividade corrigida vs. correção humana · estimativa
  • ~3.000%de ROI · estimativa

Redução de custo e ROI são estimativas internas em comparação com a correção humana.

Limitações e aprendizados

  • A correção em si é uma cadeia LangChain simples; o trabalho difícil está na orquestração, na resiliência e na integração com o LMS.
  • Redução de custo e ROI são estimativas, não valores auditados; não detalho aqui a fórmula nem o período.
  • Critérios de correção e dados de alunos ficam de fora por confidencialidade.
Próximo caseTriagem de documentos antes do OCR →