Choice — escolher uma opção no Jev

Um Choice é um dos três tipos de pergunta do modelo Jev, da TypeSafe. Ele escolhe exatamente uma opção de um conjunto que você define e devolve a vencedora, uma probabilidade para cada opção e um valor de confiança.

Um Choice entrega ao modelo um conjunto nomeado de opções e recebe de volta exatamente uma delas. Os nomes das opções são seus, então a resposta já é um valor sobre o qual seu código pode dar um switch — não há string para normalizar nem possibilidade de um nome que você nunca definiu.

A parte interessante não é a vencedora, mas a distribuição que vem junto. Cada opção ganha uma probabilidade, elas somam um, e a segunda colocada diz o que o modelo quase escolheu.

Uma resposta real

Enviada para jev-1.13.0. Os números abaixo são o que voltou.

O state

Nosso login SSO está retornando 500 desde a versão 4.2 desta manhã. Ninguém do time consegue entrar. O mesmo no Chrome e no Safari, em dois inquilinos diferentes.

A pergunta

Qual time deveria assumir este chamado?

83%
alta
Técnico com 87%, de 4 opções
87% Técnico

Técnico vence com 87%, mas Conta fica com 13% — e essa é exatamente a discordância certa, porque uma falha de SSO fica mesmo na fronteira entre os dois. Um rótulo cru teria escondido isso. Se errar o roteamento tem custo, 13% é o número sobre o qual colocar o limiar.

A requisição e a resposta, na íntegra
Requisição
{
  "state": "Our SSO login has been throwing a 500 since the 4.2 release this morning. Nobody on the team can get in. Same on Chrome and Safari, two different tenants.",
  "model": "jev-latest",
  "questions": {
    "queue": {
      "type": "choice",
      "instructions": "Which team should own this ticket?",
      "criteria": {
        "Billing": "Payments, invoices, refunds, plan changes",
        "Technical": "Bugs, outages, API errors, integrations",
        "Account": "Login, permissions, seats, data export",
        "Sales": "Pricing, upgrades, contracts"
      }
    }
  }
}
Resposta
{
  "model": "jev-1.13.0",
  "answers": {
    "queue": {
      "type": "choice",
      "choice": "Technical",
      "confidence": 0.83,
      "probabilities": {
        "Technical": 0.87,
        "Sales": 0,
        "Account": 0.13,
        "Billing": 0
      }
    }
  }
}

O que a resposta contém

type "choice"
Corresponde ao tipo da pergunta.
choice string
A opção de maior probabilidade.
probabilities map<string, number>
Cada opção que você definiu, com sua probabilidade. Elas somam 1.
confidence number
De 0 a 1, calculado a partir de como as probabilidades se espalham. Um pico claro é confiança alta; um espalhamento plano é baixa.

Regras e limites

  • criteria associa cada opção a uma descrição, ou a null quando o nome já se explica.
  • Um Choice aceita até 255 opções. Dê ao modelo a lista inteira de times ou categorias em vez de uma seleção — cada opção custa só alguns tokens.
  • Acrescente uma opção Other ou None of the above quando sua lista puder não cobrir toda entrada, para o modelo ter como dizer que nenhuma serve.

Use um Choice quando

  • As respostas são um conjunto fechado que você já tem no código — filas, categorias, status, próximas ações.
  • Você quer ver a segunda colocada, não só a vencedora.
  • Você está roteando e o custo de cada destino difere o bastante para você querer um limiar por opção.

Use outra coisa quando

  • As opções são degraus ordenados de uma mesma escala — baixo, médio, alto. Um Score sabe que são ordenados e pode cair entre eles; um Choice os trata como rótulos sem relação.
  • Mais de uma opção pode ser verdadeira ao mesmo tempo. Faça um Noul por opção.

Os outros dois

Faça um Choice sobre o seu próprio texto

O playground manda para o Jev o que você colar e desenha cada resposta. Sem conta, sem chave.

Abrir o playground