Anthropic 529 overloaded_error: co to znaczy i jak go obsługiwać

Interfejs API Claude zwraca błąd typu overloaded_error z kodem 529, gdy interfejs API jest tymczasowo przeciążony. Zgodnie z Anthropic może się to zdarzyć, gdy w interfejsie API występuje duże obciążenie u wszystkich użytkowników. Twoja prośba jest poprawna. Interfejs API jest zajęty, więc odrzucił żądanie. Gdy organizacja przekroczy własne limity liczby żądań, otrzymasz zamiast tego wartość 429. Treść odpowiedzi ma taką samą strukturę jak każdy inny błąd interfejsu API Claude'a: obiekt type najwyższego poziomu typu error, obiekt type z message i request_id oraz error, które można przekazać pomocy technicznej Anthropic. Aby uzyskać więcej informacji, zobacz Błędy interfejsu API Claude'a.

529, 429 lub limit wydatków: jak je odróżnić

API Claude używa podobnie wyglądających komunikatów o błędach w przypadku bardzo różnych problemów. Niektóre znikają, jeśli poczekasz. To nie zniknie przed przyszłym miesiącem.

Odpowiedź error.type retry-after Co to znaczy Co zrobić
529 overloaded_error Użyj go, jeśli jest dostępny Interfejs API jest przeciążony u wszystkich użytkowników Wycofaj się i ponów próbę kilka razy
429 rate_limit_error Yes Twoja organizacja przekroczyła limit liczby żądań, tokenów wejściowych lub wyjściowych na minutę lub wzrosła zbyt szybko i osiągnęła limit przyspieszenia Czekaj tak długo, jak wskazuje retry-after
429 rate_limit_error, z error.details.error_code ustawionym na enforced_spend_limit_reached No Twoja organizacja osiągnęła miesięczny limit wydatków w poziomie użycia Nie próbuj ponownie. Użycie zostanie wstrzymane do 00:00 UTC pierwszego dnia następnego miesiąca lub do momentu przejścia do wyższego poziomu.
400 invalid_request_error No Użycie osiągnęło limit wydatków ustawiony przez Ciebie dla organizacji lub obszaru roboczego Podnieś lub usuń limit

Limit wydatków 429 ma ten sam typ błędu co limit szybkości żądań, więc kod, który ponawia próbę co rate_limit_error, wciąż kończy się niepowodzeniem. Anthropic zauważa, że ponawianie prób kończy się niepowodzeniem do momentu wznowienia dostępu, w tym automatyczne ponowienia w SDK. Aby uzyskać szczegółowe informacje, zobacz Osiąganie limitu wydatków.

Jak obsłużyć 529

  1. Przed ponowieniem próby sprawdź kod stanu. 529 i 429 wymagają różnych czasów oczekiwania, a 429 bez retry-after nie wymaga ponawiania próby w ogóle.
  2. Wycofaj przy błędzie 529. Ponów próbę z wykładniczym opóźnieniem i losowymi zakłóceniami, a następnie zatrzymaj się po kilku próbach. Jeśli odpowiedź ma nagłówek retry-after, zamiast tego zaczekaj tak długo.
  3. Pozwól zestawowi SDK wykonać pierwsze ponowienia. Oficjalne zestawy SDK Anthropic ponawiają próby w przypadku błędów połączenia, limitów szybkości i błędów 5xx dwa razy domyślnie, z wykładniczym wycofywaniem i uwzględniają retry-after, gdy jest obecny. Liczbę można zmienić za pomocą max_retries (maxRetries w języku TypeScript). Gdy w SDK skończą się ponowienia, kod otrzymuje błąd.
  4. Przestań ponawiać próby po osiągnięciu limitu wydatków. Jeśli odpowiedź 429 nie ma nagłówka retry-after, poinformuj użytkownika i wyślij powiadomienie do siebie.
  5. Informuj użytkownika. Umieść zadanie w kolejce i spróbuj ponownie później lub wyświetl jasny komunikat „zajęty, spróbuj ponownie za minutę” zamiast ogólnego błędu.

W zestawie SDK Python błąd 429 powoduje zgłoszenie anthropic.RateLimitError, a dowolny status 500 lub wyższy, w tym 529, zgłasza wartość 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")

Jak przetestować, czy aplikacja obsługuje błąd 529

Rzadko widzisz 529 podczas programowania. To zależy od ruchu generowanego przez wszystkich użytkowników interfejsu API Claude'a, więc nie możesz tego wywołać. Sposób testowania określa, czy przed użytkownikami znajdziesz błędy.

Approach Co znajdziesz Co tracisz
Poczekaj na produkcję Faktyczne przeciążenia Wszystko, dopóki użytkownik go nie trafi
Zamockuj interfejs API w testach lub pozwól agentowi programistycznemu napisać mock Czy gałąź błędu jest uruchamiana Rzeczywiste kody stanu i treści błędów Anthropic oraz zasady ponawiania prób w zestawie SDK. Aplikacja wymaga również przełącznika tylko do testów, aby połączyć się z mockiem.
Wywołuj rzeczywisty interfejs API aż do niepowodzenia Faktyczne zachowanie Nie można wywołać błędu 529 na żądanie i w ogóle nie można bezpiecznie wywołać limitu wydatków
Przechwytuj rzeczywisty ruch aplikacji i zwracaj kody 529 i 429 na żądanie Rzeczywiste adresy URL, prawdziwy zestaw SDK i zasady ponawiania prób oraz własny format błędu Anthropic Nic się nie zmienia w aplikacji, więc nie testuje twojego kodu w izolacji. Zachowaj testy jednostkowe do tego.

Wypróbuj ją w swojej aplikacji

Dev Proxy przechwytuje żądania aplikacji do https://api.anthropic.com i zwraca błędy w formacie błędów Anthropic, podczas gdy aplikacja nadal wywołuje rzeczywisty adres URL. Pobierz predefiniowane ustawienie i uruchom z nim Dev Proxy:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Co to zwraca
anthropic-throttling Losowo wybierana jest 1 z 4 429 rate_limit_error odpowiedzi (żądania, tokeny wejściowe, tokeny wyjściowe i limit przyspieszenia) lub 529 overloaded_error. W przypadku odpowiedzi 429 Dev Proxy ustawia retry-after i informuje Cię, gdy aplikacja ponownie wywołuje interfejs API zbyt wcześnie.
anthropic-random-errors Losowo jeden z błędów z listy błędów interfejsu API Claude'a, w tym 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 i 529 dla 50% żądań

Żaden z ustawień wstępnych nie zawiera limitu wydatków 429. Aby przetestować tą ścieżkę, dodaj odpowiedź bez nagłówka retry-after do pliku anthropic-errors.json ustawienia wstępnego:

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

Aby sprawić, by każde żądanie zakończyło się niepowodzeniem, tak aby zobaczyć, co się stanie, gdy w zestawie SDK skończą się próby ponawiania, uruchom Dev Proxy za pomocą polecenia --failure-rate 100. Aby uzyskać więcej informacji, zobacz Wskaźnik niepowodzeń żądań zmian. Aby zainstalować Dev Proxy, zobacz Set up Dev Proxy.

Następne kroki

Informacje dodatkowe