0Pricing
AI Agents · Lección

Detectar y recuperarse de errores de herramientas

Cuando una herramienta devuelve un error 500, devuelva el error al modelo para que pruebe otro enfoque en lugar de bloquearse.

Detectar y recuperarse de errores de herramientas es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

Las herramientas fallan. Prepárese.

Toda herramienta real falla en ocasiones:

  • Tiempos de espera de red agotados
  • Límites de uso
  • Argumentos incorrectos del modelo
  • Caídas de servicios externos
  • Autenticación no válida

Los agentes en producción deben recuperarse correctamente.

Devuelva siempre, no lance excepciones

Dentro del ciclo del agente, capture todos los errores de las herramientas y devuélvalos como contenido. No permita nunca que una excepción detenga el ciclo:

def safe_dispatch(tool_call):
    try:
        args = json.loads(tool_call.function.arguments)
        return TOOLS[tool_call.function.name](**args)
    except json.JSONDecodeError:
        return {'error': 'Arguments are not valid JSON.'}
    except KeyError:
        return {'error': f'Unknown tool: {tool_call.function.name}'}
    except Exception as e:
        return {'error': f'{type(e).__name__}: {e}'}

Formato de error estructurado

Use una estructura coherente para que el modelo reconozca los errores:

error = {'ok': False, 'error_type': 'TimeoutError', 'error_message': 'Tavily timed out after 10s', 'retryable': True}
print(error)

Distinguir entre errores reintentables y permanentes

Algunos errores justifican un reintento (tiempo de espera agotado); otros no (404). Indíqueselo al modelo:

if isinstance(e, requests.Timeout):
    return {'ok': False, 'retryable': True, 'error': str(e)}
if isinstance(e, ValueError):
    return {'ok': False, 'retryable': False, 'error': str(e)}

Reintentar automáticamente los errores transitorios

En las llamadas de red, reintente con espera exponencial:

from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type

@retry(
    wait=wait_exponential(multiplier=1, max=10),
    stop=stop_after_attempt(3),
    retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def web_search(query):
    return requests.get('https://api.tavily.com/search', ...).json()

Validación de argumentos

Antes de llamar a la herramienta, valide los argumentos con un modelo de Pydantic:

from pydantic import BaseModel, ValidationError

class SearchArgs(BaseModel):
    query: str
    k: int = 5

try:
    args = SearchArgs.model_validate_json(tool_call.function.arguments)
except ValidationError as e:
    return {'error': f'Bad arguments: {e}'}

Mostrar el error al modelo

Añada el error como resultado de la herramienta y vuelva a llamar al modelo. A menudo, el modelo se corrige por sí mismo:

messages.append({
    'role': 'tool',
    'tool_call_id': tc.id,
    'content': json.dumps({'error': 'Argument k must be an integer'})
})
# Next model call: 'Sorry, let me retry with k=5...'

Evitar bucles infinitos de errores

Algunos modelos, cuando se les muestra un error, vuelven a intentar la misma llamada incorrecta. Limite el ciclo y detecte las repeticiones:

recent_calls = []
for tc in msg.tool_calls:
    key = (tc.function.name, tc.function.arguments)
    if recent_calls.count(key) >= 3:
        return 'Agent stuck in retry loop, aborting.'
    recent_calls.append(key)

Recuperación específica de cada herramienta

Para las herramientas que se sabe que presentan fallos intermitentes, incorpore la lógica de reintento DENTRO de la herramienta, no en el bucle:

def search_with_fallback(query):
    try:
        return tavily_search(query)
    except Exception:
        return bing_search(query)   # secondary provider

Agote el tiempo de espera de cada llamada

Toda llamada externa necesita un tiempo de espera. De lo contrario, un servicio lento bloquea todo el agente:

import requests
response = requests.get(url, timeout=10)  # 10s

# For LLM calls:
from openai import OpenAI
client = OpenAI(timeout=30.0)

Cortacircuitos

Cuando una herramienta falla repetidamente, "abra" el circuito y omita la herramienta durante un tiempo:

import time

class CircuitOpen(Exception):
    pass

def circuit(failure_threshold=5, recovery_timeout=60):
    def decorator(func):
        state = {'failures': 0, 'open_until': 0}
        def wrapper(*args, **kwargs):
            if time.time() < state['open_until']:
                raise CircuitOpen('circuit is open')
            try:
                result = func(*args, **kwargs)
                state['failures'] = 0
                return result
            except Exception:
                state['failures'] += 1
                if state['failures'] >= failure_threshold:
                    state['open_until'] = time.time() + recovery_timeout
                raise
        return wrapper
    return decorator

@circuit(failure_threshold=3, recovery_timeout=1)
def fragile_tool(x):
    if x < 0:
        raise ValueError('bad input')
    return x * 2

for x in [1, -1, -1, -1, -1]:
    try:
        print('ok', fragile_tool(x))
    except CircuitOpen as e:
        print('blocked:', e)
    except ValueError as e:
        print('failed:', e)

Registrar errores con contexto

Registre lo suficiente para depurar posteriormente: nombre de la herramienta, argumentos, tipo de error, seguimiento de pila, identificador de solicitud, identificador de usuario e identificador de traza. Envíe esta información a su herramienta de observabilidad.

Degradación gradual

Cuando una herramienta crítica no esté disponible, informe al usuario con honestidad en lugar de fingir que el agente ha tenido éxito:

if all_search_tools_failed:
    return 'I was unable to search the web right now. Please try again in a few minutes.'

Patrón para errores de herramientas

¿Cuál es la forma más segura de gestionar las excepciones de las herramientas dentro del bucle del agente?

Repaso

Las herramientas fallan. Capture, clasifique y estructure los errores como contenido para que el agente pueda recuperarse. Añada tiempos de espera, reintentos y cortacircuitos para lograr fiabilidad en producción.

Preguntas frecuentes

¿La lección «Detectar y recuperarse de errores de herramientas» es gratis?

Sí — el texto completo de «Detectar y recuperarse de errores de herramientas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Detectar y recuperarse de errores de herramientas»?

Cuando una herramienta devuelve un error 500, devuelva el error al modelo para que pruebe otro enfoque en lugar de bloquearse. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Agents?

No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Detectar y recuperarse de errores de herramientas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Agents?

Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ReAct: patrón de razonamiento y acción
  2. Implementar ReAct desde cero
  3. Conjuntos de herramientas habituales (web, calculadora y RAG)
  4. Detectar y recuperarse de errores de herramientas
← Volver a AI Agents