Anthropic 529 overloaded_error: mit jelent és hogyan kell kezelni

A Claude API overloaded_error hibával tér vissza a 529 hibatípussal, ha az API átmenetileg túlterhelt. A Anthropic szerint ez akkor fordulhat elő, ha az API nagy forgalmat tapasztal az összes felhasználót érintően. A kérése rendben van. Az API foglalt volt, ezért a kérés el lett utasítva. Ha szervezete túllépi a saját lekérési korlátait, 429-et kap. A válasz törzse ugyanolyan felépítésű, mint minden más Claude API-hiba: egy legfelső szintű type of error, egy error objektum type és message mezővel, valamint egy request_id, amelyet megadhat az Anthropic ügyfélszolgálatának. További információ: Claude API-hibák.

529, 429 vagy költségkorlát: hogyan lehet megkülönböztetni őket

A Claude API hasonló kinézetű hibákat használ nagyon eltérő problémák jelölésére. Némelyik elmúlik, ha vársz. Nem múlik el a következő hónapig.

Válasz error.type retry-after Mit jelent ez? Teendők
529 overloaded_error Használja, ha ott van Az API minden felhasználó számára túlterhelt Várjon, majd próbálja újra néhányszor
429 rate_limit_error Yes A szervezet túllépte a percenkénti kérelmek, a bemeneti tokenek vagy a kimeneti tokenek számának korlátját, vagy túl gyorsan növelte a terhelést, és elérte a gyorsulási korlátot Várjon addig, ameddig retry-after mondja
429 rate_limit_error, a következőre error.details.error_code van állítva: enforced_spend_limit_reached No A szervezet elérte a használati csomag havi költségkorlátját Ne próbálkozzon újra. A használat a következő hónap első napján 00:00 UTC-ig szünetel, vagy amíg magasabb szintre nem lép.
400 invalid_request_error No A használat elérte a szervezeten vagy munkaterületen beállított költségkeretet Növelje vagy távolítsa el a korlátozást

A 429-es kiadási korlát hibatípusa megegyezik a sebességkorlátozáséval, ezért a minden rate_limit_error után újrapróbálkozó kód továbbra is sikertelen marad. Anthropic megjegyzi, hogy az újrapróbálkozások a hozzáférés folytatásáig meghiúsulnak, beleértve az SDK automatikus újrapróbálkozásait is. További részletekért lásd: A költségkorlát elérése.

Hogyan kezeljünk egy 529-es számlát

  1. Az újrapróbálkozás előtt ellenőrizze az állapotkódot. Egy 529 és egy 429 eltérő várakozást igényel, és a retry-after nélküli 429 egyáltalán nem igényel újrapróbálkozást.
  2. Álljon el az 529-től. Próbálkozzon újra exponenciálisan növekvő várakozási idővel és véletlenszerű jitterrel, és néhány kísérlet után állítsa le. Ha a válasz retry-after fejléccel rendelkezik, akkor inkább várjon ennyi ideig.
  3. Hagyja, hogy az SDK végezze el az első újrapróbálkozásokat. A hivatalos Anthropic SDK-k alapértelmezés szerint kétszer újrapróbálkoznak kapcsolódási hibák, sebességkorlátozás és 5xx hibák esetén, exponenciális visszalépéssel, és figyelembe veszik a retry-after elemet, ha az jelen van. A darabszámot a max_retries használatával módosíthatja (maxRetries TypeScriptben). Ha az SDK kifogy az újrapróbálkozási lehetőségekből, a kód hibát kap.
  4. Ne próbálkozzon újra költségkorlát esetén. Ha a 429-nek nincs retry-after fejléce, mondja el a felhasználónak, és riassza magát.
  5. Tájékoztassa a felhasználót. Tegye a munkát várólistára, és később próbálkozzon újra, vagy általános hiba helyett jelenítsen meg egy egyértelmű „foglalt, próbálkozzon újra egy perc múlva” üzenetet.

A Python SDK-ban a 429-es anthropic.RateLimitError kivételt vált ki, és bármely 500-as vagy magasabb státuszkód, beleértve az 529-et is, anthropic.InternalServerError kivételt vált ki:

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")

Annak tesztelése, hogy az alkalmazás kezeli-e az 529-et

Fejlesztés közben ritkán látni 529-es hibát. Ez minden Claude API-felhasználó forgalmától függ, ezért nem tudod kiváltani. A tesztelés módja határozza meg, hogy Ön a felhasználók előtt találja-e meg a hibákat.

Approach Mit talál? Amit hiányol
Várjon az éles környezetre Tényleges túlterhelések Minden, amíg egy felhasználó rá nem kattint
Mockold az API-t a tesztjeidben, vagy hagyd, hogy a kódoló asszisztens megírja a mockot Hogy lefut-e a hibaág Anthropic valós állapotkódjait és hibatörzseit, valamint az SDK újrapróbálkozási szabályzatát. Az alkalmazásnak egy csak tesztelési kapcsolóra is szüksége van a mock eléréséhez.
Hívja meg a valódi API-t, amíg hibát nem ad Valós viselkedés Nem idézhet elő igény szerint 529-es eseményt, és egyáltalán nem válthat ki biztonságosan költési korlátot
Elfogja az alkalmazás valós forgalmát, és igény szerint 529-et és 429-et ad vissza Valós URL-címek, valódi SDK- és újrapróbálkozési szabályzat, valamint Anthropic saját hibaformátuma Az alkalmazásban semmi sem változik, ezért nem teszteli a kódot külön-külön. Arra valók az egységtesztek.

Próbálja ki az alkalmazásában

A Dev Proxy elfogja az alkalmazás kéréseit https://api.anthropic.com Anthropic hibaformátumában, és visszaadja a hibákat, miközben az alkalmazás folyamatosan meghívja a valódi URL-címet. Töltsön le egy előbeállítást, és indítsa el vele a Dev Proxyt:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Mit ad vissza?
anthropic-throttling Véletlenszerűen 1 a 4 429 rate_limit_error válaszból (kérések, bemeneti jogkivonatok, kimeneti jogkivonatok és gyorsulási korlát) vagy egy 529 overloaded_error. 429-es válaszok esetén a Dev Proxy beállítja a retry-after értéket, és jelzi, ha az alkalmazás túl korán hívja meg újra az API-t.
anthropic-random-errors Véletlenszerűen a Claude API-hibalista egyik hibája, beleértve a 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 és 529 hibát, 50% kérés esetén

Egyik előre beállított érték sem tartalmaz 429-et. Az elérési út teszteléséhez adjon hozzá egy fejléc nélküli retry-after választ az előre beállított anthropic-errors.json fájlhoz:

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

Ha azt szeretné, hogy minden kérés sikertelen legyen, így láthatja, mi történik, ha az SDK kifogy az újrapróbálkozási lehetőségekből, indítsa el a Dev Proxyt a következővel: --failure-rate 100 További információkért lásd a módosítási kérelmek sikertelenségi arányát ismertető témakört. A Dev Proxy telepítéséhez lásd: Dev Proxy beállítása.

További lépések

Lásd még