Como registrar e auditar cada decisão do Jev em produção

Pra auditar decisões do Jev depois que o fluxo está no ar, guarde em cada chamada: a entrada, o veredito (choice, score ou a probabilidade de ‘sim’ no Noul), as probabilities, a confidence quando existir, o ID versionado do campo model (ex.: jev-1.13.0), a versão da pergunta definida pelo seu time, o limiar de confiança vigente e a rota tomada (automática ou revisão humana). Fixe o ID versionado em vez de jev-latest se você calibrou limiares, e não confie no log do gateway como fonte da versão: grave o campo model por conta própria
Fala aí, beleza? Decisão automatizada que ninguém consegue explicar depois não é automação, é passivo 😛
Chega o cliente, o jurídico ou o próprio chefe perguntando ‘por que o sistema recusou isso aqui?’ e o time fica olhando pro log sem saber o que responder
O Jev é o modelo proprietário da TypeSafe AI, lançado em early access em 15 de setembro de 2026 e ainda nesse estágio
Segundo a página do Jev na Wikipedia), a TypeSafe chama ele de primeiro ‘System One model’ da empresa, nome inspirado no pensamento rápido (o Sistema 1) popularizado pelo Daniel Kahneman
E aqui vem a parte boa pra quem precisa prestar contas: o Jev não gera texto livre
Ele devolve valores tipados com estimativas de probabilidade e confiança, ou seja, não tem parágrafo pra interpretar, tem campo pra guardar
Então se o teu time responde por decisões automatizadas, bora montar um registro que te deixe auditar decisões do Jev meses depois, sem achismo
Curso de Jev: Sistemas Mais Inteligentes, Rápidos e Robustos
Desenvolva sistemas mais inteligentes, rápidos e robustos com Jev
Antes de começar: o que você precisa ter?
- Acesso ao Jev: lembrando que ele segue em early access
- Perguntas já definidas em um dos três tipos que o Jev aceita: Choice, Score ou Noul
- Um lugar pra persistir os registros: banco, storage de logs, o que o time já usa (a escolha é tua)
- Saber por onde a chamada passa: direto na TypeSafe ou por um gateway, tipo LiteLLM ou o AI Gateway da Vercel
Esse último item parece bobo, mas ele muda o que aparece no log, já já tu vai ver o porquê
Passo a passo para registrar e auditar as decisões do Jev:
A ideia geral é simples: cada chamada vira um registro com entrada, veredito, probabilidade, confiança (quando o tipo de pergunta tem esse campo), versão do modelo e versão da pergunta
Com isso na mão, qualquer decisão pode ser remontada depois
1. Como montar o registro conforme o tipo de pergunta?
Cada tipo devolve campos diferentes, então o registro precisa respeitar isso
- Choice: escolhe uma opção e devolve
choice,probabilitieseconfidence - Score: trabalha com níveis ordenados e devolve
score,probabilitiese, quando vier,legend - Noul: devolve a probabilidade de ‘sim’, de 0 a 1
Um formato de registro que dá conta dos três (a estrutura e os nomes das chaves são do teu time, os valores entre < > vêm da resposta do Jev):
[
{
"tipo_pergunta": "choice",
"entrada": "<dados enviados na chamada>",
"resposta": {
"choice": "<opção escolhida>",
"probabilities": "<distribuição devolvida>",
"confidence": "<confiança devolvida>"
}
},
{
"tipo_pergunta": "score",
"entrada": "<dados enviados na chamada>",
"resposta": {
"score": "<nível escolhido>",
"probabilities": "<distribuição devolvida>",
"legend": "<legenda, se vier>"
}
},
{
"tipo_pergunta": "noul",
"entrada": "<dados enviados na chamada>",
"resposta": {
"prob_sim": "<probabilidade de 'sim', de 0 a 1>"
}
}
]
O erro comum deste passo: procurar um campo confidence no Noul
Ele não existe! A certeza está na própria probabilidade: perto de 0 ou de 1 é confiante, perto de 0,5 é incerto
Então nada de criar uma coluna de confiança vazia pro Noul, isso só confunde quem for auditar depois
Curso RecomendadoDesenvolva sistemas mais inteligentes, rápidos e robustos com JevConhecer curso2. Por que gravar o campo model em toda resposta do Jev?
O campo model da resposta informa o ID versionado que respondeu, algo como jev-1.13.0
É ele que diz QUAL modelo produziu aquele resultado, e sem isso a auditoria vira chute
{
"modelo": "<valor do campo model da resposta, ex.: jev-1.13.0>"
}
O erro comum deste passo: gravar só o alias que você usou na chamada
O alias diz o que você pediu, o model diz o que respondeu de verdade, e nem sempre é a mesma coisa (o próximo passo explica)
3. Usar jev-latest ou fixar a versão do Jev?
Fixar, se você calibrou qualquer limiar 🙂
Segundo a documentação de modelos da TypeSafe, em 25 de setembro de 2026 os aliases jev-latest e jev-preview apontavam pra jev-1.13.0
Porém o alias muda quando sai versão nova
Aí as respostas podem mudar sem você ter mexido em nada do teu lado, e o limiar que funcionava ontem passa a cortar errado hoje
Por isso a recomendação da própria doc: ajustou limiar de confiança numa versão, fixa o ID dessa versão em vez do alias
{
"modelo_fixado": "jev-1.13.0",
"motivo": "limiares calibrados nesta versão"
}
O erro comum deste passo: calibrar limiar em cima do jev-latest
É tipo afinar o violão e deixar alguém trocar as cordas enquanto tu dorme haha
4. Como versionar a pergunta que o Jev responde?
O Jev versiona o modelo, mas a pergunta é tua, então quem versiona é tu
Dá um identificador próprio pra cada pergunta, mais uma versão, e salva os dois junto de cada chamada
{
"pergunta_id": "<identificador definido pelo teu time>",
"pergunta_versao": "<versão definida pelo teu time>"
}
Se quiser ir mais fundo, tem um post só sobre como versionar o schema de decisão sem quebrar o que já está rodando
O erro comum deste passo: editar o texto da pergunta e manter a mesma versão
Parece inofensivo, mas os registros antigos ficam incomparáveis com os novos, e ninguém percebe até a primeira auditoria 😛
5. Como registrar o limiar de confiança e a rota da decisão?
Probabilidade e confiança servem pra definir o que acontece nos casos incertos
O caminho clássico: abaixo de certo nível de confiança, a decisão vai pra revisão humana
E o registro precisa guardar o limiar que estava valendo NAQUELE momento e a rota que foi tomada
Juntando tudo, um registro completão fica assim:
{
"registrado_em": "<data e hora da chamada>",
"pergunta_id": "<identificador da pergunta>",
"pergunta_versao": "<versão da pergunta>",
"tipo_pergunta": "choice",
"modelo": "<valor do campo model da resposta>",
"entrada": "<dados enviados na chamada>",
"resposta": {
"choice": "<opção escolhida>",
"probabilities": "<distribuição devolvida>",
"confidence": "<confiança devolvida>"
},
"limiar_confianca": "<limiar vigente no momento da chamada>",
"rota": "<automatica ou revisao_humana>"
}
O erro comum deste passo: guardar só a decisão final
Limiar muda com o tempo, e sem ele no registro tu não consegue dizer se aquela decisão seguiu a regra da época ou não

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.6. O que o gateway registra sobre a versão do Jev?
Se a chamada passa por gateway, confere o log dele antes de confiar
Se liga nessa diferença:
| Caminho | O que aparece como modelo | O que fazer |
|---|---|---|
| Chamada direta | O campo model da resposta traz o ID versionado |
Gravar esse campo no teu registro |
| LiteLLM | O ID versionado informado pela TypeSafe (ex.: typesafe/jev-1.13.0), mesmo chamando por alias |
Dá pra cruzar com o log, mas manter o campo model no teu registro |
| AI Gateway da Vercel | Há issue aberta relatando que o modelId volta como alias (typesafe-ai/jev) |
Gravar o campo model da resposta por conta própria |
No LiteLLM a requisição fica registrada sob o modelo versionado, o que ajuda bastante
Já no AI Gateway da Vercel, a issue #21213 no vercel/ai relata que o que volta é o alias, não a versão resolvida
O erro comum deste passo: confiar no log do gateway como fonte da versão
A fonte é o campo model da resposta, gravado por você, sempre
Como auditar uma decisão do Jev depois que ela aconteceu?
Chegou o questionamento, bora remontar a decisão:
- Localize o registro da chamada pela data, pela entrada ou pelo identificador da pergunta
- Confira as duas versões: o ID do modelo gravado a partir do campo
modele a versão da pergunta - Leia o veredito junto da distribuição: em Choice e Score, a confiança vem da distribuição de probabilidades, então distribuição concentrada é confiança alta e distribuição plana é confiança baixa (no Noul não tem campo de confiança, a certeza está na própria probabilidade: perto de 0 ou de 1 é confiante, perto de 0,5 é incerto)
- Verifique o limiar: a confiança ficou acima ou abaixo do limiar gravado naquele registro?
- Confirme a rota: se ficou abaixo, a decisão foi mesmo pra revisão humana? Se ficou acima, seguiu automática?
Pronto, tu consegue explicar por que o sistema agiu daquele jeito com dado na mão, não com ‘acho que foi isso’ 😀
Checagem de calibração em lote:
Auditar caso a caso resolve o questionamento pontual, mas vale olhar o lote também
Probabilidade calibrada significa que, dos casos em que o modelo marca 0,9, cerca de 90 em 100 devem ser positivos
Então pega os casos marcados com 0,9 e compara com o resultado real
Se o número destoar muito, é hora de revisar os limiares
Esse tipo de análise conversa direto com medir o impacto do Jev no processo como um todo
O erro comum desta etapa: misturar resultados de versões diferentes na mesma análise
Compare sempre dentro da mesma versão fixada, senão tu tá medindo dois modelos como se fossem um só
Próximo passo: comece pelo campo model e pela versão da pergunta
Recapitulando: com entrada, veredito, probabilidade, confiança (quando o tipo tem), ID versionado e versão da pergunta salvos, qualquer decisão do Jev pode ser explicada depois
Soma o limiar vigente e a rota tomada, e a auditoria fica completa
O próximo passo prático é bem pequeno: fixa o ID versionado hoje e confere se o gateway que tu usa registra a versão real ou só o alias
E como o Jev segue em early access, vale acompanhar as mudanças de versão de perto, porque é exatamente aí que um registro bem feito salva o time…
Até o próximo post! 🙂
Perguntas frequentes
Como saber qual versão do Jev gerou uma decisão antiga?
Olha o campo model que ficou salvo naquele registro, tipo jev-1.13.0. É por isso que gravar esse campo em toda resposta não é opcional, sem ele não tem como saber qual modelo respondeu.
Dá pra auditar decisões do Jev sem guardar a probabilidade, só o veredito final?
Dá, mas fica pela metade. Só com probabilities e confidence (ou a probabilidade única no caso do Noul) você entende o quão certo o modelo estava, não só o que ele escolheu.
O que fazer quando jev-latest aponta pra uma versão diferente da que eu calibrei?
Se você ajustou limiares de confiança numa versão específica, fixa o ID dela nos registros em vez de usar o alias. Assim o alias pode mudar à vontade que teu histórico continua comparável.
Como saber se uma probabilidade do Jev está calibrada?
Confere se, dos casos em que o modelo marcou algo perto de 0,9, cerca de 90 em cada 100 realmente foram positivos. Isso só dá pra checar guardando entrada, probabilidade e resultado real de cada decisão ao longo do tempo.
O log do LiteLLM já resolve a auditoria de decisões do Jev sozinho?
Ele ajuda bastante, porque registra o ID versionado mesmo quando a chamada usou um alias. Mas ele não sabe da tua regra de negócio, tipo limiar de revisão humana ou versão da pergunta, isso ainda é registro teu.
Por que o AI Gateway da Vercel pode complicar a auditoria do Jev?
Existe uma issue aberta (#21213) relatando que o modelId devolvido por lá é o alias typesafe-ai/jev, não a versão resolvida. Se tua auditoria depender só desse campo, corre o risco de perder o rastro de qual versão do Jev respondeu de verdade.
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.
