Jev frente a un LLM
No compiten por el mismo trabajo. Un LLM escribe; Jev decide. La comparación útil no es cuál es más listo, sino qué tiene que hacer tu código con la respuesta, y esa diferencia es lo bastante grande como para cambiar cómo se escribe el programa que hay alrededor.
La misma decisión, escrita de las dos formas
Enruta un ticket de soporte a una de cuatro colas. Esto es lo que cada lado te cuesta realmente en código.
Con un modelo de lenguaje
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 wasCon 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);El bucle de reintentos es la señal. Existe en la primera versión porque la respuesta llega como texto que puede no parsearse, o parsearse a una cola que nunca estuvo en la lista. En la segunda no tiene dónde vivir: la respuesta es una de QUEUES por construcción. Lo que la sustituye es una rama completamente distinta, una que se dispara cuando el modelo está inseguro y no cuando está mal formado.
Lo que puede ver la segunda versión
Ese ticket, pasado por Jev de verdad. La ganadora no sorprende; la segunda es la parte que una etiqueta pelada habría tirado.
Técnico gana con un 87 %, pero Cuenta se queda con un 13 %, y ese es justo el desacuerdo correcto, porque un fallo de SSO sí está en la frontera entre ambos. Una etiqueta pelada lo habría escondido. Si equivocarse en el enrutado tiene un coste, el 13 % es el número sobre el que poner el umbral.
Lado a lado
- Qué envías
- Jev
Un state más un mapa de preguntas tipadas.
LLMUn prompt, normalmente con el esquema y las reglas escritos en prosa.
- Qué vuelve
- Jev
Una respuesta tipada por pregunta, con probabilidad para cada opción.
LLMTexto. JSON si lo pediste con educación y el modo está soportado.
- Tu siguiente línea de código
- Jev
Un switch sobre un valor que solo puede ser uno de los tuyos.
LLMUn parseo, luego una validación, y luego una rama por si falló cualquiera de los dos.
- Cómo falla
- Jev
Puede equivocarse sobre tu texto. No puede devolver una forma que no definiste.
LLMTambién puede equivocarse en la forma: un campo que falta, una etiqueta que nunca listaste, prosa envolviendo el JSON.
- Preguntar diez cosas
- Jev
Diez preguntas en una petición, evaluadas contra el state en paralelo.
LLMUn prompt abarrotado, o diez llamadas.
- Incertidumbre
- Jev
Una distribución y un valor de confianza, en cada Choice y cada Score.
LLMLo que el texto afirme sobre su propia certeza.
Las cifras
Las publica TypeSafe; son cifras del proveedor, no mediciones nuestras.
respuesta de extremo a extremo, frente a 3–329 s de los modelos de frontera
más rápido en consultas con forma de Sistema Uno
por millón de tokens de entrada, salida gratis
Lo que sí podemos medir: a lo largo de 14 ejecuciones hechas desde este sitio, la mediana de ida y vuelta es 329 ms, y la mayoría de esas peticiones llevaban nueve preguntas, no una.
Cuándo el LLM es la herramienta adecuada
Casi siempre, si lo que necesitas es lenguaje. Jev no tiene opinión que explicar ni nada que decir.
- Necesitas prosa: una respuesta, un resumen, un mensaje de commit, una explicación de la decisión en vez de la decisión.
- Necesitas que escriba código, o un plan, o cualquier cosa abierta en la que el conjunto de respuestas no se conoce antes de la llamada.
- El conjunto de respuestas posibles es de verdad ilimitado. Extraer un nombre arbitrario no es un Choice sobre 255 opciones.
- Necesitas una cadena de razonamiento que puedas inspeccionar. Jev devuelve un juicio, no los pasos que hay detrás.
- El volumen es bajo y la forma es laxa. Un bucle de reintentos que corre dos veces al día no merece que lo diseñes para eliminarlo.
Los dos se componen mejor de lo que compiten. El propio planteamiento de TypeSafe es Sistema Uno para el juicio estructurado y rápido y un modelo corriente como Sistema Dos detrás: filtra la entrada con un Noul, enruta con un Choice y pásale lo que sobreviva al modelo que sí sabe escribir.
Seguir leyendo
Haz tú mismo la comparación
Pega un ticket, un borrador, un prompt —cualquier cosa alrededor de la que, si no, habrías escrito un bucle de parseo— y mira volver nueve respuestas tipadas de una sola petición.
Abrir el patio de juegos