Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- Controllare il codice di stato prima di riprovare. Un
529e un429richiedono attese diverse, e unretry-aftersenza429non richiede alcun nuovo tentativo. - 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. - 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-afterquando è presente. È possibile modificare il conteggio conmax_retries(maxRetriesin TypeScript). Quando l'SDK esaurisce i tentativi, il codice riceve l'errore. - 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. - 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.