Esencia del patron
Fallback-Recovery Agent es un patron donde el agente, ante un error, no termina de inmediato, sino que pasa por un proceso de recuperacion controlado: clasifica el fallo, aplica fallback e intenta reanudar la ejecucion.
Cuando usarlo: cuando es importante no caer en el primer error, sino recuperar la ejecucion con un escenario controlado.
En sistemas reales, los fallos son inevitables:
- timeouts de APIs externas
- indisponibilidad temporal de herramientas
- errores de validacion de salida
- outages parciales de dependencias
El enfoque Fallback-Recovery convierte "error = stop" en "error = escenario de recuperacion controlado".

Problema
Imagina que un agente prepara un reporte diario para un cliente:
- leer metricas desde API
- construir una tabla
- enviar el resultado
En el paso dos, la API devuelve timeout.
Sin logica de recovery, el workflow se detiene.
Un error local no deberia tumbar todo el proceso si el resto de pasos sigue operativo.
Resultado:
- deadline incumplido
- progreso intermedio perdido
- reinicio manual desde cero
- comportamiento impredecible en produccion
Ese es el problema central: sin estrategia de recuperacion, incluso un fallo aislado rompe todo el escenario.
Solucion
Fallback-Recovery introduce una recovery-policy para recuperacion controlada despues de fallos.
Analogia: es como el autoguardado en un editor. Si el programa se cae, no empiezas desde cero: continuas desde el ultimo estado seguro. La misma logica aplica aqui, con limites claros.
Principio clave: no todo error debe terminar en stop duro. Parte de los errores debe clasificarse y recuperarse de forma segura.
El agente puede proponer retry, pero la capa de ejecucion decide:
- si
retryesta permitido - si se necesita
fallback - si hace falta
escalation/stop
Proceso controlado:
- Detectar: registrar el fallo
- Clasificar: determinar tipo de error
- Decidir:
retry/fallback/escalation - Recuperar: continuar desde checkpoint
- Terminar seguro: detener con
stop_reasontransparente
Esto aporta:
- recuperacion de procesos largos tras fallos temporales
- degradacion suave (
cached/partial result) - sin duplicar pasos ya exitosos
- motivo de parada claro
Funciona bien si:
- hay limites
max_retriesymax_fallbacks - se guarda checkpoint tras progreso seguro
- la clasificacion separa
retriable/non-retriable - casos de high-risk no se recuperan automaticamente
El modelo puede "querer" hacer retry infinito, pero la recovery-policy define los limites de recuperacion segura.
Como funciona
Critico: la recuperacion debe tener limites.
max_retriesymax_fallbacksstep_timeoutytotal_timeoutstop_reasonpara cada salida- prohibir “fallback -> retry -> fallback” sin contador
Descripcion completa del flujo: Detect → Classify → Recover → Resume/Stop
Detectar
El sistema registra un fallo: timeout, tool error, invalid output o policy violation.
Clasificar
El error se clasifica por tipo: retriable, tool_unavailable, invalid_output, non_retriable, high_risk.
Recuperar
Se aplica politica: retry con backoff, fallback a otra herramienta, modo degradado (partial result / cached data) o escalacion humana.
Reanudar/Detener
Si recovery tiene exito, el proceso continua desde el ultimo checkpoint. Si no, stop controlado.
En codigo se ve asi
fallbacks_used = 0
for attempt in range(max_retries + 1):
try:
result = run_step(goal, context, timeout_sec=step_timeout)
checkpoint.save(task_id, context, result)
return result
except TimeoutError as err:
kind = "retriable"
except ToolUnavailableError as err:
kind = "tool_unavailable"
except ValidationError as err:
kind = "invalid_output"
except Exception as err:
kind = classify_error(err)
if kind == "retriable" and attempt < max_retries:
sleep(backoff(attempt))
continue
if kind == "tool_unavailable" and fallbacks_used < max_fallbacks:
fallbacks_used += 1
context.append(f"fallback_used={fallbacks_used}")
context.append("route=secondary_tool") # o alt_model / cached_path
continue
if kind == "high_risk":
return escalate_to_human(goal, err, stop_reason="high_risk")
return stop_with_reason(goal, stop_reason=kind, detail=str(err))
Guarda checkpoints tras un paso exitoso o tras progreso parcial seguro (idempotent state). Si no, retry puede duplicar acciones.
Como se ve durante la ejecucion
Goal: generar reporte para cliente
Step 1: recolectar metricas
- timeout en API primaria de analitica
- classify: retriable
- retry #1 -> fail
- retry #2 -> fail
Fallback:
- cambio a API read-replica
- exito
Resume:
- reporte ensamblado
- paso completado sin caida total del proceso
Ejemplo completo de agente Fallback-Recovery
Cuando encaja - y cuando no
Encaja
| Situacion | Por que Recovery encaja | |
|---|---|---|
| ✅ | Herramientas externas inestables y APIs/tooling flaky | Rutas fallback y retries permiten sobrevivir fallos temporales sin romper todo el proceso. |
| ✅ | Tareas largas donde no se puede perder progreso | Checkpoint y resume permiten recuperar desde el ultimo paso estable. |
| ✅ | Requisitos SLA/SLO de resiliencia del proceso | Un loop de recovery ayuda a cumplir objetivos de disponibilidad y confiabilidad. |
| ✅ | Necesitas stop reasons explicitos en vez de silent fail | El patron formaliza causas de parada y mejora la observabilidad de fallos. |
No encaja
| Situacion | Por que Recovery no encaja | |
|---|---|---|
| ❌ | Escenario puntual donde el error no es critico | Una capa de recovery compleja cuesta mas que el beneficio potencial. |
| ❌ | Retry/fallback prohibidos por negocio | No hay rutas de recuperacion permitidas, por eso el patron no aplica. |
| ❌ | Sin checkpoint/state management | Tecnicamente no puedes recuperar progreso de forma correcta tras un fallo. |
Porque este patron agrega complejidad operativa: logica de errores, estado y sobrecarga de mantenimiento.
Diferencia frente a Supervisor
| Supervisor | Fallback-Recovery | |
|---|---|---|
| Cuando se activa | Antes de ejecutar la accion | Despues de fallo o error |
| Rol principal | control de policies y limitacion de riesgo | resiliencia en ejecucion y recuperacion |
| Tipo de decisiones | aprobar / rehacer / bloquear / escalar | retry / fallback / resume / stop |
| Valor clave | Evitar acciones peligrosas | Evitar que el proceso colapse ante errores |
Supervisor es prevencion. Fallback-Recovery es restauracion tras fallo.
Cuando usar Fallback-Recovery (vs otros patrones)
Usa Fallback-Recovery cuando necesitas restaurar ejecucion despues de fallos, en vez de tumbar todo el proceso.
Test rapido:
- si necesitas "retry/fallback/escalation despues de un error" -> Fallback-Recovery
- si necesitas "detener accion riesgosa antes de ejecutar" -> Guarded-Policy Agent
Comparacion con otros patrones y ejemplos
Guia rapida:
| Si la tarea se ve asi... | Usa |
|---|---|
| Necesitas verificacion corta antes de la respuesta final | Reflection Agent |
| Necesitas critica profunda por criterios y reescritura | Self-Critique Agent |
| Necesitas recuperar el proceso tras timeout, exception o caida de herramienta | Fallback-Recovery Agent |
| Necesitas chequeos de policy estrictos antes de una accion riesgosa | Guarded-Policy Agent |
Ejemplos:
Reflection: "Antes de la respuesta final, revisa rapido logica, completitud y errores obvios."
Self-Critique: "Evalua la respuesta con checklist (precision, completitud, riesgos), luego reescribe."
Fallback-Recovery: "Si la API no responde, haz retry -> fuente fallback -> escalacion."
Guarded-Policy: "Antes de enviar datos afuera, verifica policy: ?esta permitido hacerlo?"
Como combinar con otros patrones
- Fallback-Recovery + ReAct: si el fallo ocurre a mitad del loop, el agente repite solo el paso problematico y no reinicia desde cero.
- Fallback-Recovery + Orchestrator: en ejecucion paralela, se recupera solo la rama rota mientras otras subtareas siguen.
- Fallback-Recovery + Supervisor: antes de recuperar, se verifican policies para que fallback no viole reglas de seguridad.
Resumen
Fallback-Recovery Agent:
- Detecta y clasifica fallos
- Aplica policies
retry/fallback - Vuelve a la ejecucion mediante checkpoint
- Detiene de forma controlada si no es posible recuperar
Ventajas y Desventajas
Ventajas
se recupera rapido despues de fallos
reduce tiempos de inactividad
mantiene el proceso estable durante errores
es mas facil controlar escenarios criticos
Desventajas
las rutas fallback deben pensarse por adelantado
la logica adicional complica el sistema
no todos los fallos pueden recuperarse automaticamente
FAQ
Q: ?Alcanza con agregar retries?
A: No. El set minimo seguro es max_retries + backoff + step_timeout + stop_reason. Sin eso, retries se convierten en loop que quema presupuesto.
Q: ?Cuando es mejor fallback que retry?
A: Cuando el error es sistemico: herramienta no disponible, quota agotada o endpoint degradado.
Q: ?Para que checkpoint si ya tenemos fallback?
A: Fallback cambia la ruta de ejecucion, pero checkpoint conserva el progreso para no repetir todo el escenario desde el inicio.
Que sigue
Fallback-Recovery agrega resiliencia ante fallos.
Pero ?como hacer que acciones peligrosas ni siquiera se inicien sin controles de policy?