Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Przed ponowieniem próby sprawdź kod stanu.
529i429wymagają różnych czasów oczekiwania, a429bezretry-afternie wymaga ponawiania próby w ogóle. - 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. - 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(maxRetriesw języku TypeScript). Gdy w SDK skończą się ponowienia, kod otrzymuje błąd. - 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. - 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.