24 de septiembre.
Kanvas está en medio de una presentación.
Las pruebas del día anterior habían sido todas exitosas. Nuestro PO estaba feliz con los resultados. Todo estaba listo.
Yo me había tomado mi batido de proteína en la mañana y estaba preparado para la presentación.
Cuando, de repente, recibo una llamada:
—¿Qué pasa con nuestros agentes? No funciona ninguno.
Okay...
Reviso.
Y tiene razón.
No funciona ninguno. 💀
¿Qué está pasando?
El código base no había cambiado en las últimas 24 horas. Nuestro core seguía operativo, las APIs estaban funcionando, las reglas de negocio estaban funcionando.
Todo estaba bien.
Excepto nuestros agentes.
Entonces reviso nuestro sistema de alertas y veo que Google acaba de anunciar un nuevo error:
429 RESOURCE_EXHAUSTED
💀
Okay, luego de toda esa introducción dramática de mi parte, vamos a lo que realmente pasó.
La semana pasada nuestros modelos de inteligencia artificial tuvieron un pico de uso justo en medio de una presentación.
Y eso nos obligó a hacernos una pregunta que, hasta ese momento, no nos habíamos planteado seriamente:
¿Cómo hacemos que nuestros agentes sean altamente disponibles?
El problema
Kanvas Agent se ha convertido en uno de nuestros productos punta de lanza.
Con Kanvas siempre hemos tenido algo muy claro: el core está bajo nuestro control.
Las reglas de negocio, los recursos, las APIs, la infraestructura... todo pasa por nuestras manos.
Si algo falla, podemos investigarlo, escalarlo, desplegar otra instancia o cambiar nuestra infraestructura.
Tenemos redundancia, autoscaling, health checks, blue/green deployments y un montón de herramientas que llevamos años utilizando para construir sistemas altamente disponibles.
Pero ahora estamos viviendo una nueva ola con la inteligencia artificial.
Y con ella llegó un problema nuevo.
Puedes tener tu infraestructura funcionando perfectamente, tu API respondiendo, tu base de datos saludable y absolutamente todo tu sistema operativo...
pero si el proveedor que alimenta tus agentes deja de responder:
Tus agentes están muertos.
Cuando utilizamos un producto de un tercero, hay una parte de nuestra infraestructura que simplemente no controlamos.
Solo nos queda confiar.
Y esta vez...
nuestra fe no fue suficiente. 😂
Entonces, ¿qué hacemos?
Afortunadamente, la presentación se pudo salvar gracias a nuestro PO, Estrella.
Pero el incidente dejó una pregunta sobre la mesa.
Nuestro Lead propuso una solución bastante sencilla conceptualmente:
Si una petición a un agente falla, la petición no debería morir con ese modelo.
Debería existir otro camino.
Si el modelo A no está disponible, intentamos con el modelo B.
Si el proveedor completo está teniendo problemas, pasamos al proveedor C.
Y ahí comenzamos a implementar algo que internamente llamamos Routing.
Aunque, siendo más específicos, una de las estrategias principales del router es el fallback.
Ahora nuestro framework agéntico puede recibir varios modelos y proveedores.
Una petición puede comenzar intentando utilizar nuestro modelo principal.
Si ese modelo falla, el mensaje no muere.
El router intenta con el siguiente modelo disponible.
Y si el problema afecta al proveedor completo, podemos continuar con otro proveedor.
Algo parecido a esto:
Modelo A → Modelo B → Proveedor B → Modelo C
Hasta que encontremos una ruta disponible para responder la petición.
¿Qué aprendimos?
Todo problema termina dejando alguna lección.
La nuestra fue bastante sencilla:
No podemos construir agentes altamente disponibles dependiendo de un solo modelo o de un solo proveedor.
Actualmente podemos asignar varios modelos de un mismo proveedor y, al mismo tiempo, tener diferentes proveedores con diferentes modelos.
Eso también nos abre otra puerta interesante.
No necesariamente tenemos que depender siempre de los modelos más grandes o cerrados.
Podemos comenzar a experimentar con modelos abiertos, proveedores alternativos y diferentes estrategias dependiendo del tipo de agente que esté ejecutándose.
Kanvas ya tiene esta solución implementada y actualmente la tenemos en fase de pruebas.
Y sí...
Quizá dramaticé un poco el principio.
Pero cuando ayer todo funcionaba perfectamente y hoy todos tus agentes mueren justo en medio de una presentación, créeme:
se siente exactamente así. 💀
Quiero comenzar a compartir más de este día a día construyendo funcionalidades para Kanvas: qué problemas encontramos, qué se rompe y qué terminamos construyendo para solucionarlo.
Así que gracias por leerme.
Y si conoces algún modelo —abierto, chino, barato, raro, lo que sea 😂— que creas que deberíamos poner a prueba con nuestro nuevo routing, déjamelo en los comentarios.
Top comments (0)