Testowanie sposobu obsługi limitów szybkości interfejsu OpenAI przez aplikację

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_exceeded lub slow_down aplikacja czeka przez czas Retry-After. Jeśli wywoła interfejs API zbyt wcześnie, Dev Proxy zgłosi to i ograniczy żądanie.
  • Po wystąpieniu credit_balance_exhausted błędu aplikacja przestaje wywoływać interfejs API i wyświetla jasny komunikat.
  • Po wystąpieniu server_is_overloaded błę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