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

diagrama mostrando opções de um Choice do Jev organizadas sem sobreposição
Resposta rápida

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
Curso Recomendado

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.



Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Claude Code

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

Blog | Mais populares