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 openAI zwraca wartość 429 „Osiągnięto limit liczby żądań”, gdy organizacja wysłała więcej żądań lub więcej tokenów na minutę niż dozwolone limity. Limity mają zastosowanie do organizacji, a nie dla każdego użytkownika. Te błędy są tymczasowe. Jeśli zaczekasz i ponownie wyślesz żądanie, zwykle zakończy się to powodzeniem. Niektóre inne 429 błędy z platformy OpenAI dotyczą rozliczeń, a te nie znikają, gdy czekasz. Aby uzyskać więcej informacji, zobacz Kody błędów.
Jak wyglądają błędy limitu żądań OpenAI
| Status | Error | Co to znaczy | Ponów próbę? |
|---|---|---|---|
429 |
rate_limit_exceeded, żądania na minutę (RPM) |
W ciągu minuty wysłano zbyt wiele żądań. | Tak, po Retry-After |
429 |
rate_limit_exceeded, tokeny na minutę (TPM) |
Twoje żądania przekroczyły limit tokenów na minutę. Komunikat pokazuje limit, liczbę użytych tokenów i liczbę tokenów, o które poproszono w żądaniu. | Tak, po Retry-After. Mniejsze żądania pomagają. |
429 |
slow_down (typ rate_limit_error) |
Twój ruch wzrósł zbyt szybko, mimo że mieścisz się w limitach RPM i TPM. | Tak, przy niższej stawce |
503 |
server_is_overloaded (typ service_unavailable_error) |
Serwery OpenAI są zajęte. | Tak, z dłuższymi opóźnieniami za każdym razem |
429 |
credit_balance_exhausted, błędy limitu wydatków lub limitu użycia (typ insufficient_quota) |
Nie masz kredytów lub przekraczasz limit. | No. Zobacz insufficient_quota OpenAI i credit_balance_exhausted. |
Większość tych błędów ma ten sam 429 status, więc nie można ich odróżnić wyłącznie na podstawie statusu. Przeczytaj error.code w treści odpowiedzi.
Jak obsługiwać błędy związane z limitem żądań OpenAI
- Najpierw sprawdź
error.code. Jeśli jest to kod rozliczeniowy, taki jakcredit_balance_exhausted, zatrzymaj ponawianie próby i poinformuj użytkownika. Ponowienie próby po błędzie rozliczeniowym nie przywróci dostępu. - Postępuj zgodnie z
Retry-After, gdy jest dostępny. Jeśli go brakuje, użyj algorytmu wykładniczego wydłużania odstępów z losowym opóźnieniem i ogranicz liczbę ponownych prób. - Zwolnij po
slow_down. Zmniejsz szybkość żądań, a następnie stopniowo zwiększaj ją. Praktyczna zasada OpenAI powyżej 1M wejściowego TPM polega na zwiększaniu ruchu o nie więcej niż 50% co 15 minut. - Wyślij mniej tokenów po błędzie TPM. Krótsze monity i odpowiedzi pozwalają na dopasowanie większej liczby żądań w każdej minucie.
- Cofnij się bardziej po
503. Zwiększ opóźnienie między kolejnymi próbami, a następnie sprawdź stronę stanu OpenAI. - Poinformuj użytkownika o tym, co się dzieje. „Zajęty, ponawianie próby w ciągu 5 sekund” jest lepsze niż wskaźnik ładowania, który nigdy się nie kończy.
Zestaw OpenAI Python SDK ponawia próby połączenia oraz odpowiedzi 408, 409, 429 i 5xx domyślnie 2 razy, z krótkim wykładniczo wydłużanym czasem ponawiania. Można to zmienić za pomocą max_retries. Gdy wyczerpią się ponowne próby, SDK zgłasza RateLimitError dla InternalServerError oraz 429 dla 503, więc kod nadal wymaga planu:
import openai
from openai import OpenAI
client = OpenAI(max_retries=3)
BILLING_CODES = {
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
}
def summarize(text: str) -> str | None:
try:
response = client.responses.create(model="gpt-4.1", input=text)
return response.output_text
except openai.RateLimitError as error:
if error.code in BILLING_CODES:
raise # Retrying won't help: alert and tell the user
return None # Still throttled after retries: show "busy, try again"
except openai.InternalServerError:
return None
Jak przetestować, czy aplikacja obsługuje limity szybkości żądań interfejsu OpenAI
Rzadko napotykasz limit żądań OpenAI podczas opracowywania. Jesteś jedynym użytkownikiem, a prompty są krótkie. Dlatego sposób testowania obsługi limitów szybkości decyduje, czy znajdziesz usterki, zanim zrobią to użytkownicy.
| Approach | Co znajdziesz | To, co przegapisz |
|---|---|---|
| Poczekaj na produkcję | Rzeczywiste awarie | Wszystko, dopóki użytkownik tego nie kliknie |
| Mockuj interfejs API w testach lub pozwól agentowi kodowania napisać mock | Czy gałąź ponowienia jest uruchamiana | Rzeczywiste treści błędów i kody OpenAI oraz zasady ponawiania prób zestawu SDK. Aplikacja wymaga również przełącznika tylko do testowania, aby uzyskać dostęp do mocka. |
| Wywołuj rzeczywiste API, aż API zacznie Cię ograniczać | Rzeczywiste zachowanie | Nie można wyzwolić określonego błędu na żądanie, a każde żądanie kosztuje tokeny |
| Przechwytuj rzeczywisty ruch aplikacji i zwracaj błędy interfejsu OpenAI na żądanie | Rzeczywiste adresy URL, prawdziwy zestaw SDK i zasady ponawiania prób oraz własny format błędu OpenAI | W Twojej aplikacji nic się nie zmienia, więc aplikacja nie testuje Twojego kodu w izolacji. Zachowaj testy jednostkowe do tego. |
Wypróbuj ją w swojej aplikacji
Dev Proxy przechwytuje żądania aplikacji do api.openai.com i zwraca błędy OpenAI, podczas gdy aplikacja nadal wywołuje rzeczywiste adresy URL. Preset openai-throttling kończy się niepowodzeniem w przypadku większości żądań z losowo wybranymi błędami TPM i RPM rate_limit_exceeded, slow_down, credit_balance_exhausted i 503server_is_overloaded, we własnym formacie OpenAI. Odpowiedzi 429 dotyczące limitu szybkości zawierają nagłówek Retry-After, a jeśli aplikacja ponawia próbę, zanim ten czas upłynie, Dev Proxy zgłasza to.
Pobierz preset i uruchom Dev Proxy za jego pomocą:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Następnie uruchom aplikację jak zwykle i obserwuj, co robi. Aby zainstalować Dev Proxy, zobacz Konfigurowanie Dev Proxy.
Aby sprawdzić, jak działa aplikacja, gdy zabraknie tokenów na minutę, na podstawie tokenów monitu i odpowiedzi używanych przez żądania, zobacz Limity tokenów modelu językowego testu.