Como desenhar as opções de um Choice do Jev sem que elas se sobreponham

Para desenhar as opções de um Choice do Jev sem sobreposição, cada pergunta precisa tomar uma única decisão, e as opções precisam ser mutuamente exclusivas e exaustivas. Corte opções sinônimas ou que são subconjunto de outra. Escreva a descrição de cada opção no formato o que é, não serve para e exemplos, deixando clara a borda com a opção vizinha. Feche a lista com uma opção residual (other ou none) por último e mantenha os nomes estáveis. Se a confidence vier baixa e a probabilidade dividida, duas opções estão disputando a mesma entrada
Fala aí, beleza? Se as opções do seu Choice do Jev disputam a mesma entrada, o resultado é um só: probabilidade dividida e confidence lá embaixo 😛
Se liga no contexto: o Jev é o modelo ‘System One’ da TypeSafe AI
Ele devolve decisões tipadas com probabilidades calibradas, em vez de texto
O Choice é um dos três tipos de pergunta dele, junto com Score e Noul
Aqui o papo é SÓ o desenho das opções, beleza? Qual tipo de pergunta usar fica pra outro post
Curso de Jev: Sistemas Mais Inteligentes, Rápidos e Robustos
Desenvolva sistemas mais inteligentes, rápidos e robustos com Jev
Antes de desenhar as opções: o que você precisa ter claro
Três coisas, bem rápidas, antes de sair escrevendo rótulo
Pra que serve um Choice?
Segundo a documentação do Choice, ele serve pra opções sem ordem entre si
Exemplo: qual time atende um ticket, ou a qual categoria um produto pertence
Se as suas opções têm ordem (tipo uma escala), o caso é outro tipo de pergunta, o Score, que trabalha com escalas ordenadas
O que o Choice devolve?
A resposta traz três coisas:
- a opção escolhida
- uma probabilidade pra cada opção
- uma confidence de 0 a 1
Guarda isso, porque é justamente nessa resposta que tu vai diagnosticar opção sobreposta lá na frente 🙂
Se ainda tá decidindo como tratar esse retorno no seu sistema, vale ver como desenhar o schema de saída do Jev
Quantas opções um Choice aceita?
Até 255 opções
Isso é o limite, não é meta, né? Quanto mais opção, mais fronteira pra você cuidar
Passo a passo para montar opções mutuamente exclusivas e exaustivas
Antes do como, o porquê
Mutuamente exclusivas: cada entrada cabe em UMA opção só
Exaustivas: toda entrada possível cabe em ALGUMA opção
Se falha a primeira, as opções brigam entre si. Se falha a segunda, o modelo é forçado a encaixar a entrada onde não cabe…
Os exemplos abaixo são só estrutura textual, beleza? Não é sintaxe da API
1. Defina a única decisão da pergunta:
Escreve numa frase o que essa pergunta decide
Se precisar de um ‘e’ no meio, provavelmente são duas perguntas
Decisão: qual time atende este ticket?
(e só isso)
O erro comum deste passo: misturar duas decisões num mesmo Choice
Tipo colocar lado a lado ‘time_financeiro’ e ‘urgente’
Um ticket pode ser do financeiro E urgente ao mesmo tempo, então as opções nunca vão ser exclusivas. Urgência é outra decisão, outra pergunta
2. Liste as candidatas e corte as que dividem a mesma entrada:
Joga todas as opções que vierem na cabeça, depois passa a tesoura
Pra cada par, pergunta: existe entrada que cabe nas duas?
Candidatas:
- cancelamento
- cancelar_assinatura <- sinônimo de cancelamento, corta
- reembolso
- reembolso_parcial <- subconjunto de reembolso, junta ou separa com borda clara
- duvida_tecnica
O erro comum deste passo: deixar duas opções que são sinônimas, ou uma que é subconjunto da outra
Aí o modelo fica dividido entre as duas e com razão, porque as duas estão certas haha
3. Escreva a descrição de cada opção com o que é, não serve para e exemplos:
Aqui mora o trabalho pesado
A documentação diz que a descrição é o que faz o modelo entender o que cada rótulo significa, e por isso ela pesa mais que o nome
A comunidade sugere estruturar assim: o que é, o que não serve para, exemplos. E, principalmente, apontar a borda com a vizinha
buy_intent
o que é: a pessoa quer comprar ou fechar um pedido
não serve para: dúvida sobre valor sem intenção clara de compra (isso é price_question)
exemplos: "quero fechar 3 licenças", "como faço pra comprar?"
price_question
o que é: pergunta sobre valor, desconto ou forma de cobrança
não serve para: pedido de compra já decidido (isso é buy_intent)
exemplos: "quanto custa o plano anual?", "tem desconto pra estudante?"
Percebe que cada ‘não serve para’ aponta pra vizinha? É isso que desenha a fronteira
O erro comum deste passo: caprichar no nome do rótulo e deixar a descrição vaga
Um rótulo lindo tipo ‘intencao_comercial’ com descrição ‘mensagens comerciais’ não ajuda o modelo em nada
4. Feche a exaustividade com uma opção residual por último:
Se existe chance da lista não cobrir todas as entradas, os guias da comunidade recomendam uma opção ‘other’ ou ‘none’
E sugerem deixar ela por último na lista
other
o que é: entrada que não se encaixa em nenhuma das opções acima
não serve para: entrada que cabe em alguma opção, mesmo que com pouca informação
exemplos: "oi", mensagem em branco, assunto fora do escopo do produto
O erro comum deste passo: usar a residual como balaio de preguiça
Ela é saída de emergência, não depósito de tudo que deu trabalho classificar
Se a ‘other’ começa a receber muita coisa, é sinal de que tá faltando opção na lista
5. Mantenha os nomes estáveis:
Definiu ‘buy_intent’? Fica ‘buy_intent’
Seu código lá na frente depende daquele rótulo, e as suas comparações de resultado também
O erro comum deste passo: renomear opções no meio do caminho
Já imaginou comparar resultado de antes e depois com o nome trocado no meio? Dor de cabeça garantida 😀
Como saber se duas opções do Choice estão competindo pela mesma entrada
A boa notícia: o próprio Jev te entrega o diagnóstico
Mas antes, que confidence é essa?
É um valor de 0 a 1 calculado pelo formato da distribuição de probabilidades
Probabilidade concentrada numa opção dá confidence alta. Probabilidade espalhada dá confidence baixa
Então, quando opções brigam, a distribuição espalha e a confidence cai. Bora ver os sintomas?
Sintoma 1: confidence baixa com probabilidade dividida entre duas opções
Na documentação do Choice tem um exemplo de ticket que pertence a dois times, e ele sai com confidence dividida de 0,42
Causa: a fronteira entre os dois times está ambígua, a entrada cabe nos dois
Solução: reescreve o ‘não serve para’ de cada lado, dizendo com todas as letras o que vai pro outro time
Sintoma 2: uma opção lidera sem folga e o resto se espalha
Outro exemplo da documentação do Choice: a resposta de requested_resolution pende pra refund com 0,40, replacement e exchange dividem quase todo o resto, e a confidence fica em 0,20
Causa: opções vizinhas sem borda descrita
Solução: descreve as bordas e confere se as opções não são só variações da mesma decisão
Se forem, volta no passo 2 e junta ou separa com critério claro
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| Confidence baixa, probabilidade dividida entre duas opções | Fronteira ambígua entre as duas | Reescrever o ‘não serve para’ de cada lado |
| Uma opção lidera sem folga, resto espalhado | Vizinhas sem borda descrita | Descrever bordas e checar se são a mesma decisão |
Como prevenir?
Antes de publicar a pergunta, revisa as descrições em PARES vizinhos
Pra cada par, lê o ‘não serve para’ de um e vê se aponta pro outro
Se não aponta, tem fronteira aberta ali…
E quando a decisão nem chega? Aí o problema é outro, e vale ler sobre timeout e fallback no Jev
Resumo e próximo passo
Recapitulando: opções claras, exclusivas e exaustivas
Uma decisão por pergunta, nada de sinônimo nem subconjunto, residual por último e nomes que não mudam
E a descrição fazendo o trabalho pesado, porque é ela que o modelo usa pra entender cada rótulo
O próximo passo é prático, faça o teste!
- pega um Choice que você já tem
- reescreve as descrições no formato o que é, não serve para e exemplos
- inclui a opção residual por último
- compara a confidence das respostas antes e depois
Se a confidence subir e a probabilidade concentrar, as fronteiras ficaram mais claras 🙂
Até o próximo post!
Perguntas frequentes
Quantas opções um Choice do Jev pode ter?
Até 255 opções. Isso é o teto, não é meta: quanto mais opção na lista, mais fronteira você precisa desenhar com cuidado pra elas não se sobreporem.
Qual a diferença entre Choice e Score no Jev?
Choice serve pra opções sem ordem entre si, tipo qual time atende um ticket ou a qual categoria um produto pertence. Score entra quando as opções têm uma ordem, como uma escala.
Por que a descrição da opção importa mais que o nome do rótulo?
Porque é a descrição que faz o modelo entender o que aquele rótulo significa de verdade. Um nome bonito com descrição vaga não ajuda o Jev a decidir nada, a fronteira entre opções vizinhas mora no texto da descrição, não no rótulo.
O que a confidence de um Choice representa?
Um valor de 0 a 1 calculado a partir do formato da distribuição de probabilidades entre as opções. Distribuição concentrada numa opção só dá confidence alta, distribuição espalhada entre várias opções dá confidence baixa.
Preciso sempre colocar uma opção ‘other’ no Choice?
Se existe chance da sua lista não cobrir todas as entradas possíveis, sim, os guias da comunidade recomendam essa opção residual. Ela fica por último e funciona como saída de emergência, não como balaio pra jogar tudo que dá trabalho classificar.
Posso trocar o nome de uma opção do Choice depois que já está em produção?
O recomendado pelos guias da comunidade é manter os nomes estáveis assim que definidos. Seu código e suas comparações de resultado dependem daquele rótulo, trocar no meio do caminho complica a comparação entre o antes e o depois.
Formações
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
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.
