Anthropic 529 overloaded_error: cosa significa e come gestirlo

L'API Claude restituisce 529 con il tipo di overloaded_error errore quando l'API viene temporaneamente sovraccaricata. Secondo Anthropic, può verificarsi quando l'API registra un traffico elevato tra tutti gli utenti. La richiesta va bene. L'API è occupata, quindi ha rifiutato la richiesta. Quando l'organizzazione supera i propri limiti di frequenza, si riceve invece un errore 429. Il corpo della risposta ha la stessa forma di ogni altro errore dell'API Claude: un error di primo livello di error, un oggetto type con type e message, e un oggetto request_id che è possibile fornire al supporto Anthropic. Per altre informazioni, vedere Errori dell'API Claude.

529, 429 o limite di spesa: come distinguerli

L'API Claude usa errori dall'aspetto simile per problemi molto diversi. Alcuni problemi scompaiono se aspetti. Non se ne va fino al mese prossimo.

risposta error.type retry-after Che cosa significa Cosa fare
529 overloaded_error Usalo se c'è L'API è sovraccarica per tutti gli utenti Attendi e riprova qualche volta
429 rate_limit_error Yes L'organizzazione ha superato le richieste, i token di input o i token di output al minuto oppure ha aumentato troppo rapidamente e ha raggiunto un limite di accelerazione Aspetta per tutto il tempo indicato da retry-after
429 rate_limit_error, con error.details.error_code impostato su enforced_spend_limit_reached No L'organizzazione ha raggiunto il limite di spesa mensile del livello di utilizzo Non riprovare. L'utilizzo viene sospeso fino alle 00:00 UTC del primo giorno del mese successivo o fino a quando non si passa a un livello superiore.
400 invalid_request_error No L'utilizzo ha raggiunto un limite di spesa impostato nell'organizzazione o nell'area di lavoro Aumentare o rimuovere il limite

Un limite di spesa 429 ha lo stesso tipo di errore di un limite di frequenza, quindi il codice che ritenta ogni rate_limit_error continua a non riuscire. Anthropic nota che i tentativi falliscono fino a quando l'accesso non riprende, inclusi i tentativi automatici dell'SDK. Per maggiori dettagli, vedere Come raggiungere il limite di spesa.

Come gestire un 529

  1. Controllare il codice di stato prima di riprovare. Un 529 e un 429 richiedono attese diverse, e un retry-after senza 429 non richiede alcun nuovo tentativo.
  2. Interrompi in caso di errore 529. Riprovare con backoff esponenziale e jitter casuale e arrestarsi dopo alcuni tentativi. Se la risposta contiene un'intestazione retry-after, attendere invece per tale durata.
  3. Consenti all’SDK di eseguire i primi tentativi di ripetizione. Gli SDK di Anthropic ufficiali ritentano in caso di errori di connessione, limiti di frequenza ed errori 5xx due volte per impostazione predefinita, con backoff esponenziale, e rispettano retry-after quando è presente. È possibile modificare il conteggio con max_retries (maxRetries in TypeScript). Quando l'SDK esaurisce i tentativi, il codice riceve l'errore.
  4. Smettere di riprovare al raggiungimento di un limite di spesa. Se una risposta 429 non ha l'header retry-after, informare l'utente e avvisare se stessi.
  5. Tenere informato l'utente. Accoda il lavoro e riprova più tardi, oppure visualizza un chiaro messaggio "occupato, riprova tra un minuto" anziché un errore generico.

Nell'SDK di Python, 429 genera anthropic.RateLimitError e qualsiasi stato 500 o superiore, incluso 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")

Come testare che l'app gestisca un 529

Ci si imbatte raramente in un 529 durante lo sviluppo. Dipende dal traffico di ogni utente dell'API Claude, quindi non puoi attivarlo. Il modo in cui si testa decide se trovi i bug prima che siano i tuoi utenti a trovarli.

Avvicinarsi Cosa trovi Quello che ti manca
Attendi la messa in produzione Sovraccarichi reali Tutto, fino a quando un utente non lo preme
Simula l'API nei test o consenti all'agente di codifica di scrivere il mock Se il ramo di errore viene eseguito I codici di stato reali e i corpi di errore di Anthropic e i criteri di ripetizione dei tentativi dell'SDK. L'app richiede anche un'opzione di sola prova per raggiungere il mock.
Chiamare l'API reale finché non fallisce Comportamento reale Non è possibile generare un 529 su richiesta e non è possibile attivare in modo sicuro un limite di spesa in alcun modo
Intercettare il traffico reale dell'app e restituire 529 e 429 su richiesta URL reali, l'SDK reale e la politica di retry e il formato di errore di Anthropic Niente nella tua app cambia, quindi non testa il codice in isolamento. Mantieni gli unit test per quello.

Provalo nella tua app

Dev Proxy intercetta le richieste dell'app a https://api.anthropic.com e restituisce errori nel formato di errore di Anthropic, mentre l'app continua a chiamare l'URL reale. Scaricare un set di impostazioni e avviare Dev Proxy con esso:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Cosa restituisce
anthropic-throttling A caso, 1 su 4 risposte 429 rate_limit_error (richieste, token di input, token di output e limite di accelerazione) o un 529 overloaded_error. In caso di risposte 429, Dev Proxy imposta retry-after e ti avvisa quando l'app richiama l'API troppo presto.
anthropic-random-errors In modo casuale, uno degli errori dell'elenco di errori dell'API Claude, tra cui 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 e 529, per 50% di richieste

Nessun set di impostazioni include un limite di spesa 429. Per testare tale percorso, aggiungere una risposta senza intestazione retry-after al file anthropic-errors.json del preset:

{
  "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" }
    }
  }
}

Per fare in modo che ogni richiesta non riesca, in modo da vedere cosa accade quando l'SDK esaurisce i tentativi, avviare Dev Proxy con --failure-rate 100. Per altre informazioni, vedere Tasso di errore delle richieste di modifica. Per installare Dev Proxy, vedere Configurare Dev Proxy.

Passaggi successivi

Vedere anche