Anthropic 529 overloaded_error: qué significa y cómo controlarlo

La API de Claude devuelve 529 con el tipo de error overloaded_error cuando la API está temporalmente sobrecargada. Según Anthropic, esto puede ocurrir cuando la API registra un tráfico elevado por parte de todos los usuarios. Su solicitud está bien. La API está ocupada, por lo que rechazó la solicitud. Cuando su organización supere sus propios límites de tasa, obtendrá un valor de 429 en su lugar. El cuerpo de la respuesta tiene la misma estructura que cualquier otro error de la API de Claude: un type de nivel superior de tipo error, un objeto error con type y message, y un request_id que puedes facilitar al servicio de asistencia de Anthropic. Para obtener más información, consulte Errores de la API de Claude.

529, 429 o límite de gasto: cómo distinguirlos

La API de Claude utiliza errores de aspecto similar para problemas muy diferentes. Algunos desaparecen si esperas. Uno de ellos no desaparecerá hasta el mes que viene.

Respuesta error.type retry-after Qué significa Qué hacer
529 overloaded_error Úselo si está ahí La API está sobrecargada para todos los usuarios Espera un rato y vuelve a intentarlo varias veces
429 rate_limit_error Yes Tu organización ha superado el límite de solicitudes, tokens de entrada o tokens de salida por minuto, o ha aumentado el ritmo demasiado rápido y ha alcanzado un límite de aceleración Espera el tiempo que indique retry-after
429 rate_limit_error, con error.details.error_code establecido en enforced_spend_limit_reached No Su organización alcanzó el límite de gasto mensual del nivel de uso. No vuelva a intentarlo. El uso se suspende hasta las 00:00 UTC del primer día del mes siguiente, o hasta que pases a un nivel superior.
400 invalid_request_error No El uso ha alcanzado un límite de gasto que has establecido para tu organización o espacio de trabajo Aumentar o quitar el límite

Un error 429 de límite de gasto tiene el mismo tipo de error que un límite de tasa, por lo que el código que reintenta cada rate_limit_error seguirá fallando. Anthropic señala que los reintentos fallan hasta que se reanuda el acceso, incluidos los reintentos automáticos del SDK. Para más detalles, consulta Alcanzar tu límite de gasto.

Cómo gestionar un 529

  1. Compruebe el código de estado antes de volver a intentarlo. Un 529 y un 429 requieren tiempos de espera diferentes, y un 429 sin retry-after no necesita ningún reintento.
  2. Aplaza el intento en caso de un 529. Vuelve a intentarlo con retroceso exponencial y fluctuación aleatoria, y detén el proceso tras unos cuantos intentos. Si la respuesta incluye un encabezado retry-after, espera ese tiempo en su lugar.
  3. Deje que el SDK realice los primeros reintentos. Los SDK oficiales Anthropic reintentan los errores de conexión, los límites de tasa y los errores 5xx dos veces de forma predeterminada, con retroceso exponencial y respetan retry-after cuando está presente. Puede cambiar el recuento con max_retries (maxRetries en TypeScript). Cuando el SDK se queda sin reintentos, tu código recibe el error.
  4. Deja de reintentar cuando se alcance el límite de gasto. Si un código 429 no incluye el encabezado retry-after, avisa al usuario y activa una alerta para ti mismo.
  5. Mantenga informado al usuario. Poner en cola el trabajo e intentarlo más tarde o mostrar un mensaje "ocupado, inténtelo de nuevo en un minuto" en lugar de un error genérico.

En el SDK de Python, un 429 genera anthropic.RateLimitError y cualquier estado de 500 o superior, incluido 529, genera anthropic.InternalServerError:

import anthropic

client = anthropic.Anthropic(max_retries=4)


def summarize(text: str) -> str | None:
    try:
        message = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=1024,
            messages=[{"role": "user", "content": f"Summarize:\n\n{text}"}],
        )
    except anthropic.RateLimitError as e:
        if "retry-after" not in e.response.headers:
            # Spend cap: every retry fails until access resumes
            alert_admin(e)
            return None
        raise
    except anthropic.InternalServerError as e:
        if e.status_code == 529:
            # Overloaded after all SDK retries: queue the job for later
            queue_for_later(text)
            return None
        raise
    return next(block.text for block in message.content if block.type == "text")

Cómo comprobar que tu aplicación administra un código 529

Rara vez ves un 529 mientras desarrollas. Depende del tráfico de todos los usuarios de Claude API, por lo que no se puede desencadenar. La forma en que realices las pruebas determina si detectas los errores antes que tus usuarios.

Approach Lo que encuentras Lo que te pierdes
A la espera de la producción Sobrecargas reales Todo ello, hasta que un usuario lo alcance.
Simula la API en tus pruebas o deja que tu agente de programación escriba el mock Si se ejecuta tu rama de errores Los códigos de estado real y los cuerpos de error de Anthropic, y la directiva de reintento del SDK. La aplicación también necesita una opción solo de prueba para acceder al mock.
Llama a la API real hasta que falle. Comportamiento real No se puede provocar un error 529 a voluntad, y tampoco se puede provocar de forma segura que se alcance el límite de gasto.
Intercepta el tráfico real de tu aplicación y devuelve errores 529 y 429 a voluntad Direcciones URL reales, el SDK real, la directiva de reintento y el propio formato de error de Anthropic Nada en tu aplicación cambia, por lo que no prueba tu código de forma aislada. Mantenga las pruebas unitarias para eso.

Pruébalo en tu app

Dev Proxy intercepta las solicitudes de tu aplicación a https://api.anthropic.com y devuelve errores en el formato de error de Anthropic, mientras tu aplicación sigue llamando a la URL real. Descargue un ajuste preestablecido e inicie Dev Proxy con él:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Lo que devuelve
anthropic-throttling De forma aleatoria, 1 de cada 4 respuestas 429 rate_limit_error (solicitudes, tokens de entrada, tokens de salida y límite de aceleración) o un 529 overloaded_error. En los 429, Dev Proxy establece retry-after y te avisa cuando tu aplicación vuelve a llamar a la API demasiado pronto.
anthropic-random-errors Al azar, uno de los errores de la lista de errores de La API de Claude, incluidos 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 y 529, para 50% de solicitudes

Ninguno de los valores preestablecidos incluye un límite de gasto 429. Para probar esa ruta, añade una respuesta sin un encabezado retry-after al archivo anthropic-errors.json del preajuste:

{
  "statusCode": 429,
  "headers": [
    { "name": "content-type", "value": "application/json" }
  ],
  "body": {
    "type": "error",
    "error": {
      "type": "rate_limit_error",
      "message": "You have reached your API usage limits.",
      "details": { "error_code": "enforced_spend_limit_reached" }
    }
  }
}

Para que todas las solicitudes fallen, de modo que puedas ver qué ocurre cuando el SDK agota los reintentos, inicia Dev Proxy con --failure-rate 100. Para obtener más información, consulte Tasa de fallos de las solicitudes de cambio. Para instalar Dev Proxy, consulte Configurar Dev Proxy.

Pasos siguientes

Consulte también