Como perceber que as decisões do Jev pararam de combinar com o seu produto?

Para perceber que as decisões do Jev pararam de combinar com o seu produto, salve em cada chamada do Choice os três campos da resposta (choice, probabilities e confidence) e acompanhe por semana a PROPORÇÃO de cada opção e a fatia de respostas em cada faixa de confiança. Três sinais pedem revisão: a opção other crescendo (categoria nova que falta no criteria), probabilidade dividida entre opções vizinhas com confiança média (rubrica larga demais) e uma opção concentrando volume sem explicação do negócio. Em cada caso, leia amostras, ajuste o mapa criteria e revalide seus limites de confiança nos seus próprios dados
Fala aí, beleza? O Jev não avisa quando o seu produto mudou
Ele continua devolvendo decisões tipadas, com probabilidade e confiança, com a mesmíssima cara de sempre 😀
O problema é que o seu Choice foi montado num momento específico
As opções e as rubricas que você escreveu refletiam a realidade daquela época, e a realidade muda: entra cliente novo, sai feature nova, aparece um tipo de pedido que ninguém imaginou
E aí as decisões do Jev começam a ficar estranhas sem nenhum erro aparecer no log
Se liga na ideia central deste post: esse sinal quase nunca aparece numa decisão isolada
Ele aparece na DISTRIBUIÇÃO das respostas ao longo das semanas
Pra situar: o Jev é o modelo System One da TypeSafe AI, em early access desde 15 de setembro de 2026
Ele recebe um estado e perguntas tipadas e devolve decisões com probabilidade e confiança, sem gerar texto livre
Bora ver na prática como flagrar essa mudança e o que revisar em cada caso?
O que você precisa antes de começar a monitorar
Antes de olhar gráfico nenhum, confere se tu tem esses itens no lugar:
- Um Choice do Jev já rodando em produção, respondendo perguntas reais do seu produto
- Os três valores de cada resposta guardados:
choice(a opção de maior probabilidade),probabilities(a distribuição completa entre todas as opções, somando 1) econfidence(um número de 0 a 1) - O mapa
criteriaatual versionado, pra conseguir comparar o antes e o depois de qualquer mudança - Seus limites de confiança definidos, ou seja, a partir de quanto você age sozinho e a partir de quanto manda pra revisão
Curso de Jev: Sistemas Mais Inteligentes, Rápidos e Robustos
Desenvolva sistemas mais inteligentes, rápidos e robustos com Jev
Sobre esses limites, tome cuidado!
A documentação usa 0.5 como piso de revisão e 0.9 antes de ação destrutiva, mas são EXEMPLOS, não padrão
O número certo depende do custo de uma resposta errada no seu produto
A referência pra tudo isso é a documentação oficial em docs.typesafe.ai
Um detalhe importante: aqui a agregação é feita por você, a partir do que você armazena
Não conte com um painel pronto de distribuição semanal, a ideia é que você tenha os dados na sua mão pra monitorar as decisões em produção do seu jeito 🙂
Passo a passo para acompanhar a distribuição das respostas semana a semana
O porquê antes do como: uma resposta sozinha não diz se o mundo mudou
Mas mil respostas por semana, comparadas com as mil da semana anterior, dizem MUITO
- Registre a resposta completa, não só o campo
choice
Cada chamada vira um registro com a opção vencedora, a distribuição inteira, a confiança, a data e a versão do criteria usada
O erro comum deste passo: salvar só a opção vencedora
Parece suficiente, né? Só que é justamente em probabilities e confidence que o sinal de mudança aparece primeiro, e sem eles tu fica cego
Um registro bem guardado tem mais ou menos esta cara:
# o que você salva da resposta do Choice, mais metadados seus
registro = {
"created_at": "2026-10-01T14:02:00",
"choice": "suporte",
"probabilities": {"suporte": 0.70, "financeiro": 0.20, "other": 0.10},
"confidence": 0.62,
"criteria_version": "v3",
}
- Agrupe por semana a participação de cada opção no total
Aqui o código trabalha só em cima dos registros que você já guardou, nada de chamar o Jev de novo:
from collections import Counter, defaultdict
from datetime import datetime
def semana(iso):
ano, sem, _ = datetime.fromisoformat(iso).isocalendar()
return f"{ano}-S{sem:02d}"
def proporcao_por_semana(registros):
contagem = defaultdict(Counter)
for r in registros:
contagem[semana(r["created_at"])][r["choice"]] += 1
resultado = {}
for sem, c in sorted(contagem.items()):
total = sum(c.values())
resultado.update({sem: {opcao: n / total for opcao, n in c.items()}})
return resultado
O erro comum deste passo: olhar volume absoluto em vez de proporção
Se o produto cresceu, TODAS as opções crescem junto, e isso não é mudança de padrão nenhuma, é só mais gente usando haha
O que importa é a fatia de cada opção no total da semana
- Acompanhe a confiança média e a fatia de respostas em cada faixa
A documentação divide a confiança em três faixas: alta pra ação automática, média pra pedir confirmação ou marcar pra revisão, e baixa pra mandar a uma pessoa, pedir esclarecimento ou cair pra um sistema mais lento
# 0.5 e 0.9 são exemplos da documentação, NÃO padrão
# ajuste ao custo do erro no seu produto
PISO_REVISAO = 0.5
PISO_ACAO = 0.9
def faixa(conf):
if conf >= PISO_ACAO:
return "alta"
if conf >= PISO_REVISAO:
return "media"
return "baixa"
def faixas_por_semana(registros):
contagem = defaultdict(Counter)
somas = defaultdict(float)
for r in registros:
contagem[semana(r["created_at"])][faixa(r["confidence"])] += 1
somas[semana(r["created_at"])] += r["confidence"]
resultado = {}
for sem, c in sorted(contagem.items()):
total = sum(c.values())
resultado.update({sem: {
"confianca_media": somas.get(sem) / total,
**{f: n / total for f, n in c.items()},
}})
return resultado
Curso RecomendadoDesenvolva sistemas mais inteligentes, rápidos e robustos com JevConhecer cursoO erro comum deste passo: olhar só a média
A média pode ficar quase parada enquanto a faixa baixa cresce aos poucos, escondida atrás de muitas respostas de confiança alta
Por isso a fatia de cada faixa vale mais que a média sozinha
- Compare com uma semana de referência e marque desvios pra revisão manual
Escolha uma semana que você considera normal e compare as seguintes com ela:
def desvios(referencia, atual):
opcoes = set(referencia) | set(atual)
difs = {o: atual.get(o, 0) - referencia.get(o, 0) for o in opcoes}
return sorted(difs.items(), key=lambda x: abs(x[1]), reverse=True)
prop = proporcao_por_semana(registros)
# use como referência uma semana completa e normal, nada de semana com poucos dias de dados
for opcao, dif in desvios(prop["2026-S39"], prop["2026-S40"]):
print(opcao, round(dif, 3))
As opções do topo dessa lista são as primeiras candidatas a uma leitura de amostras na mão
O limiar do que conta como desvio é seu: não existe número oficial pra isso, então calibre olhando o histórico do seu próprio produto
O erro comum deste passo: reagir a uma semana atípica isolada
Feriado, campanha, um cliente grande que entrou numa segunda… Espere o desvio se repetir antes de mexer no criteria
Sinal 1: apareceu uma categoria nova que não existe no Choice
Sintoma: a opção other (ou none of the above) ganha fatia semana após semana
Ou então cresce a parcela de respostas com probabilidades espalhadas e confiança baixa
E o que significa essa distribuição espalhada? A confiança é calculada a partir de como as probabilidades se espalham: distribuição plana entre várias opções é confiança baixa, pico único numa opção é confiança alta
Causa: entraram no seu produto casos reais que nenhuma opção cobre
O Choice serve pra escolher uma opção dentro de um conjunto conhecido, então o modelo é obrigado a escolher ali dentro, mesmo quando nada encaixa direito
Solução: leia amostras dessas respostas, nomeie a categoria que está surgindo e adicione ela ao mapa criteria
O criteria aceita até 255 opções rotuladas, então espaço tem de sobra pra quase todo caso
Como prevenir: mantenha SEMPRE uma opção other ou none of the above, como a documentação recomenda quando a lista pode não cobrir todas as entradas
Sem ela, a novidade não vira sinal: ela se esconde dentro de alguma outra opção e bagunça tudo calada
Pensa no other como o seu alarme 🙂
Sinal 2: a rubrica de uma opção ficou larga demais
Sintoma: uma opção começa a absorver casos que, pela regra de negócio, pertencem a outra
E a confiança dessas respostas cai pra faixa média, com a probabilidade dividida entre duas opções vizinhas
Dá pra flagrar isso contando quais pares de opções mais disputam probabilidade:
def disputas(registros):
pares = Counter()
for r in registros:
top = sorted(r["probabilities"].items(),
key=lambda x: x[1], reverse=True)[:2]
if len(top) == 2 and faixa(r["confidence"]) == "media":
pares[(top[0][0], top[1][0])] += 1
return pares.most_common(5)
Se o mesmo par aparece no topo semana após semana, a fronteira entre essas duas opções está borrada
Causa: descrição vaga, numa string curta, sem dizer onde termina uma opção e começa a outra
Lembra que o criteria é um mapa em que cada chave é o nome da opção e cada valor é a descrição dela? Essa descrição É a rubrica
Solução: reescreva a descrição em forma de objeto
A documentação mostra que a descrição pode ser string, objeto, array ou null, e na forma de objeto ela diz três coisas:
- o que a opção cobre
- o que pertence a outra opção
- alguns exemplos
Isso deixa a fronteira MUITO mais nítida, e o formato exato está na seção de primitives avançadas da documentação
Como prevenir: sempre que o produto ganhar feature ou público novo, revise as rubricas das opções que mais disputam probabilidade entre si

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.A lista de disputas acima já te entrega por onde começar
Sinal 3: o volume se concentrou em uma única opção
Sintoma: uma opção passa a dominar a distribuição sem que nada no negócio explique essa mudança
Nenhuma campanha, nenhum lançamento, nada… e mesmo assim ela engoliu metade do tráfego
Causa possível: essa opção virou o destino padrão de tudo que é ambíguo
Ou a pergunta ficou ampla demais pra caber num único Choice
Solução: audite amostras dessa opção
Se for mistura de casos diferentes, tu tem dois caminhos:
- quebrar o julgamento em perguntas mais estreitas e tipadas, com critérios explícitos, como a documentação orienta pra construir com System One
- dividir a opção em duas, cada uma com rubrica clara
Como prevenir: trate concentração repentina como alerta pra revisão, não como sinal de acerto
E como diferenciar de uma concentração legítima, quando o produto realmente mudou? Olhe a confiança dessas respostas
Se a opção cresceu com pico único e confiança alta, provavelmente a realidade mudou mesmo
Se cresceu com probabilidade espalhada e confiança média ou baixa, ela está virando depósito de dúvida
Um resumo rápido dos três sinais:
| Sinal | O que aparece na distribuição | O que revisar |
|---|---|---|
| Categoria nova | other ganhando fatia, mais confiança baixa |
Adicionar opção ao criteria |
| Rubrica larga | Probabilidade dividida entre duas vizinhas, confiança média | Descrição em objeto com fronteira e exemplos |
| Concentração | Uma opção dominando sem explicação do negócio | Auditar amostras, quebrar a pergunta ou dividir a opção |
Depois de mexer no Choice: como validar se a revisão funcionou
Mexeu no criteria? Massa, mas o trabalho não acabou
Agora tu precisa provar que a mudança melhorou alguma coisa
- Compare a distribuição das semanas seguintes com a de antes da mudança
Usa a mesma função desvios do passo a passo, com a semana de antes como referência
O erro comum deste passo: mudar rubrica e opções ao mesmo tempo
Aí a distribuição muda e você não faz ideia de qual das duas alterações surtiu efeito, então mexe numa coisa por vez sempre que der
- Revise os limites de confiança nos seus próprios dados
A documentação recomenda testar os limites plotando confiança contra acurácia nos seus dados, e esse é o mesmo raciocínio de validar as decisões antes de produção
O erro comum deste passo: manter os números antigos depois de alterar as opções
Com opções novas, a forma como as probabilidades se espalham muda, e o limite que funcionava antes pode não fazer mais sentido
- Registre a versão do
criteriajunto de cada resposta
É o campo criteria_version do registro lá do começo
Isso é feito do seu lado, na sua base, e é o que permite separar o antes e o depois na análise:
antes = [r for r in registros if r["criteria_version"] == "v3"]
depois = [r for r in registros if r["criteria_version"] == "v4"]
print(faixas_por_semana(antes))
print(faixas_por_semana(depois))
Sem essa marcação, as duas versões se misturam na mesma semana e a comparação vira chute
Conclusão: o Choice precisa acompanhar o produto
O Choice é uma foto da realidade no dia em que você escreveu as opções e as rubricas
E como qualquer regra de negócio, ele precisa ser revisto quando o produto muda
Recapitulando: guarde a resposta completa, acompanhe a proporção de cada opção e as faixas de confiança por semana, compare com uma referência e leia amostras antes de mexer
Os três sinais que pedem revisão são other crescendo, probabilidade dividida entre vizinhas e concentração sem explicação
Próximo passo concreto: começa hoje a guardar choice, probabilities e confidence de cada chamada e monta a primeira visão semanal, com o other como alarme
Pra detalhes do Choice e também do Score (que avalia a informação contra uma escala numérica e também devolve confidence), a referência é a documentação oficial da TypeSafe
E aí, já pegou alguma decisão do Jev desandando no seu produto? Bora trocar uma ideia 😀
Até o próximo post!
Perguntas frequentes
Como saber se o Choice do Jev precisa de novas opções?
Olha a fatia ‘other’ ou ‘none of the above’ crescendo semana a semana nas proporções que você calculou
Se ela sai de um ruído baixo e vira uma fatia relevante do total, é sinal de que o criteria atual não cobre mais os casos que estão chegando
Nesse ponto vale revisar as descrições das opções existentes e considerar adicionar uma nova, lembrando que o mapa criteria aceita até 255 opções
Com que frequência revisar a distribuição de respostas do Jev?
O ritmo semanal é o que o passo a passo deste post usa, comparando a proporção de cada opção com uma semana de referência
Isso dá volume suficiente pra distinguir ruído de mudança real sem esperar meses
Se o seu produto tem pico sazonal forte, compare também semana contra a mesma semana de outro ciclo, não só contra a anterior
O que fazer quando a confiança média do Jev cai sem erro no log?
Primeiro checa a fatia de respostas na faixa baixa, porque ela pode estar subindo mesmo com a média quase parada
Depois confere se a distribuição das probabilities ficou mais espalhada entre as opções, já que confiança baixa vem justamente de distribuição plana
Se os dois sinais aparecem juntos, é hora de revisar o criteria antes de ajustar qualquer limite de confiança
Dá pra confiar só no campo choice para monitorar o Jev?
Não, e esse é o erro comum que o passo 1 deste post aponta
O choice mostra só a opção vencedora, mas o sinal de mudança aparece primeiro em probabilities e em confidence
Sem guardar os três valores completos, não tem como calcular proporção por semana nem faixa de confiança
Quais limites de confiança usar nas decisões do Jev?
A documentação usa 0.5 como piso de revisão e 0.9 antes de ação destrutiva, mas só como exemplo, não como padrão
O número certo depende do custo de uma resposta errada no seu produto, e a própria documentação recomenda testar plotando confiança contra acurácia nos seus dados
Por isso o código deste post deixa PISO_REVISAO e PISO_ACAO como variáveis pra você ajustar
O que significa confidence baixa numa resposta do Jev?
Significa que as probabilities ficaram espalhadas entre várias opções, sem um pico único se destacando
Quando isso vira padrão numa fatia crescente das respostas da semana, é sinal de que as opções do Choice pararam de descrever bem a realidade atual
Nesses casos a faixa baixa de confiança pede humano ou fallback, conforme as três faixas da documentação
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.
