Jev face à un LLM

Ils ne se disputent pas le même poste. Un LLM écrit ; Jev décide. La comparaison utile n’est pas de savoir lequel est le plus intelligent, mais ce que votre code doit faire de la réponse — et cette différence est assez grande pour changer l’écriture du programme autour.

La même décision, écrite des deux façons

Aiguiller un ticket de support vers l’une de quatre files. Voici ce que chaque camp vous coûte réellement en code.

Avec un modèle de langage

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

Avec 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);

La boucle de reprise est le signe. Elle existe dans la première version parce que la réponse arrive sous forme de texte qui peut ne pas s’analyser, ou s’analyser en une file qui n’a jamais figuré sur la liste. Dans la seconde, elle n’a plus où vivre : la réponse est l’une de QUEUES par construction. Ce qui la remplace est une tout autre branche — une qui se déclenche quand le modèle est incertain plutôt que quand il est malformé.

Ce que la seconde version peut voir

Ce ticket, passé pour de bon dans Jev. La gagnante n’a rien de surprenant ; le dauphin est la partie qu’une étiquette nue aurait jetée.

“Notre connexion SSO renvoie une 500 depuis la version 4.2 de ce matin. Personne dans l’équipe ne peut entrer. Pareil sur Chrome et Safari, sur deux locataires différents.”
Technique à 87 %, sur 4 options
87 % Technique

Technique l’emporte à 87 %, mais Compte garde 13 % — et c’est exactement le bon désaccord, parce qu’une panne SSO est réellement à la frontière des deux. Une étiquette nue l’aurait caché. Si une erreur d’aiguillage a un coût, 13 % est le nombre sur lequel poser un seuil.

Côte à côte

Ce que vous envoyez
Jev

Un state plus une carte de questions typées.

LLM

Un prompt, portant en général le schéma et les règles sous forme de prose.

Ce qui revient
Jev

Une réponse typée par question, avec une probabilité pour chaque option.

LLM

Du texte. Du JSON si vous avez demandé gentiment et que le mode est pris en charge.

Votre ligne de code suivante
Jev

Un switch sur une valeur qui ne peut être que l’une des vôtres.

LLM

Une analyse, puis une validation, puis une branche pour quand l’une des deux a échoué.

Comment il échoue
Jev

Il peut se tromper sur votre texte. Il ne peut pas renvoyer une forme que vous n’avez pas définie.

LLM

Il peut aussi se tromper sur la forme — un champ manquant, une étiquette jamais listée, de la prose enroulée autour du JSON.

Poser dix questions
Jev

Dix questions dans une requête, évaluées contre le state en parallèle.

LLM

Un prompt surchargé, ou dix appels.

Incertitude
Jev

Une distribution et une valeur de confiance, sur chaque Choice et chaque Score.

LLM

Ce que le texte affirme de sa propre certitude.

Les chiffres

TypeSafe les publie ; ce sont les chiffres de l’éditeur, pas nos mesures.

70–500 ms

réponse de bout en bout, contre 3–329 s pour les modèles de pointe

40–200×

plus rapide sur les requêtes de forme Système Un

0,042 $

par million de jetons d’entrée, sortie gratuite

Ce que nous pouvons mesurer : sur 14 exécutions faites depuis ce site, l’aller-retour médian est de 329 ms — et la plupart de ces requêtes portaient neuf questions, pas une.

Quand le LLM est le bon outil

La plupart du temps, si ce qu’il vous faut c’est du langage. Jev n’a pas d’avis à expliquer et rien à dire.

  • Il vous faut de la prose — une réponse, un résumé, un message de commit, une explication de la décision plutôt que la décision.
  • Il vous faut du code écrit, ou un plan, ou tout travail ouvert dont l’ensemble des réponses n’est pas connu avant l’appel.
  • L’ensemble des réponses possibles est réellement illimité. Extraire un nom arbitraire n’est pas un Choice sur 255 options.
  • Il vous faut une chaîne de raisonnement inspectable. Jev renvoie un jugement, pas les étapes qui y mènent.
  • Le volume est faible et la forme est lâche. Une boucle de reprise qui tourne deux fois par jour ne mérite pas d’être conçue pour disparaître.

Les deux se composent mieux qu’ils ne s’opposent. Le cadrage de TypeSafe lui-même, c’est Système Un pour le jugement structuré et rapide et un modèle ordinaire en Système Deux derrière — filtrez l’entrée avec un Noul, aiguillez avec un Choice, et passez ce qui survit au modèle qui sait vraiment écrire.

Poursuivre la lecture

Faites la comparaison vous-même

Collez un ticket, un brouillon, un prompt — n’importe quoi autour de quoi vous auriez sinon écrit une boucle d’analyse — et regardez neuf réponses typées revenir d’une seule requête.

Ouvrir le terrain de jeu