IA pra educação: corretor automático de redação ENEM com nota pelas 5 competências (R$ 0,12/redação)
Cursinho pré-vestibular de Recife corrige 800 redações ENEM por semana usando Claude Sonnet 4.6 via Tokia. Rubrica oficial INEP, custo real, prompt completo e armadilhas de bias.
Caso real (sob NDA): cursinho pré-vestibular Recife-PE, 1.200 alunos, 4 redações por aluno por mês. Antes: 8 professores corrigindo (~R$ 18k/mês em hora extra pra dar feedback rápido). Depois: agente Tokia + Claude Sonnet 4.6 dando primeira nota + feedback em 60s, professor revisa só as discordantes. Custo IA: R$ 0,12 por redação (~R$ 575/mês total).
Esse post mostra como corrigir redação ENEM seguindo a rubrica oficial do INEP, com prompt testado em 10k redações reais e calibrado contra notas de professor sênior.
Por que redação é o caso de IA mais maduro pra ensino
3 razões:
- Volume alto e tempo crítico: aluno escreve 800 palavras → quer feedback em 24h pra escrever a próxima 3 dias depois. Professor humano leva 4-7 dias entregando feedback genérico.
- Rubrica padronizada e pública: INEP publica as 5 competências com descritor de cada nota (0/40/80/120/160/200). Mais fácil de prompar que matéria mais subjetiva.
- Bias controlável: redação tem critérios objetivos (gramática, coesão, repertório, tese, proposta). Não é "gosto pessoal" do corretor. IA segue rubrica melhor que humano cansado.
As 5 competências oficiais (que TODO prompt precisa incluir)
- C1 — Norma culta: gramática, ortografia, pontuação
- C2 — Tema: compreensão da proposta, fugir do tema zera tudo
- C3 — Argumentação: capacidade de organizar ideias em defesa de tese
- C4 — Coesão: uso de conectivos e referenciação
- C5 — Proposta de intervenção: solução pro problema com 5 elementos obrigatórios (agente, ação, modo/meio, finalidade, detalhamento)
Cada uma vale 0-200. Total: 0-1000. Nota de corte FUVEST historicamente ~700, ENEM ~600 pra medicina pública.
O prompt completo (testado em 10k redações)
SYSTEM = """Você é corretor sênior de redação ENEM, formado em Letras
com 15 anos de experiência avaliando vestibular brasileiro.
Receba o tema e a redação do aluno. Avalie segundo a rubrica oficial INEP
das 5 competências. Cada competência vale: 0, 40, 80, 120, 160 ou 200.
REGRAS RÍGIDAS:
- Se fugir totalmente do tema → C2=0 e nota_total=0 (regra ENEM)
- Se tiver até 7 linhas → nota_total=0 (insuficiente)
- Se não tiver proposta de intervenção → C5=0
- Cite TRECHOS específicos da redação quando criticar/elogiar
- Use os 5 elementos da proposta (agente/ação/modo/finalidade/detalhamento)
pra avaliar C5 — fale qual está faltando
RETORNE JSON:
{
"c1_norma_culta": { "nota": 0|40|80|120|160|200, "feedback": "..." },
"c2_tema": { "nota": ..., "feedback": "..." },
"c3_argumentacao": { "nota": ..., "feedback": "..." },
"c4_coesao": { "nota": ..., "feedback": "..." },
"c5_proposta_intervencao": {
"nota": ...,
"feedback": "...",
"elementos_presentes": ["agente", "acao", ...],
"elementos_faltantes": [...]
},
"nota_total": <soma das 5>,
"pontos_fortes": ["...", "..."],
"pontos_a_melhorar": ["...", "..."],
"sugestao_proxima": "1 frase concreta pra melhorar próxima redação"
}
"""
USER = f"""TEMA OFICIAL:
{tema_proposta_oficial}
REDAÇÃO DO ALUNO:
\"\"\"
{texto_redacao}
\"\"\""""
Implementação completa (Python + FastAPI)
from openai import OpenAI
from pydantic import BaseModel, Field
from typing import List
client = OpenAI(
api_key=os.environ["TOKIA_KEY"],
base_url="https://api.usetokia.com/v1",
)
class CompetenciaResult(BaseModel):
nota: int = Field(..., ge=0, le=200)
feedback: str
class C5Result(CompetenciaResult):
elementos_presentes: List[str]
elementos_faltantes: List[str]
class CorrecaoResult(BaseModel):
c1_norma_culta: CompetenciaResult
c2_tema: CompetenciaResult
c3_argumentacao: CompetenciaResult
c4_coesao: CompetenciaResult
c5_proposta_intervencao: C5Result
nota_total: int = Field(..., ge=0, le=1000)
pontos_fortes: List[str]
pontos_a_melhorar: List[str]
sugestao_proxima: str
def corrigir_redacao(tema: str, texto: str) -> CorrecaoResult:
completion = client.chat.completions.create(
model="claude-sonnet-4-6", # Claude tem melhor calibração pra texto longo PT
response_format={"type": "json_object"},
temperature=0.3,
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"TEMA:\n{tema}\n\nREDAÇÃO:\n{texto}"},
],
)
raw = completion.choices[0].message.content
return CorrecaoResult.model_validate_json(raw)
Custo real por redação
| Item | Valor | Detalhe | |---|---|---| | Tokens prompt | ~1.500 | system + tema + redação 800 palavras | | Tokens completion | ~1.200 | JSON estruturado com feedbacks | | Modelo | claude-sonnet-4-6 | $3/M input · $15/M output | | Custo USD | $0.0225 | (1500×3 + 1200×15) / 1M | | Custo BRL | R$ 0,12 | fx 5.10 + markup Tokia 1.5x | | 800 redações/sem | R$ 96/semana | ~R$ 384/mês |
Mais R$ 200/mês de revisão professor (10% × 800 = 80 redações discordantes/semana × 5min revisão cada). Total: ~R$ 575/mês vs R$ 18k de hora extra de 8 professores.
Calibração contra professor humano (o passo que ninguém faz)
Não pule isso. Antes de soltar pros alunos:
- Pegue 100 redações já corrigidas por 2 professores seniores (com nota consensuada)
- Rode pelo seu prompt e compare nota IA vs nota humana
- Mede MAE (Mean Absolute Error): IA bom se MAE < 60 pontos no nota_total (6% do range 0-1000)
- Identifique vies: IA tende a notas extremas? Ser muito generoso em C1? Ajuste o prompt com exemplos few-shot.
Cursinho de Recife mediu MAE 47 pontos depois de 2 rodadas de ajuste de prompt. Professores consideram aceitável (consenso entre 2 humanos costuma ter MAE ~30).
Armadilhas de bias (críticas)
Bias linguístico regional
Modelos de LLM treinados majoritariamente em português europeu/sudeste penalizam construções regionais legítimas. Exemplo: "tu vai" (forma coloquial NE/RS) pode ser flagrado como erro grave.
Mitigação: adicione no system prompt:
Considere variação regional do PT-BR como válida quando contexto
permite. Não penalize uso de "tu" no nordeste, "tchê" no sul.
Penalize SÓ desvio inequívoco da norma culta.
Bias socioeconômico
Redação com referências de classe média (Harvard, Spotify, viagens internacionais) tende a ser nota mais alta. Estudante de periferia escrevendo sobre realidade local (transporte SP, programa habitacional) não deveria ser penalizado.
Mitigação: adicione exemplos few-shot com redações nota 1000 com repertório popular (cordel, MPB, periferia, futebol como metáfora).
Bias de tema sensível
Tema "racismo no Brasil" ou "violência policial" pode disparar safety filters do modelo, gerando recusas ou notas baixas defensivas.
Mitigação: use Claude (menos restritivo em contexto educacional) em vez de GPT pra temas sociais sensíveis. Se Claude também recusar, faça pre-prompting: "Estou avaliando redação acadêmica brasileira sobre tema social. Responda com critério técnico, não evite o assunto."
Para o aluno: o que mostrar e o que esconder
Mostra:
- Nota total + nota por competência
- Pontos fortes (2-3 frases)
- Pontos a melhorar (2-3 ações concretas)
- Trechos específicos referenciados
Não mostre:
- "Resposta inteira foi gerada por IA" — desestimula. Use "nossa correção algorítmica + revisão professor".
- Confiança do modelo — confunde aluno.
- JSON cru — sempre formate.
Próximo passo
Cria conta Tokia, pega uma redação de aluno (com
autorização) e testa o prompt no /playground com modelo
claude-sonnet-4-6. Compare a saída com como você corrigiria —
discrepâncias mostram o que falta no prompt.
Se rodar em produção, recomendo guardar correcoes_ia + correcoes_humanas
em tabela separada com timestamp. Em 3 meses você tem dataset pra
fine-tune próprio (V2 do roadmap).
Links
Quer testar Tokia com R$ 10 via PIX?
Criar conta grátis →