Jev versus um LLM

Eles não disputam a mesma vaga. Um LLM escreve; o Jev decide. A comparação útil não é qual é mais esperto, mas o que seu código precisa fazer com a resposta — e essa diferença é grande o bastante para mudar como o programa ao redor é escrito.

A mesma decisão, escrita das duas formas

Rotear um chamado de suporte para uma de quatro filas. Aqui está o que cada lado realmente custa em código.

Com um modelo de linguagem

const res = await llm.chat({
  messages: [{ role: "user", content:
    `Route this ticket. Reply with JSON: {"queue": "Billing"|"Technical"|"Account"|"Sales"}
     Ticket: ${ticket}` }],
  response_format: { type: "json_object" }
});

let queue;
try {
  queue = JSON.parse(res.content).queue;        // may not be JSON
} catch {
  return retry();                               // ...so there is a retry
}
if (!QUEUES.includes(queue)) return retry();    // may be a queue you never had
// and no idea how close the call was

Com o Jev

const { answers } = await jev.systemOne({
  state: ticket,
  model: "jev-latest",
  questions: { queue: { type: "choice", instructions:
    "Which team should own this ticket?", criteria: QUEUES } }
});

const { choice, probabilities, confidence } = answers.queue;
// choice is one of QUEUES. It cannot be anything else.
if (confidence < 0.7) return humanReview(ticket, probabilities);
route(choice);

O laço de retentativa é o sinal. Ele existe na primeira versão porque a resposta chega como texto que pode não parsear, ou parsear numa fila que nunca esteve na lista. Na segunda ele não tem onde morar: a resposta é uma de QUEUES por construção. O que entra no lugar é um ramo totalmente diferente — um que dispara quando o modelo está inseguro, não quando está malformado.

O que a segunda versão consegue ver

Aquele chamado, passado pelo Jev de verdade. A vencedora não surpreende; a segunda colocada é a parte que um rótulo cru teria jogado fora.

“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.”
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.

Lado a lado

O que você envia
Jev

Um state mais um mapa de perguntas tipadas.

LLM

Um prompt, normalmente carregando o esquema e as regras como prosa.

O que volta
Jev

Uma resposta tipada por pergunta, com probabilidade para cada opção.

LLM

Texto. JSON se você pediu com jeitinho e o modo é suportado.

Sua próxima linha de código
Jev

Um switch sobre um valor que só pode ser um dos seus.

LLM

Um parse, depois uma validação, depois um ramo para quando qualquer um dos dois falhar.

Como ele falha
Jev

Ele pode errar sobre o seu texto. Não pode devolver uma forma que você não definiu.

LLM

Ele também pode errar na forma — um campo faltando, um rótulo que você nunca listou, prosa embrulhando o JSON.

Perguntar dez coisas
Jev

Dez perguntas numa requisição, avaliadas contra o state em paralelo.

LLM

Um prompt lotado, ou dez chamadas.

Incerteza
Jev

Uma distribuição e um valor de confiança em cada Choice e Score.

LLM

O que o texto afirmar sobre a própria certeza.

Os números

A TypeSafe publica estes; são números do fornecedor, não medições nossas.

70–500 ms

resposta de ponta a ponta, contra 3–329 s dos modelos de fronteira

40–200×

mais rápido em consultas no formato Sistema Um

US$ 0,042

por milhão de tokens de entrada, saída gratuita

O que dá para medir: ao longo de 14 execuções feitas por este site, a mediana da ida e volta é 329 ms — e a maioria dessas requisições carregava nove perguntas, não uma.

Quando o LLM é a ferramenta certa

Na maior parte do tempo, se o que você precisa é de linguagem. O Jev não tem opinião para explicar nem nada a dizer.

  • Você precisa de prosa — uma resposta, um resumo, uma mensagem de commit, uma explicação da decisão em vez da decisão.
  • Você precisa de código escrito, de um plano, ou de qualquer coisa aberta em que o conjunto de respostas não seja conhecido antes da chamada.
  • O conjunto de respostas possíveis é genuinamente ilimitado. Extrair um nome arbitrário não é um Choice sobre 255 opções.
  • Você precisa de uma cadeia de raciocínio inspecionável. O Jev devolve um julgamento, não os passos por trás dele.
  • O volume é baixo e a forma é frouxa. Um laço de retentativa que roda duas vezes por dia não vale o esforço de projetar para eliminar.

Os dois se combinam melhor do que competem. O próprio enquadramento da TypeSafe é Sistema Um para o julgamento estruturado e rápido e um modelo comum como Sistema Dois atrás dele — filtre a entrada com um Noul, roteie com um Choice e passe o que sobreviver para o modelo que sabe mesmo escrever.

Continue lendo

Faça você mesmo a comparação

Cole um chamado, um rascunho, um prompt — qualquer coisa em volta da qual você teria escrito um laço de parsing — e veja nove respostas tipadas voltarem de uma única requisição.

Abrir o playground