Como corrigir respostas abertas de um quiz usando o Jev?

Dá pra corrigir respostas abertas com o Jev sem depender de texto livre: você monta um state com enunciado, gabarito e resposta do aluno, define uma escala de nota com o primitivo Score (criteria ordenado do nível baixo para o alto, mínimo 2 e máximo 10 níveis) e recebe de volta score, probabilities e confidence. O Jev é o primeiro modelo público da classe System One da TypeSafe AI, anunciado em 15/09/2026, e só devolve saída estruturada. O feedback escrito fica em outra camada, e nota com confiança baixa vai para o professor.
Corrigir resposta aberta em escala é o ponto onde quase todo projeto de quiz trava
A pergunta de múltipla escolha você corrige com um if, a dissertativa você corrige lendo, uma por uma, e a fila não anda
O que muda quando o julgamento deixa de ser um parágrafo bonito e passa a ser uma nota tipada? Você ganha um número dentro de uma escala que VOCÊ definiu antes, com a probabilidade de cada nível e um indicador de confiança. Aí dá pra automatizar o que é claro e mandar o duvidoso pro professor
É exatamente aí que entra o Jev, o primeiro modelo público da classe System One da TypeSafe AI, anunciado em 15 de setembro de 2026. Ele não escreve texto livre: recebe um state mais perguntas tipadas e devolve resposta estruturada com distribuição de probabilidade e confiança
Se você conhece validação de schema (tipo Zod ou Pydantic), a analogia é boa: o Jev é um julgador que só fala no formato que você declarou
Bora montar o corretor?
O que você precisa antes de começar
A lista é curta, e a boa notícia é que não tem fila de espera: o acesso ao Jev está aberto ao público, qualquer pessoa cria a chave em console.typesafe.ai
- Chave de API criada no console, exposta na variável de ambiente
TYPESAFE_API_KEY(o cliente lê ela sozinho) - SDK Python:
pip install typesafe-sdk, com Python 3.10 ou superior - ou SDK JavaScript:
npm install @typesafe-ai/sdk, chamandoclient.systemOne({...}) - ou HTTP na mão: um
POSTparahttps://api.typesafe.ai/v1/systemone
O modelo padrão do cliente é o jev-latest, o alias que aponta sempre pra versão atual do Jev
Sobre custo: o Jev está listado a US$ 0,042 por milhão de tokens de input e US$ 0,00 de output. Faz sentido, já que não tem geração de string livre pra cobrar na saída
A TypeSafe afirma que o Jev atinge um nível de inteligência comparável ao de LLMs em tarefas System One sendo cerca de duas ordens de grandeza mais rápido e mais eficiente. É claim da própria empresa, então trate como o que é: um argumento pra você testar no seu lote, não um número de benchmark independente
Curso de Jev: Sistemas Mais Inteligentes, Rápidos e Robustos
Desenvolva sistemas mais inteligentes, rápidos e robustos com Jev
Passo a passo: montando o corretor automático
- Instale o SDK e configure a chave
pip install typesafe-sdk
export TYPESAFE_API_KEY="sua-chave-do-console"
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
client = TypeSafeClient() # usa TYPESAFE_API_KEY e jev-latest
O erro comum deste passo: deixar a chave hardcoded no arquivo que vai pro Git. O cliente lê TYPESAFE_API_KEY do ambiente justamente pra você não precisar fazer isso
- Monte o state com enunciado, gabarito e resposta do aluno
O state é o contexto que o Jev lê pra julgar. Correção sem gabarito é chute, então os três pedaços entram juntos
enunciado = "Explique a diferença entre autenticação e autorização"
gabarito = ("Autenticação verifica QUEM é o usuário (identidade). "
"Autorização define O QUE esse usuário pode fazer (permissões). "
"Autenticação vem antes; autorização depende dela")
resposta_aluno = ("Autenticação é quando o sistema confere o login e a senha "
"pra saber se é você mesmo. Autorização é o que você pode "
"acessar depois disso")
state = f\"\"\"ENUNCIADO DA QUESTÃO:
{enunciado}
GABARITO (resposta esperada):
{gabarito}
RESPOSTA DO ALUNO:
{resposta_aluno}\"\"\"
O erro comum deste passo: mandar só a resposta do aluno e esperar que o modelo adivinhe o critério da sua prova. State incompleto é a causa número um de nota instável, do mesmo jeito que acontece com respostas fracas por contexto ruim em ferramentas de pesquisa
- Desenhe a escala de nota com Score
O System One tem três primitivos de pergunta: Noul (probabilidade de sim/não), Choice (uma opção de um conjunto) e Score (posição numa escala). Correção de dissertativa é Score
O Score recebe um array ordenado de descrições de nível no campo criteria, do nível mais baixo para o mais alto
nota_conteudo = Score(criteria=[
"Resposta em branco, fora do tema ou totalmente incorreta",
"Cita os dois termos mas troca os significados ou erra a definicao central",
"Define corretamente apenas um dos dois conceitos",
"Define corretamente os dois conceitos, sem explicar a relacao entre eles",
"Define os dois conceitos e explica que autorizacao depende da autenticacao",
])
O erro comum deste passo: inverter a ordem do criteria, colocando o melhor nível primeiro. A escala é lida de baixo pra cima, então a inversão entrega nota alta pra resposta ruim e você só descobre depois de lançar o boletim 😅
- Faça a chamada
resultado = client.system_one(
state=state,
questions={"nota_conteudo": nota_conteudo},
)
O erro comum deste passo: esperar um parágrafo de volta. O Jev não gera texto livre, ponto. Se o seu código tenta ler uma string de explicação, ele vai quebrar
- Leia score, probabilities e confidence
A resposta de um Score traz três coisas: o campo score (a média ponderada pelas probabilidades dos números dos níveis, ou seja, pode cair entre dois níveis), probabilities com a probabilidade de cada nível e confidence
Curso RecomendadoDesenvolva sistemas mais inteligentes, rápidos e robustos com JevConhecer cursoÉ isso que você grava no banco: a nota, a distribuição e a confiança. Os três, não só a nota
O erro comum deste passo: abrir bug porque o score veio fracionário. Não é bug, é feature: valor entre dois níveis significa que o modelo está dividido entre eles, e essa é justamente a informação que decide se a nota entra automática ou passa pelo professor antes
- Avalie vários critérios na mesma chamada
O Jev avalia várias perguntas independentes numa única requisição, em paralelo. Então rubrica com três dimensões não é três chamadas
resultado = client.system_one(
state=state,
questions={
"nota_conteudo": nota_conteudo,
"nota_clareza": Score(criteria=[
"Texto confuso, sem estrutura, dificil de entender",
"Ideia compreensivel mas mal organizada",
"Texto claro e direto",
]),
},
)
O erro comum deste passo: enfiar dois julgamentos diferentes dentro do mesmo Score ("conteúdo correto E bem escrito"). Critério misturado achata a distribuição, porque o modelo não sabe qual dos dois pesar. Uma pergunta, um julgamento
Como definir a escala de notas com Score e criteria
A rubrica é onde o projeto se decide. O modelo não inventa o seu critério, ele posiciona a resposta dentro do critério que você escreveu
Regras de tamanho: a escala precisa de pelo menos 2 níveis, e a API aceita até 10
E por que isso importa na prática? Porque escala gigante com descrição vaga vira loteria. Se os níveis 6 e 7 se diferenciam por "um pouco melhor", o modelo não tem onde se apoiar, a probabilidade se espalha entre eles e a confiança cai
Descrição vaga achata a distribuição
Descrição observável concentra a distribuição
A diferença é escrever o que dá pra VER na resposta do aluno, não um adjetivo:
| Jeito ruim de escrever o nível | Jeito bom de escrever o nível |
|---|---|
| Resposta razoável | Cita o conceito central mas não dá exemplo |
| Resposta boa | Cita o conceito central e dá pelo menos um exemplo correto |
| Resposta excelente | Cita o conceito central, dá exemplo e conecta com o caso do enunciado |
Exemplo de escala de 5 níveis pra dissertativa, no formato que costuma funcionar melhor: nível 1 pro caso degenerado (branco, fora do tema), nível 2 pro erro conceitual, nível 3 pra resposta parcial, nível 4 pra resposta completa e nível 5 pra resposta completa com a relação entre os conceitos explicada
E aquele score fracionário que assusta no começo? Ele é a média ponderada pelas probabilidades dos números dos níveis. Um 3.5 quer dizer "está entre o parcial e o completo", que é o tipo de resposta que qualquer professor também leria duas vezes. Mais detalhe do primitivo está na documentação do Score
Quando mandar a correção para um humano
Aqui entra o confidence. Respostas de Choice e Score carregam confiança entre 0 e 1, derivada do formato da distribuição de probabilidade: distribuição concentrada num nível dá confiança alta, distribuição espalhada dá confiança baixa
A documentação recomenda o padrão de roteamento por confiança em três faixas:
| Faixa de confiança | O que o sistema faz |
|---|---|
| Alta | Age automaticamente (lança a nota) |
| Média | Não lança sozinho: marca a nota pro professor confirmar antes de entrar |
| Baixa | Não lança nada: a resposta vai pro professor corrigir do zero |
O limiar de cada faixa não vem de fábrica: ele depende do risco da ação. Quiz de treino, onde errar a nota custa pouco, aceita limiar frouxo. Prova valendo nota final, onde errar custa recurso e conversa com a coordenação, pede limiar apertado e faixa média larga
Sintoma: você soltou o corretor e chegaram reclamações de nota injusta
Causa provável: o limiar foi definido por chute, então respostas que o modelo julgou em cima do muro entraram como nota definitiva
Solução: roteamento em três faixas de verdade, com fila de confirmação do professor pra faixa média e nada de nota automática na faixa baixa
Como prevenir: calibre antes. Pegue um lote que já foi corrigido à mão, rode o corretor nele e compare. Você vai ver em qual valor de confiança o modelo começa a divergir do professor, e é aí que o seu limiar mora. O padrão completo está descrito no guia de confidence routing

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.Separando o julgamento do feedback escrito
Essa separação é o pulo do gato do projeto, e ela não é opcional: o Jev não gera texto livre, então ele não pode ser a fonte do feedback
A arquitetura fica em duas camadas:
- Camada de julgamento (Jev). Decide a nota com
Score, o tipo de erro comChoicee os critérios objetivos comNoul. Saída tipada, com probabilidade e confiança - Camada de texto. Recebe a nota JÁ DECIDIDA e só verbaliza: template por faixa de nota, ou um LLM que lê o resultado estruturado como entrada e escreve o comentário pro aluno
Por que isso é melhor que pedir nota e comentário pro mesmo modelo de texto? Porque quando um LLM escreve os dois juntos, ele às vezes escreve um elogio e crava nota baixa, ou aponta três erros e dá nota máxima
Nota e feedback se contradizendo na frente do aluno é o pior bug possível nesse tipo de produto
Com as camadas separadas, o texto é DERIVADO da nota, então contradição não tem por onde entrar. E tem um bônus: template por faixa é determinístico, versionável e revisável pela coordenação antes de ir pro ar
Outros usos dessa mesma estrutura em quizzes e formulários
O padrão é sempre o mesmo (state + perguntas tipadas), só muda o primitivo:
- Triagem de formulário de inscrição:
Scorepra aderência do candidato ao perfil descrito, e a faixa de confiança decide quem vai pra leitura humana - Checagem de critério objetivo:
Noulpra perguntas de sim/não do tipo "o aluno citou a fonte?", "a resposta menciona o prazo?". É o primitivo mais barato de auditar, porque a resposta é binária - Classificação do tipo de erro:
Choiceentre opções como erro conceitual, erro de cálculo, resposta incompleta, fora do tema. Isso alimenta relatório de turma, não só a nota individual - Pré-triagem de redação: o Jev separa o lote em blocos por nível antes da leitura humana, e o professor lê na ordem que quiser
- Avaliação de resposta de suporte: mesma rubrica, aplicada em atendimento em vez de prova, útil quando você já tem um fluxo pra automatizar respostas com n8n e quer medir a qualidade do que sai
Repare que em todos os casos a decisão continua tipada. É isso que permite gravar em coluna de banco, filtrar, somar e auditar depois
Como checar se a correção é estável
Antes de soltar em turma inteira, a pergunta certa é: se eu rodar de novo, dá a mesma coisa?
A documentação traz cookbooks de self-consistency: você roda as mesmas perguntas tipadas mais de uma vez sobre o mesmo state e observa se a resposta se mantém. Existem receitas com Noul e com Choice na seção de cookbooks
Sintoma: a mesma resposta do aluno recebe notas diferentes entre rodadas, ou a confiança vive baixa mesmo em resposta que pra você é obviamente boa
Causa provável: duas, quase sempre. criteria ambíguo, com níveis vizinhos que se diferenciam por adjetivo em vez de fato observável. Ou state incompleto, geralmente sem o gabarito, o que obriga o modelo a inventar o padrão de comparação
Solução: reescreva os níveis vizinhos que estão colando, transformando adjetivo em critério verificável, e garanta que enunciado e gabarito estão no state. Depois rode o self-consistency de novo no mesmo lote e compare
Pra rodar isso em lote grande sem ficar esperando requisição por requisição, o SDK Python também oferece cliente assíncrono (AsyncTypeSafeClient) além do TypeSafeClient síncrono. Turma inteira em paralelo resolve o tempo de espera
Tome cuidado com um detalhe: rodar várias vezes multiplica o consumo de input. Com output a US$ 0,00 a conta continua camarada, mas vale medir antes de transformar self-consistency em rotina de produção
Vídeo complementar
Pra começar do zero no assunto de economizar em ferramentas de IA, este vídeo do canal mostra o caminho:
Conclusão
O fluxo pra corrigir respostas abertas com o Jev cabe em três decisões, e nenhuma delas é sobre prompt mágico:
statetipado com enunciado, gabarito e resposta do aluno juntos- Escala definida ANTES, com
criteriaordenado do nível baixo pro alto, entre 2 e 10 níveis, descrito em fato observável - Roteamento por confiança em três faixas, com o limiar puxado pelo risco da ação
O texto do feedback fica em outra camada, alimentada pela nota já decidida. Assim nota e comentário nunca se contradizem
Próximo passo bem concreto: cria a chave em console.typesafe.ai, escolhe UM quiz real que você já corrigiu à mão, escreve a rubrica dele e compara resultado por resultado com a sua correção. Só depois que a comparação fechar você automatiza o resto
Rubrica boa é a maior parte do trabalho, o modelo é o resto 🙂
até o próximo post!
Perguntas frequentes
Dá pra corrigir respostas abertas com o Jev sem usar SDK, só com requisição HTTP?
Dá sim. O System One expõe um endpoint POST em https://api.typesafe.ai/v1/systemone, então você monta o state e as perguntas tipadas direto na chamada HTTP. Os SDKs Python e JavaScript existem pra facilitar, mas não são obrigatórios.
Quanto custa corrigir um lote grande de respostas abertas com o Jev?
O input sai a US$ 0,042 por milhão de tokens e o output é US$ 0,00, porque o Jev não gera texto livre pra cobrar na saída. Isso muda a conta de um corretor que processa milhares de respostas comparado a um LLM tradicional que gera parágrafo de justificativa.
Como decidir se a nota do Jev pode ser lançada direto ou precisa de revisão humana?
Usa o campo confidence, que vem entre 0 e 1 em cada resposta de Score. A prática recomendada pela documentação é o roteamento por confiança em três faixas: confiança alta lança a nota automático, confiança média marca a nota pro professor confirmar antes de entrar, confiança baixa não lança nada e manda a resposta pro professor corrigir do zero, com o limiar ajustado ao risco da correção.
O Jev serve pra corrigir redação inteira ou só questões curtas?
Serve pros dois casos, desde que você desenhe o Score certo: o criteria é quem define o que está sendo medido, seja uma resposta de duas linhas ou uma redação completa. O que muda é o cuidado ao escrever os níveis de critério, não o tamanho do texto do aluno.
Preciso rodar uma chamada separada pra cada critério da rubrica?
Não. O Jev avalia várias perguntas tipadas independentes na mesma requisição, em paralelo, então uma rubrica com conteúdo, clareza e coesão cabe numa chamada só. Isso evita multiplicar o número de requisições por aluno.
Dá pra confiar numa nota do Jev que veio com score fracionário, tipo 2.7?
Sim, valor fracionário é esperado: o score é a média ponderada pelas probabilidades de cada nível, então cair entre dois níveis significa que o modelo está dividido entre eles. É por isso que faz sentido olhar também o campo probabilities antes de bater o martelo.
Formações
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 48min
Blog | Mais populares

Como montar um workflow de automação combinando decisões do Jev em código
Aprenda a montar um workflow com Jev: decisões tipadas encadeadas em código, alta confiança agindo sozinha e casos incertos escalando para revisão.

Jev decide, LLM escreve: como dividir os papéis dentro de um agente de IA
Jev é o modelo que decide, não escreve: entenda como dividir papéis entre Jev e LLM dentro de um agente de IA e quando usar cada um.

Para quem o Jev serve (e para quem não serve)?
Jev serve pra roteamento, scoring e guardrails em IA, não pra texto ou código. Veja pra quem o Jev serve e quando evitar.
