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.
Na pierwszy rzut oka
Cel: Testowanie sposobu obsługi przez aplikację limitu szybkości interfejsu OpenAI i błędów przeciążenia
Czas: 10 minut
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Wymagania wstępne:konfigurowanie serwera proxy deweloperskiego
Aplikacja działa w środowisku deweloperskim, a następnie kończy się niepowodzeniem w środowisku produkcyjnym z błędem 429 Too Many Requests. Limity szybkości OpenAI zależą od poziomu użycia organizacji, modelu i wszystkich innych użytkowników korzystających z tej samej organizacji, więc nie można ich niezawodnie osiągnąć celowo. Serwer proxy deweloperski zwraca te same błędy, które zwraca interfejs API OpenAI, aby zobaczyć, co robi twoja aplikacja przed wykonaniem czynności przez użytkowników.
Dowiedz się, co zwraca interfejs OpenAI
Nie każdy błąd OpenAI oznacza "spróbuj ponownie". Aplikacja musi je odróżnić.
| Status | error.code |
Co to znaczy | Co powinna zrobić aplikacja |
|---|---|---|---|
| 429 | rate_limit_exceeded |
Osiągnięto limit żądań na minutę (RPM) lub tokenów na minutę (TPM). | Poczekaj na czas podany w nagłówku Retry-After, a następnie ponów próbę. |
| 429 | slow_down |
Częstotliwość żądań wzrosła zbyt szybko, nawet jeśli mieścisz się w ramach swoich limitów. | Zaczekaj na Retry-After, zmniejsz liczbę żądań i zwiększ ją stopniowo. |
| 429 | credit_balance_exhausted |
Twoja organizacja nie ma środków przedpłaconych. | Nie próbuj ponownie. Ponawianie próby nie spowoduje przywrócenia dostępu. Poinformuj użytkownika lub powiadom administratora. |
| 503 | server_is_overloaded |
Model nie ma teraz wystarczającej pojemności. | Poczekaj na Retry-After, jeśli jest obecny, a następnie spróbuj ponownie z rosnącymi opóźnieniami. |
Aby uzyskać pełną listę, zobacz Kody błędów w dokumentacji interfejsu OpenAI.
Important
Wszystkie 3 błędy w 429 wierszach używają tego samego kodu stanu. Jeśli aplikacja ponawia próby po każdym błędzie 429, nadal ponawia próby błędów rozliczeniowych, z których nigdy nie można się odzyskać. Sprawdź error.code, aby zdecydować, co zrobić.
Dowiedz się, co robi zestaw OpenAI SDK
Oficjalne pakiety SDK OpenAI dla Pythona i JavaScript domyślnie ponawiają żądania 2 razy po odpowiedziach 408, 409, 429 i 5xx oraz w przypadku błędów połączenia, z wykładniczo rosnącym opóźnieniem. Możesz to zmienić za pomocą opcji max_retries w Pythonie i maxRetries w języku JavaScript.
Ponawianie prób zestawu SDK obejmuje krótkie skoki. Aplikacja nadal musi zdecydować, co się stanie po zakończeniu ponownych prób i jak obsługiwać błędy, których ponawianie nie rozwiązuje. W Python, 429 podnosi RateLimitError, a 503 podnosi InternalServerError, więc obsłuż oba.
Wskazówka
Aby dokładnie sprawdzić, co otrzymuje Twój kod obsługi błędów, ustaw max_retries=0 (Python) lub maxRetries: 0 (JavaScript) podczas testowania. Następnie ponownie włącz ponowienia SDK.
Symulowanie limitów liczby żądań OpenAI
Dev Proxy ma ustawienie predefiniowane z błędami OpenAI w tabeli. Pobierz go:
devproxy config get openai-throttling
Uruchom Dev Proxy z presetem:
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Ustawienie wstępne powoduje niepowodzenie 90% żądań do https://api.openai.com/* z losowym błędem z tabeli. W przypadku odpowiedzi o ograniczaniu ustawia nagłówek Retry-After i używa polecenia RetryAfterPlugin, aby sprawdzić, czy aplikacja czeka tak długo, zanim ponownie wywoła interfejs API.
Upewnij się, że aplikacja wysyła żądania za pośrednictwem Dev Proxy i ufa certyfikatowi Dev Proxy. W przypadku Node.js zobacz Używanie serwera proxy deweloperskiego z aplikacjami Node.js. W przypadku innych środowisk uruchomieniowych zobacz Rozwiązywanie problemów z Dev Proxy.
Uruchom aplikację i sprawdź, czy:
- Po wystąpieniu błędu
rate_limit_exceededlubslow_downaplikacja czeka przez czasRetry-After. Jeśli wywoła interfejs API zbyt wcześnie, Dev Proxy zgłosi to i ograniczy żądanie. - Po wystąpieniu
credit_balance_exhaustedbłędu aplikacja przestaje wywoływać interfejs API i wyświetla jasny komunikat. - Po wystąpieniu
server_is_overloadedbłędu aplikacja ponawia próbę z opóźnieniem, a gdy próby się wyczerpią, przechodzi do rozwiązania zastępczego lub wyświetla jasny komunikat zamiast śladu stosu. - Twoja aplikacja nie powoduje utraty efektów pracy. Na przykład długa rozmowa na czacie lub zadanie wsadowe jest kontynuowane po błędzie.
Aby zmienić to, jak często żądania kończą się niepowodzeniem, użyj opcji --failure-rate. Na przykład, aby spowodować niepowodzenie każdego żądania:
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json" --failure-rate 100
Symulowanie limitów tokenów dla platformy Azure OpenAI i innych dostawców
Ustawienie predefiniowane zwraca błędy losowo, niezależnie od liczby tokenów używanych przez aplikację. Aby ograniczyć żądania na podstawie rzeczywistego użycia tokenu, na przykład aby zobaczyć, co się stanie, gdy długa konwersacja przekroczy limit TPM, użyj elementu LanguageModelRateLimitingPlugin. Współpracuje z dowolnym interfejsem API zgodnym z interfejsem OpenAI, w tym Azure openAI i modelami lokalnymi. Aby uzyskać więcej informacji, zobacz Testowanie limitów tokenów modelu języka.
Następny krok
Dowiedz się, jak symulować limity oparte na tokenach.
Informacje dodatkowe
- Przetestuj moją aplikację z błędami modelu językowego — symulowanie nieoczekiwanych odpowiedzi modelu językowego
- Symulowanie błędów z interfejsów API interfejsów OpenAI — Utwórz własny plik błędów OpenAI
- Przetestuj, czy moja aplikacja prawidłowo obsługuje ograniczanie przepustowości — ograniczanie przepustowości w dowolnym interfejsie API
- Użyj gotowych konfiguracji — Pracuj z presetami
- RetryAfterPlugin — weryfikowanie zachowania ponawiania prób