Error Recovery en AI Agents: Por Qué el Try-Catch No Es Suficiente y Cómo Implementar un Sistema de Clasificación que No Falle

Error Recovery en AI Agents: Por Qué el Try-Catch No Es Suficiente y Cómo Implementar un Sistema de Clasificación que No Falle

Programación· 7 min de lectura

El 95% de los AI Agents que Construyes Hoy se Van a Romper en Producción

No es culpa del modelo. Es culpa de tu try-catch.

La mayoría de los desarrolladores tratan los AI Agents como software determinista. Escribís código que asume que el LLM va a devolver JSON válido. Que la tool call va a funcionar. Que el contexto va a caber en la ventana.

Y cuando falla, ponéis un try-catch.

El problema no es que los agents fallen. Es que los tratáis como funciones puras cuando son sistemas probabilísticos con estado.

El error recovery no es un tema de manejo de excepciones. Es un tema de arquitectura de clasificación y checkpoints humanos.

Y si no lo resolvéis ahora, vais a acumular un 40% de deuda técnica que se paga después en debugging nocturno.

Voy a contaros exactamente cómo lo hago yo en producción. Sin teoría. Con código.

Por Qué los Try-Catch Fallan con LLMs

Un try-catch asume que el error es una excepción. Algo excepcional.

Pero en sistemas con LLMs, los errores semánticos — output malformado, alucinaciones, tool calls inventadas — no son excepciones. Son el comportamiento esperado en un porcentaje de casos.

Try-catch clásico:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Esto funciona en tu entorno de desarrollo con 3 ejecuciones. En producción, con escala y variabilidad de inputs, el rate de errores semánticos crece.

Y cuando falla, falla sin dejar rastro de por qué.

Error Classifier:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Un error que ocurre el 5-10% de las veces no es una excepción. Es un patrón. Y los patrones necesitan su propia lógica de manejo.

La diferencia entre re-intentar y re-prompting es el 90% de los fallos en producción.

El Sistema de Clasificación que Cambia Todo

El error más común en implementaciones de agents: reintentar la misma tool call cuando falla.

Si el error es transitorio — rate limit, timeout — el backoff exponencial funciona.

Pero si el error es semántico — el LLM entendió mal la instrucción — reintentar lo mismo produce el mismo fallo.

La clave está en clasificar:

  • Errores transitorios → backoff exponencial + reintento
  • Errores semánticos → re-prompt con contexto adicional del fallo anterior
  • Errores de estado → rollback parcial a un checkpoint válido
  • Errores fatales → abort con estado preservado para revisión humana

Esto no es teoría. Lo implementé en conversoriaecnae.es, un agent que procesa consultas de asesorías. El rate de fallos en producción pasó de ~15% a ~2% simplemente clasificando antes de actuar.

Paso 1: Implementa el Error Classifier

Aquí tienes el clasificador que uso en producción. No es complicado. Son 40 líneas que salvan semanas de debugging.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Cada tool call y cada step del agent se envuelve con un decorator que registra: el tipo de error, el timestamp, el contexto parcial, y el número de reintentos — antes de decidir la acción.

Paso 2: El Decorator que Valida Todo

No confiéis en que el LLM devolvió lo prometido. Verificad contra un esquema definido antes de avanzar.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Este decorator intercepta cada paso del agent. Clasifica el error. Decide si reintentar (backoff exponencial), escalar a humano, o reescribir el prompt parcialmente — vs un simple try-except que solo relanza.

La diferencia: el decorator deja rastro. El try-catch no.

Paso 3: Define Checkpoints Humanos Obligatorios — No Opcionales

Aquí viene la parte que más duele.

Culturalmente, escalar a un humano se ve como una derrota técnica. No lo es. Es la feature más infravalorada de los agents en producción.

Un checkpoint humano no es una pausa del sistema. Es un punto de validación que permite al agent operar con autonomía el 90% del tiempo pero asegurar corrección en el edge case crítico.

La regla es simple:

  • Cuando un error semántico ocurre más de N veces seguidas (ej: 3)
  • O cuando un error fatal interrumpe el flujo
  • El agent pausa, serializa su estado interno, y emite un evento para que un humano revise y decida: continuar, modificar, o abortar

No es una interrupción constante. Es una red de seguridad para el edge case.

Los agents más exitosos en producción — implementaciones de LangGraph, CrewAI — usan human-in-the-loop precisamente porque permite más autonomía, no menos.

Paso 4: Implementa un Agent State Tracker

Cada fallo es un dato. No lo tiréis.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Este tracker acumula el histórico de fallos por step y ajusta dinámicamente la estrategia: si detecta 2 rate limits seguidos, duplica el sleep entre tool calls automáticamente. Si detecta 3 errores semánticos en el mismo paso, dispara el checkpoint humano.

No es sobreingeniería. Es pagar la deuda técnica antes de que se acumule.

Paso 5: Validación Posterior a Cada Acción

No confiéis en que el LLM devolvió lo que prometió. Verificad contra un esquema definido antes de avanzar.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Cada acción del agent se valida contra un esquema antes de registrar el paso como completado. Si falla la validación, el error se clasifica y se maneja según su categoría.

Esto no añade latencia significativa. Lo que añade es visibilidad: sabes exactamente dónde y por qué falló cada ejecución.

Lo Que la Gente se Equivoca

"Mi agent funciona con un try-catch simple — esto es sobreingeniería."

Funciona en tu ordenador con 3 ejecuciones. En producción, con 10.000 ejecuciones y inputs variados, el rate de errores semánticos escala. El try-catch funciona hasta que no funciona, y cuando falla, falla sin dejar rastro.

"Los checkpoints humanos rompen la autonomía del agent."

La autonomía no es binaria. Un agent con checkpoints humanos bien definidos opera autónomamente el 90%+ del tiempo. El checkpoint no es una interrupción constante: es una red de seguridad para el edge case. Los agents más exitosos en producción usan human-in-the-loop precisamente porque permite más autonomía, no menos.

"Clasificar errores añade latencia y complejidad."

Sí, añade complejidad inicial. Pero es complejidad explícita que reemplaza la complejidad implícita del debugging. El coste de implementar un Error Classifier es una fracción del coste de diagnosticar por qué un agent produjo silenciosamente resultados incorrectos durante 3 semanas.

El Framework: Error Recovery en 3 Capas

Llamadlo El Patrón de Recuperación por Clasificación. Tiene 3 capas:

Capa 1 — Clasificación: El ErrorClassifier distingue entre errores transitorios, semánticos, de estado y fatales. Cada categoría recibe su propia estrategia de manejo.

Capa 2 — Decoración: El decorator @validate_step envuelve cada tool call y cada paso del agent. Registra el error antes de actuar. Nunca asume que la acción funcionó — verifica contra un esquema.

Capa 3 — Checkpoint Humano: Cuando un error semántico supera el umbral de reintentos, el agent serializa su estado, pausa el flujo, y emite un evento. El humano revisa y decide. No es una interrupción — es un seguro.

Si implementáis estas 3 capas, vuestros agents no se rompen en el primer error real. Se recuperan, aprenden, y siguen adelante.

Y el 40% de deuda técnica acumulada que pagábamos en debugging nocturno — desaparece.

Para Recordar

  • Los try-catch asumen errores excepcionales. Los LLMs producen errores probabilísticos. Son categorías diferentes.
  • Clasificar antes de actuar reduce el rate de fallos de ~15% a ~2% en producción.
  • Los checkpoints humanos no rompen la autonomía — la hacen posible en el edge case.
  • Cada fallo es un dato. Registradlo, analizadlo, ajustad la estrategia.
  • Un Error Classifier de 40 líneas y un decorator de 20 líneas salvan semanas de debugging.

El error recovery no es un tema de manejo de excepciones. Es un tema de arquitectura. Y la arquitectura se construye antes de que el agent llegue a producción.

Construid agents que aprenden de sus fallos. No agents que fallan en silencio.

Artículos relacionados

---

¿Quieres recibir contenido como este cada semana? Suscríbete a mi newsletter

Brian Mena

Brian Mena

Ingeniero informatico construyendo productos digitales rentables: SaaS, directorios y agentes de IA. Todo desde cero, todo en produccion.

LinkedIn