Cómo reducir errores 429 en cargas de trabajo de agentes: patrones de enrutamiento, reintento y failover
guide

Cómo reducir errores 429 en cargas de trabajo de agentes: patrones de enrutamiento, reintento y failover

EvoLink Team
EvoLink Team
Product Team
25 de marzo de 2026
12 min de lectura
Si tus agentes siguen recibiendo 429 Too Many Requests, el problema generalmente no es que tu equipo esté "usando la IA mal". El problema es que el tráfico de agentes es explosivo y la mayoría de los límites de los proveedores siguen aplicándose contra buckets de límite de tasa compartidos.
A fecha de 25 de marzo de 2026, la documentación oficial de OpenAI, Anthropic y Google coincide en el mismo punto fundamental, expresado de diferentes maneras:
  • los límites son reales
  • los límites se aplican por encima del nivel de solicitud individual
  • los límites están vinculados al alcance de la organización o proyecto
  • las ráfagas cortas pueden seguir provocando fallos aunque el uso mensual parezca saludable

Esta guía se centra en lo que es verificable desde la documentación oficial y luego lo traduce en patrones de producción que realmente reducen los errores 429.

Resumen

  • Los sistemas de agentes alcanzan errores 429 más rápido que las aplicaciones simples porque generan ráfagas, no tráfico uniforme.
  • Necesitas presupuestar tokens y concurrencia, no solo el conteo de solicitudes.
  • La lógica de reintento debe seguir el comportamiento del proveedor: usar retry-after cuando esté disponible y agregar backoff con jitter cuando no lo esté.
  • Las colas, los checkpoints y la degradación gradual importan tanto como el rendimiento bruto.
  • El enrutamiento ayuda cuando quieres reducir la dependencia de un único bucket de límites upstream.

Por qué las cargas de trabajo de agentes experimentan los 429 de manera diferente

Las aplicaciones tradicionales suelen verse así:

  • una solicitud de usuario
  • una llamada al LLM
  • una respuesta

Los sistemas de agentes no se comportan así. A menudo desencadenan:

  • pasos de razonamiento con contexto largo
  • fanout de llamadas a herramientas
  • concurrencia multi-agente
  • respuestas en streaming que mantienen las conexiones abiertas
  • reintentos en segundo plano al mismo tiempo que el trabajo en primer plano
Esto significa que el límite de tasa aparece como un problema de gestión de ráfagas, no solo un problema de "demasiadas solicitudes por minuto".

Lo que la documentación de los proveedores dice realmente

ProveedorDimensiones oficiales de límiteAlcanceConclusión operativa
OpenAIRPM, TPM, RPD, TPD, IPMNivel de organización y proyecto, específico por modelo, con algunos límites compartidosUn flujo de trabajo ruidoso puede consumir el pool del que dependen tus otras solicitudes
AnthropicRPM, ITPM, OTPMNivel de organización con límites basados en tiersRáfagas cortas pueden provocar 429 antes de que transcurra un minuto completo de tráfico
Gemini APIRPM, TPM, RPDPor proyecto, específico por modelo, basado en tiersMúltiples agentes en un proyecto compiten por los mismos límites del proyecto

OpenAI: el control a nivel de proyecto no elimina el riesgo de ráfagas

La guía actual de límites de tasa de OpenAI dice que los límites se definen a nivel de organización y de proyecto, no a nivel de usuario. La referencia de la API también expone objetos de límite de tasa por proyecto y por modelo.

La implicación práctica es directa:

  • dividir el tráfico entre funcionalidades dentro de un proyecto no hace que las ráfagas desaparezcan
  • algunas familias de modelos pueden compartir un pool de límites
  • el tráfico de agentes de alto rendimiento puede agotar solicitudes no relacionadas si no aplicas throttling del lado del cliente

Anthropic: la presión de entrada y salida están separadas

La documentación de límites de tasa de Anthropic es especialmente útil para sistemas de agentes porque separa explícitamente:

  • RPM
  • ITPM para tokens de entrada
  • OTPM para tokens de salida
La documentación también indica que los límites de tasa se aplican a nivel de organización, usan un algoritmo de token bucket y pueden fallar en intervalos más cortos. Anthropic devuelve un encabezado retry-after en las respuestas 429, que es exactamente la señal que tu capa de reintentos debería respetar.

Para sistemas de agentes, esto importa porque los prompts grandes, las salidas largas y las llamadas paralelas a herramientas estresan diferentes partes del presupuesto.

Gemini API: el alcance por proyecto sigue significando presión compartida

La documentación de la API Gemini de Google dice que los límites de tasa se miden a través de RPM, TPM y RPD, y se aplican por proyecto, no por clave de API.

Esto significa:

  • múltiples agentes bajo un proyecto siguen compartiendo los límites
  • las actualizaciones de tier a nivel de proyecto ayudan, pero no resuelven la coordinación de ráfagas dentro de tu aplicación
  • deberías tratar los límites activos como restricciones de infraestructura, no como algo secundario

Patrones que realmente reducen los errores 429

1. Presupuestar tokens, no solo solicitudes

Un contador de solicitudes es demasiado básico para sistemas de agentes. Un solo paso de razonamiento con contexto largo puede consumir más de tu presupuesto real que muchas solicitudes pequeñas.

Usa un presupuesto consciente de tokens:

import asyncio
import time
from collections import deque


class TokenBudget:
    def __init__(self, tpm_limit: int):
        self.tpm_limit = tpm_limit
        self.window = deque()

    async def reserve(self, estimated_tokens: int) -> None:
        now = time.time()

        while self.window and self.window[0][0] < now - 60:
            self.window.popleft()

        used = sum(tokens for _, tokens in self.window)

        if used + estimated_tokens > self.tpm_limit and self.window:
            wait_seconds = 60 - (now - self.window[0][0])
            await asyncio.sleep(max(wait_seconds, 0))

        self.window.append((time.time(), estimated_tokens))
Lo importante no es la clase exacta. Lo importante es construir una verificación de admisión pre-solicitud antes de que el proveedor tenga que rechazarte.

2. Limitar la concurrencia alrededor del bucle del agente

Muchas tormentas de 429 son autoinfligidas. Las llamadas a herramientas, los trabajos en segundo plano y los reintentos se acumulan unos sobre otros.

Usa controles de concurrencia:

import asyncio

agent_slots = asyncio.Semaphore(5)


async def run_agent(task):
    async with agent_slots:
        return await execute_agent(task)

Esto por sí solo no eliminará los 429, pero evita que tu propia aplicación convierta un pico en un colapso.

3. Hacer que los reintentos sean conscientes del proveedor

La capa de reintentos no debería tratar cada 429 de la misma manera.

import asyncio
import random


async def retry_with_backoff(call, provider_name, attempts=5):
    for attempt in range(attempts):
        try:
            return await call()
        except Exception as exc:
            retry_after = getattr(exc, "retry_after", None)

            if retry_after is not None:
                await asyncio.sleep(float(retry_after))
                continue

            # Jittered fallback when the provider does not give a wait value
            delay = min(30, (2 ** attempt) + random.random())
            await asyncio.sleep(delay)

    raise RuntimeError(f"{provider_name} retry budget exhausted")

Guía de producción:

  • respetar retry-after cuando el proveedor lo devuelve
  • usar backoff exponencial con jitter como respaldo, no como tu única estrategia
  • no reintentar indefinidamente
  • rastrear el volumen de reintentos por separado del tráfico principal

4. Separar colas de primer y segundo plano

Cuando el mismo pool maneja trabajo de agentes visible para el usuario y trabajos de análisis en segundo plano, tu backlog de bajo valor puede bloquear el tráfico de alto valor.

Usa al menos dos colas:

  • una cola de primer plano para respuestas orientadas al usuario
  • una cola de segundo plano para trabajo por lotes o de actualización

Esto te da un lugar para descartar o diferir tráfico de baja prioridad antes de que el proveedor lo haga por ti.

5. Establecer checkpoints para bucles de larga ejecución

No dejes que un 429 reinicie veinte minutos de trabajo.

Establece un checkpoint antes de cada llamada costosa:

  • estado actual de la tarea
  • resultados de herramientas ya recopilados
  • último paso de razonamiento exitoso
  • conteo de reintentos y marca de tiempo del próximo intento

Esto convierte un 429 de un fallo de flujo de trabajo en un retraso de programación.

6. Degradar gradualmente en lugar de fallar abruptamente

Tu agente no siempre necesita el modelo más grande del sistema.

La degradación gradual puede significar:

  • ventanas de contexto más pequeñas
  • menos herramientas paralelas
  • un modelo de respaldo más económico o rápido
  • poner en cola trabajos de baja prioridad en lugar de ejecutarlos inmediatamente

El respaldo adecuado depende del flujo de trabajo, pero el principio arquitectónico es el mismo: una respuesta parcial suele ser mejor que una sesión de agente que se ha caído.

Dónde encaja el enrutamiento en el panorama

El enrutamiento no es un sustituto del throttling. Es una forma de evitar que la presión de un solo proveedor dicte todo el comportamiento de tu aplicación.

La forma correcta de pensar en el enrutamiento es:

  • el throttling controla lo que tu aplicación envía
  • la lógica de reintentos controla cómo reacciona tu aplicación
  • el enrutamiento controla hacia dónde tu aplicación puede enviar trabajo cuando las condiciones cambian

Una tabla simple de antes y después

PatrónQué sucede bajo cargaPrincipal debilidad
Proveedor único, sin control de admisiónLas solicitudes se acumulan hasta que el upstream empieza a rechazarlasTormentas de 429 y reintentos en cascada
Proveedor único, solo con reintentosLa aplicación sobrevive algunos picosLas ráfagas sostenidas siguen bloqueando el mismo bucket upstream
Proveedor único con throttling y colasEl tráfico es más uniforme y los fallos son menos caóticosSigues dependiendo de un único pool upstream
Gateway con enrutamiento, throttling y reintentosLa aplicación puede suavizar ráfagas y mantener la superficie de integración estableMás decisiones de infraestructura que evaluar

La copia actual del repositorio de EvoLink Smart Router soporta estas afirmaciones publicables:

  • EvoLink proporciona una capa de enrutamiento de desarrollo propio para cargas de trabajo mixtas
  • puedes enviar evolink/auto como ID de modelo
  • el modelo realmente utilizado se devuelve en la respuesta
  • la forma de la solicitud se mantiene compatible con OpenAI
  • la capa de enrutamiento en sí no agrega una tarifa de enrutamiento separada
Eso no significa que debas prometer cero errores 429. Significa que el enrutamiento puede mover más de la lógica de selección y respaldo del código de la aplicación a la capa del gateway.

Aquí está la forma de solicitud que soporta la copia del repositorio:

curl https://api.evolink.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "evolink/auto",
    "messages": [
      {
        "role": "user",
        "content": "Summarize the latest deployment incident and suggest next steps."
      }
    ]
  }'

Lista de verificación práctica para el despliegue

Antes de culpar al proveedor, verifica esto primero:

VerificaciónPor qué importa
Estimar el volumen de tokens por paso del agenteMuchos 429 son realmente problemas de TPM o ITPM
Limitar los bucles de agentes concurrentesPrevenir la amplificación autoinfligida de ráfagas
Respetar retry-after cuando esté presenteReduce tormentas de reintentos innecesarios
Separar colas de primer y segundo planoProtege la latencia orientada al usuario
Guardar checkpoints para trabajos de larga ejecuciónPreviene el reinicio total después de 429 transitorios
Decidir cuándo enrutar o hacer failoverMantiene el comportamiento de respaldo deliberado en lugar de ad hoc

Preguntas frecuentes

¿Por qué los agentes alcanzan 429 más rápido que una aplicación de chat normal?

Porque los agentes generan tráfico en ráfagas: prompts largos, fanout de herramientas, reintentos, trabajos en segundo plano y concurrencia se acumulan.

¿Agregar más claves de API resolverá el problema?

Generalmente no por sí solo. OpenAI documenta límites a nivel de organización y proyecto, Anthropic documenta límites a nivel de organización, y Gemini documenta límites a nivel de proyecto. Claves adicionales dentro del mismo alcance no crean un pool de capacidad completamente nuevo.

¿Debería usar backoff exponencial para cada 429?

No como tu primera regla. Usa retry-after cuando el proveedor te lo proporcione. Recurre al backoff exponencial con jitter cuando no lo haga.

¿Necesito tanto throttling como enrutamiento?

Sí, si operas a escala de producción. El throttling suaviza el tráfico antes de que el proveedor lo rechace. El enrutamiento ayuda a reducir la dependencia de una única ruta upstream.

¿Qué debería registrar al depurar errores 429?

Registra tokens estimados, tareas concurrentes, profundidad de cola, conteos de reintentos, tamaño de solicitud y cualquier valor de espera del proveedor como retry-after.

Es útil cuando quieres mantener una forma de solicitud compatible con OpenAI mientras mueves la selección de modelos y el enrutamiento de cargas de trabajo mixtas fuera del código de tu aplicación.

¿Puede un router garantizar que nunca volveré a ver errores 429?

No. Un router puede mejorar la resiliencia y la flexibilidad, pero no elimina la necesidad de throttling del lado del cliente, presupuestos de reintentos y control de colas.

Construye la capa de control antes de escalar

Si tu sistema de agentes ya muestra comportamiento de ráfagas, corregir los 429 suele ser un problema de infraestructura antes de ser un problema de prompts.

Explore EvoLink Smart Router

Artículos relacionados

Fuentes

¿Listo para reducir tus costos de IA en un 89%?

Comienza a usar EvoLink hoy y experimenta el poder del enrutamiento inteligente de API.