Anthropic 529 overloaded_error: wat betekent het en hoe u deze kunt afhandelen

De Claude-API retourneert 529 met het fouttype overloaded_error wanneer de API tijdelijk overbelast is. Volgens Anthropic kan dit gebeuren wanneer de API veel verkeer onder alle gebruikers ondervindt. Uw verzoek is prima. De API is bezet, dus heeft het verzoek afgewezen. Wanneer uw organisatie de eigen frequentielimieten heeft overschreden, krijgt u in plaats daarvan een 429-fout. De hoofdtekst van het antwoord heeft dezelfde vorm als elke andere Claude API-fout: een topniveau type van error, een error object met type en message, en een request_id die u aan de Anthropic-support kunt geven. Zie Claude API-fouten voor meer informatie.

529, 429 of bestedingslimiet: hoe je ze uit elkaar kunt houden

De Claude-API maakt gebruik van foutmeldingen die op elkaar lijken voor zeer verschillende problemen. Sommigen gaan weg als je wacht. Iemand gaat pas volgende maand weg.

Antwoord error.type retry-after Wat betekent het? Wat moet u doen?
529 overloaded_error Gebruik het als het er is De API is overbelast bij alle gebruikers Even wachten en een paar keer opnieuw proberen
429 rate_limit_error Yes Uw organisatie heeft de aanvragen, invoertokens of uitvoertokens per minuut overschreden of is te snel omhoog gegaan en een versnellingslimiet bereikt Wacht zolang als retry-after aangeeft
429 rate_limit_error, met error.details.error_code ingesteld op enforced_spend_limit_reached No Uw organisatie heeft de maandelijkse uitgavenlimiet van het gebruiksniveau bereikt Probeer het niet opnieuw. Het gebruik wordt onderbroken tot 00:00 UTC op de eerste dag van de volgende maand of totdat u naar een hogere abonnementslaag gaat.
400 invalid_request_error No Uw verbruik heeft een bestedingslimiet bereikt die u hebt ingesteld voor uw organisatie of werkruimte De limiet verhogen of verwijderen

Een bestedingslimiet 429 heeft hetzelfde fouttype als een frequentielimiet, dus code die elke rate_limit_error opnieuw probeert, blijft mislukken. Anthropic merkt op dat nieuwe pogingen mislukken totdat de toegang wordt hervat, inclusief de automatische nieuwe pogingen van de SDK. Zie Uw uitgavenlimiet bereiken voor meer informatie.

Omgaan met een 529

  1. Controleer de statuscode voordat u het opnieuw probeert. Een 529 en een 429 hebben een andere wachttijd nodig, en een 429 zonder retry-after hoeft helemaal niet opnieuw geprobeerd te worden.
  2. Minder inzetten op een 529. Probeer het opnieuw met exponentiële backoff en willekeurige jitter en stop na een paar pogingen. Als het antwoord een retry-after header heeft, wacht u in plaats daarvan die tijd.
  3. Laat de SDK de eerste herhalingspogingen uitvoeren. De officiële Anthropic SDK's proberen standaard twee keer opnieuw bij verbindingsfouten, ratelimieten en 5xx-fouten, met exponentieel uitstel, en houden rekening met retry-after wanneer deze aanwezig is. U kunt het aantal wijzigen met max_retries (maxRetries in TypeScript). Wanneer de SDK geen retries meer over heeft, krijgt uw code de fout.
  4. Stop met opnieuw proberen wanneer een bestedingslimiet is bereikt. Als een 429 geen retry-after header heeft, informeer de gebruiker en waarschuw uzelf.
  5. Houd de gebruiker op de hoogte. Plaats het werk in de wachtrij en probeer het later opnieuw, of toon een duidelijke melding "bezig, probeer het over een minuut opnieuw" in plaats van een algemene foutmelding.

In de Python-SDK veroorzaakt een 429 anthropic.RateLimitError, en elke status van 500 of hoger, inclusief 529, veroorzaakt 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")

Hoe u kunt testen of uw app een 529 correct verwerkt

U ziet zelden een 529 terwijl u ontwikkelt. Het hangt af van het verkeer van alle Claude API-gebruikers, dus u kunt het niet activeren. De manier waarop u test, bepaalt of u de bugs vindt voordat uw gebruikers dat doen.

Approach Wat u vindt Wat u mist
Wachten op productieomgeving Werkelijke overbelastingen Alles, tot een gebruiker het aanraakt
Mock de API in je tests, of laat je coding agent de mock schrijven Of uw foutbranch wordt uitgevoerd de echte statuscodes en foutteksten van Anthropic, en het beleid voor opnieuw proberen van uw SDK. Uw app heeft ook een testswitch nodig om de mock te bereiken.
De echte API aanroepen totdat deze mislukt Werkelijk gedrag U kunt geen 529 op aanvraag activeren en u kunt helemaal niet veilig een uitgavenlimiet activeren
Het echte verkeer van uw app onderscheppen en 529's en 429's op aanvraag retourneren Echte URL's, uw echte SDK en retrybeleid, en de eigen foutindeling van Anthropic Er verandert niets in uw app, dus test het uw code niet geïsoleerd. Bewaar dat voor uw unittests.

Probeer het in uw app

Dev Proxy onderschept de aanvragen van uw app naar https://api.anthropic.com en retourneert fouten in de foutindeling van Anthropic, terwijl uw app de echte URL blijft aanroepen. Download een voorinstelling en start de dev-proxy ermee:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Wat het teruggeeft
anthropic-throttling Af en toe treedt 1 van de 4.429 rate_limit_error-reacties op (aanvragen, invoertokens, uitvoertokens en versnellingslimiet) of een 529 overloaded_error. Bij 429-fouten stelt Dev Proxy retry-after in en wordt aangegeven wanneer uw app de API te vroeg aanroept.
anthropic-random-errors Willekeurig een van de fouten uit de lijst met Claude API-fouten, waaronder 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 en 529, voor 50% van de aanvragen

Geen van beide voorinstellingen omvat een bestedingslimiet 429. Als u dat pad wilt testen, voegt u een reactie zonder retry-after-koptekst toe aan het anthropic-errors.json-bestand van de voorinstelling:

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

Als u wilt dat elke aanvraag mislukt, zodat u ziet wat er gebeurt wanneer de SDK geen nieuwe pogingen meer probeert, start u Dev Proxy met --failure-rate 100. Zie Foutpercentage van wijzigingsaanvraag voor meer informatie. Zie Dev Proxy instellen om Dev Proxy te installeren.

Volgende stappen 

Zie ook