Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Claude API returnerar 529 med feltypen overloaded_error när API:et tillfälligt överbelastas. Enligt Anthropic kan det inträffa när API:et upplever hög trafik bland alla användare. Din begäran är bra. API:et är upptaget, så begäran avvisades. När din organisation överskrider sina egna gränser för begärandefrekvens får du i stället en 429-kod. Svarstexten har samma form som alla andra Claude API-fel: en toppnivå type av error, ett error objekt med type och message, och en request_id som du kan ge till Anthropic support. Mer information finns i Claude API-fel.
529, 429, eller utgiftstak: hur man skiljer dem åt
Claude API använder felmeddelanden som ser likadana ut för mycket olika problem. Vissa försvinner om du väntar. Den försvinner inte förrän nästa månad.
| Svar | error.type |
retry-after |
Vad det innebär | Vad du bör göra |
|---|---|---|---|---|
529 |
overloaded_error |
Använd den om den finns där | API:et är överbelastat för samtliga användare | Vänta en stund och försök igen några gånger |
429 |
rate_limit_error |
Yes | Din organisation överskred gränsen för antal begäranden, indatatoken eller utdatatoken per minut eller ökade för snabbt och nådde en accelerationsgräns | Vänta så länge som retry-after anger |
429 |
rate_limit_error, med error.details.error_code inställt på enforced_spend_limit_reached |
No | Din organisation har nått användningsnivåns månatliga utgiftstak | Försök inte igen. Användningen pausar till 00:00 UTC den första dagen i nästa månad eller tills du flyttar till en högre nivå. |
400 |
invalid_request_error |
No | Användningen har nått en utgiftsgräns som du har angett för din organisation eller arbetsyta | Höj eller ta bort gränsen |
En spend cap 429 har samma feltyp som en rate limit, så kod som gör nya försök var rate_limit_error misslyckas hela tiden. Anthropic noterar att återförsök misslyckas tills åtkomsten återupptas, inklusive SDK:s automatiska återförsök. Mer information finns i Så här når du ditt utgiftstak.
Så här hanterar du en 529
- Kontrollera statuskoden innan du försöker igen. A
529och en429behöver olika väntetider, och ett429utanretry-afterbehöver inget nytt försök alls. - Avstå från en 529. Försök igen med exponentiell backoff och slumpmässig jitter och stoppa efter några försök. Om svaret har en
retry-afterheader väntar du så länge i stället. - Låt SDK:et göra de första återförsöken. De officiella Anthropic SDK:erna försöker igen vid anslutningsfel, hastighetsbegränsningar och 5xx-fel två gånger som standard, med exponentiell backoff, och respekterar
retry-afternär det finns. Du kan ändra antalet medmax_retries(maxRetriesi TypeScript). När SDK:et har slut på återförsök får koden felet. - Sluta försöka igen vid ett utgiftstak. Om en 429 inte har någon
retry-afterheader, berätta för användaren och skicka en varning till dig själv. - Håll användaren informerad. Lägg arbetet i kö och försök igen senare, eller visa ett tydligt meddelande om "upptagen, försök igen om en minut" i stället för ett allmänt fel.
I Python SDK utlöser 429 anthropic.RateLimitError och alla statuskoder på 500 eller högre, inklusive 529, utlöser 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")
Så här testar du att din app hanterar en 529
Du ser sällan en 529 när du utvecklar. Det beror på trafik från varje Claude API-användare, så du kan inte orsaka det. Hur du testar avgör om du hittar buggarna innan användarna gör det.
| Approach | Det här hittar du | Vad du saknar |
|---|---|---|
| Vänta på produktionsmiljön | Faktiska överlagringar | Allt, tills en användare trycker på den |
| Mocka API:t i dina tester eller låt kodningsagenten skriva mocken | Huruvida felgrenen körs | Anthropic verkliga statuskoder och felsvar, och SDK:s återförsöksprincip. Din app behöver också en testflagga för att nå mocken. |
| Anropa det verkliga API:et tills anropet misslyckas | Faktiskt beteende | Du kan inte utlösa fel 529 på begäran, och du kan inte heller på ett säkert sätt utlösa ett utgiftstak alls |
| Fånga upp appens verkliga trafik och returnera 529 och 429 på begäran | Verkliga URL:er, din riktiga SDK och återförsöksprincip och Anthropic eget felformat | Ingenting i din app ändras, så din kod testas inte isolerat. Spara dina enhetstester till det. |
Prova det i din app
Dev Proxy fångar upp appens begäranden till https://api.anthropic.com och returnerar fel i Anthropic felformat, medan appen fortsätter att anropa den verkliga URL:en. Ladda ned en förinställning och starta Dev Proxy med den:
devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
| Preset | Vad den returnerar |
|---|---|
anthropic-throttling |
Slumpmässigt vald, 1 av 4 429 rate_limit_error svar (begäranden, indatatoken, utdatatoken och accelerationsgräns) eller en 529 overloaded_error. Vid 429-svar sätter Dev Proxy retry-after och meddelar dig när din app anropar API:et igen för tidigt. |
anthropic-random-errors |
För 50 % av begärandena returneras slumpmässigt ett av felen från Claude API:s fellista, inklusive 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 och 529 |
Ingen av förinställningarna innehåller en utgiftsgräns 429. Om du vill testa det flödet lägger du till ett svar utan ett retry-after-huvud i förinställningens anthropic-errors.json-fil:
{
"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" }
}
}
}
Om du vill att varje begäran ska misslyckas, så att du ser vad som händer när SDK:n har förbrukat alla återförsök, startar du Dev Proxy med --failure-rate 100. Mer information finns i Felfrekvens för ändringsbegäran. Om du vill installera Dev Proxy, se Konfigurera Dev Proxy.