Saltar al contenido

El paso más frágil de un agente es interpretar lo que el modelo escribió

Un modelo que devuelve una probabilidad tipada en vez de una frase elimina el eslabón que más se rompe en una integración: convertir lenguaje otra vez en dato. Lo que eso cambiaría en un agente que ya tengo funcionando.

8 min de lectura1623 palabras

Tengo un agente de WhatsApp que califica leads. Le llega un mensaje y tiene que decidir dos cosas: si el lead sirve, y si la conversación necesita que entre una persona. Son dos decisiones binarias. Sin embargo, la forma de obtenerlas hoy es pedirle a un modelo de lenguaje que escriba una frase y después convertir esa frase en un booleano.

Ese paso intermedio es el que se rompe. No el modelo: el paso.

Si el modelo responde CALIFICA: sí el código funciona. Si un día responde Sí, este lead califica o Calificado o Creo que sí, aunque habría que confirmar el presupuesto, el código ya no funciona, o peor, funciona mal en silencio. Y el modelo tiene permiso para responder cualquiera de las cuatro, porque lo que se le pidió fue que escribiera.

Lo que es ese paso, dibujado

El eslabón que desaparece Con un modelo de lenguaje la cadena tiene cuatro pasos y el tercero consiste en interpretar texto. Con un modelo que devuelve una decisión tipada son tres y ese paso ya no existe. HOY Mensaje webhook Modelo escribe una frase Interpretar frase a dato Acción enrutar el paso que se rompe TIPADA Mensaje webhook Modelo decide p = 0.94 Acción enrutar un paso menos
El eslabón punteado no aporta información: la traduce, y a veces mal.

Qué devuelve un modelo que no escribe

Esta semana TypeSafe AI publicó Jev, que va justamente por ahí. Lo resumen en tres palabras en su portada: «decisions, not strings» (typesafe.ai). No genera texto, devuelve decisiones tipadas sobre opciones que tú declaras antes.

Su documentación define tres primitivas, y conviene usar sus nombres porque son los de la API (docs.typesafe.ai):

primitiva qué devuelve la pregunta que responde
Noul un valor entre 0 y 1 ¿esto es cierto?
Choice la opción elegida, el reparto entre todas y una confianza ¿de cuál de estas se trata?
Score una puntuación contra una rúbrica, con su reparto y su confianza ¿cuánto, en esta escala?

Dos detalles de esa tabla que no son adorno. El primero es que Choice y Score devuelven el reparto completo, no solo la ganadora: puedes ver si la segunda opción venía pisándole los talones, que es justo cuando conviene que mire una persona. El segundo es que las tres se pueden mezclar en una sola llamada a la API, así que calificar y decidir el escalado no son dos viajes.

Lo interesante no es que sea más rápido. Es que el contrato cambia de lado. Con un modelo de lenguaje, el contrato es una promesa: «responde solo o no», y confías. Con una decisión tipada, el contrato es el tipo, y el modelo no tiene forma de salirse aunque quiera.

Eso convierte un problema de fiabilidad en un problema de calibración, que es mucho mejor sitio donde estar. Un 0.62 te dice que el modelo duda, y puedes escalar a una persona. Una frase que empieza con «creo que» también te lo dice, pero solo si escribiste la expresión regular que lo detecte.

La parte que me interesa más que el modelo

Su documentación insiste en un principio de diseño que vale con Jev y sin Jev: «atomic questions, composed in code». En vez de un prompt que pregunta cinco cosas a la vez y devuelve un párrafo que hay que desmenuzar, se hacen cinco preguntas pequeñas, cada una con su tipo, y la lógica que las combina vive en tu código, no dentro del modelo.

En mi agente eso cambia esto:

text
antes   "analiza este mensaje y dime si el lead califica,
         qué urgencia tiene y si hay que escalar a un humano"
        -> un párrafo del que extraer tres cosas

después  Noul   "el mensaje declara un presupuesto"
         Score  "urgencia del 1 al 5"
         Choice "producto: A, B, C o ninguno"
        -> tres valores, y la decisión la toma un if

La ventaja no es la velocidad, es que cada pregunta se puede probar por separado. Cuando el agente se equivoca hoy, tengo que leer el párrafo para adivinar en qué se equivocó. Con tres respuestas tipadas sé cuál de las tres falló, y puedo medirla contra casos reales sin tocar las otras dos.

Y es un razonamiento que me resulta familiar, porque es el mismo que aplico al levantar un proceso: el problema nunca es la pregunta grande, es que nadie la había partido en las pequeñas que sí tienen respuesta.

Lo que cambiaría en mi agente, y lo que no

Mi agente toma dos decisiones tipadas y una que no lo es.

Se puede tipar

Calificar el lead por presupuesto y urgencia. Decidir si escala a una persona.

Son preguntas con respuestas contables. El texto solo estorba.

No se puede

Escribir la respuesta al cliente con el tono de la marca.

Aquí el texto es el producto, no un envoltorio del que extraer un dato.

Esta es la parte que me parece que se va a malinterpretar cuando el tema se ponga de moda. Un modelo que no escribe no sustituye al que escribe: sustituye a las partes de tu sistema donde estabas usando uno que escribe para obtener algo que no era texto. En mi agente eso son dos de tres pasos, y el tercero sigue necesitando un modelo de lenguaje entero.

Dicho de otro modo: no es un modelo más barato, es una pieza distinta. Y si el reparto en tu sistema se parece al mío, la mayor parte de las llamadas que haces hoy no necesitaban una frase.

Lo que no voy a afirmar

No he integrado Jev. Esto es la lectura de un cambio de enfoque sobre un sistema que sí tengo funcionando, y hasta ahí llega.

Sobre las cifras, conviene mirar de dónde salen. TypeSafe publica en su portada «193.6x Faster, 444.6x Cheaper», y debajo el detalle del que sale esa cuenta: 0,114 segundos frente a 8,566, y 42 dólares por cada mil millones de tokens de entrada (typesafe.ai).

Son cifras del fabricante sobre una tarea que eligió el fabricante. No digo que sean falsas, digo que un 193,6 con un decimal invita a creer que es una constante, y es un cociente entre dos medidas concretas. El número que yo querría antes de mover nada no es ese: es cuánto tarda en mi caso, que tiene mensajes de WhatsApp en español chileno con faltas de ortografía y nombres de producto que no salen en ningún corpus.

Lo que mediría antes de mover nada en producción son tres cosas, y ninguna es la latencia:

Las tres mediciones

Si la probabilidad está calibrada de verdad. Que de cien casos marcados con 0.9 acierte alrededor de noventa. Sin eso, el número da una falsa sensación de control y es peor que no tenerlo.

Dónde está el umbral que conviene. No es 0.5. Depende de qué cuesta más, un lead perdido o un ejecutivo interrumpido, y eso lo decide el negocio, no el modelo.

Qué pasa con lo que no encaja en ninguna opción. Declarar las opciones de antemano es la ventaja, y también el límite. Busqué esto en su documentación y no lo encontré: explica cómo declarar las opciones y cómo componer preguntas, pero no qué hacer con el caso que no previste. Puede que me lo saltara, o que todavía no esté escrito.

Esa tercera es la que más me interesa, porque es la misma que aparece cada vez que llevo un proceso de papel a un sistema. Siempre hay un caso que la operación resuelve hablando y que el formulario no contempla. Un modelo que solo puede contestar entre las opciones que le diste hereda exactamente ese problema, y la solución probablemente sea la misma de siempre: una salida explícita para «esto no es ninguna de las anteriores», y alguien mirándola.

  • arquitectura
  • ia
  • integracion

Todas las notas