Cuando un tool falla, tu agente tiene tres opciones: reintentar, escalar, o dead-letter. Elegir mal te lleva a uno de tres bugs clásicos:
La solución: política explícita por tipo de error.
| Clase | Ejemplos | Retry |
|---|---|---|
| Transitorio | network timeout, 503, rate limit | SÍ, con backoff exponencial |
| Permanente | unauthorized, 404 not found, schema mismatch | NO. Escalar o dead-letter |
| Negocio | tarjeta vencida, inventario agotado, dato inválido | NO. Notificar al usuario |
La fórmula estándar: delay = initial_delay × 2^attempt + jitter.
El jitter (random pequeño) evita el "thundering herd": si 1000 clientes fallan al mismo tiempo y todos reintentan exactamente a los 500ms, agravás el outage. Con jitter, los reintentos se desparraman.
Para sistemas grandes, agregás un presupuesto de reintentos por sesión: max 5 reintentos totales para toda la sesión del agente, no por error. Sin esto, una cascada de errores transitorios puede generar cientos de reintentos y consumir toda tu cuota.
Cuando los reintentos fallan, ¿qué pasa? Esa es la mitad de la política que la gente olvida:
Una política sin dead-letter es media política. Diseñá los dos lados: qué reintentás, y qué pasa cuando aún reintentando no se arregla.
Escribí el JSON de política completo para los 5 códigos de error. El judge evalúa que cada uno tenga la estrategia correcta y un dead-letter accionable.