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

La API de Claude devuelve 529 el tipo overloaded_error de error cuando la API está sobrecargada temporalmente. Según Anthropic, puede ocurrir cuando la API experimenta un tráfico elevado en 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 forma que todos los demás errores de la API de Claude: un type de nivel superior de error, un objeto error con type y message, y un request_id que puedes proporcionar al soporte de Anthropic. Para obtener más información, consulte Errores de la API de Claude.

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

La API de Claude usa errores de aspecto similar para problemas muy diferentes. Algunos desaparecen si esperas. Uno no desaparece hasta el mes siguiente.

Respuesta error.type retry-after Qué significa Qué hacer
529 overloaded_error Úselo si está ahí La API se sobrecarga en todos los usuarios Espere un poco y vuelva a intentarlo varias veces
429 rate_limit_error Yes Su organización ha superado sus solicitudes, tokens de entrada o tokens de salida por minuto, o ha aumentado demasiado rápido y alcanza un límite de aceleración. Espere tanto tiempo como diga 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 detiene hasta las 00:00 UTC del primer día del mes siguiente o hasta que cambies a un nivel superior.
400 invalid_request_error No El uso alcanzó un límite de gasto establecido en su organización o área de trabajo. Aumentar o quitar el límite

Un límite de gasto 429 tiene el mismo tipo de error que un límite de velocidad, por lo que el código que reintenta cada rate_limit_error uno sigue fallando. Anthropic señala que los reintentos fallan hasta que se reanuda el acceso, incluidos los reintentos automáticos del SDK. Para obtener más información, consulte 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 una 429 necesidad de esperas diferentes, y un 429 sin retry-after necesidad de reintento en absoluto.
  2. Reconsidere un 529. Vuelva a intentarlo con retroceso exponencial y vibración aleatoria, y detenga después de algunos intentos. Si la respuesta tiene un retry-after encabezado, espere 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. Detenga el reintento al alcanzarse un límite de gasto. Si un 429 no tiene ningún encabezado retry-after, indique al usuario y avísese.
  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 probar que la aplicación controla un 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 de probar decide si encuentra los errores antes de que los usuarios lo hagan.

Approach Lo que encuentras Lo que te pierdes
Esperar a producción Sobrecargas reales Todo, hasta que un usuario haga clic en él
Simula la API en tus pruebas o deja que tu agente de programación escriba el mock Que se ejecute la rama de error 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 se produce un error Comportamiento real No se puede provocar un error 529 manualmente, y no se puede activar de forma segura un límite de gasto en absoluto
Intercepte el tráfico real de la aplicación y devuelva 529 y 429s a petición 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

El proxy de desarrollo intercepta las solicitudes de la aplicación a https://api.anthropic.com y devuelve errores en el formato de error de Anthropic, mientras que la aplicación sigue llamando a la dirección 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 Al azar, 1 de 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 429s, Dev Proxy establece retry-after y le indica cuándo la aplicación llama a la API de nuevo 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 de acceso, agregue una respuesta sin un encabezado retry-after al archivo del anthropic-errors.json valor preestablecido:

{
  "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 se produzca un error en todas las solicitudes, para que vea lo que sucede cuando el SDK se queda sin reintentos, inicie 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