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.
Interfejsy API modelu językowego ograniczają Twój ruch na 2 sposoby naraz: liczbę żądań wysyłanych na minutę (RPM) i liczbę tokenów używanych na minutę (TPM). Możesz pozostać znacznie poniżej limitu żądań i nadal być ograniczany, ponieważ kilka długich monitów wykorzystało budżet tokenu. Po osiągnięciu któregokolwiek z tych dwóch limitów interfejs API odpowiada 429 Too Many Requests i aplikacja musi czekać.
Jak OpenAI, Azure OpenAI i Anthropic liczą
| Provider | Ograniczenia | Co warto wiedzieć |
|---|---|---|
| Otwarta sztuczna inteligencja | RPM, żądania dziennie, TPM, tokeny dziennie i inne, na organizację i projekt, na model | Osiągniesz ten limit, który zostanie wyczerpany jako pierwszy. W przypadku limitu tokenów żądanie liczy się jako większa z wartości: max_tokens oraz szacunek na podstawie liczby znaków. Liczba żądań, które zakończyły się niepowodzeniem, też. |
| Azure OpenAI | TPM przypisany do każdego wdrożenia oraz limit RPM ustawiony proporcjonalnie do niego | RPM jest sprawdzany w oknach 1 lub 10 sekund, więc nagły skok dostaje 429 nawet wtedy, gdy suma na minutę jest w porządku. Szacunkowa liczba tokenów obejmuje max_tokens. |
| Antropiczny | RPM, tokeny wejściowe na minutę (ITPM) i tokeny wyjściowe na minutę (OTPM), dla każdego modelu | Pula jest uzupełniana w sposób ciągły, a 60 obr./min może być wymuszane jako 1 żądanie na sekundę. W przypadku większości modeli buforowane tokeny wejściowe nie są liczone w kierunku ITPM, a max_tokens nie jest liczone w kierunku OTPM. |
Jeśli ustawisz wartość max_tokens na 4000 i uzyskasz z powrotem 200 tokenów, OpenAI i Azure OpenAI nadal zliczają 4000 tokenów względem limitu. W ten sposób można otrzymywać błędy 429, podczas gdy metryki użycia wydają się znacznie poniżej przydziału.
Co oznacza 429 dla każdego dostawcy
Nie każdy błąd 429 znika, jeśli poczekasz.
| Provider | Czekaj i ponów próbę | Zatrzymaj się i powiedz komuś |
|---|---|---|
| Otwarta sztuczna inteligencja | 429 dla żądań lub tokenów, 429 slow_down (Twój ruch wzrósł zbyt szybko, nawet w granicach limitów) i 503 server_is_overloaded. Poczekaj na Retry-After, gdy jest dostępny. |
429 z credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceeded lub organization_usage_limit_exceeded w error.code. Ponawianie próby nie spowoduje przywrócenia dostępu. |
| Azure OpenAI | 429 z powodu TPM lub RPM wdrożenia, pojemności systemu albo tymczasowego obniżenia limitu szybkości żądań. Zaczekaj na retry-after-ms. |
Trwałe błędy 429 w środowisku produkcyjnym, gdy wykorzystanie jest poniżej zatwierdzonego przydziału. Sprawdź alokację modułu TPM wdrożenia, a następnie otwórz wniosek o pomoc techniczną. |
| Antropiczny | 429 rate_limit_error z nagłówkiem retry-after, w tym limity ograniczania szybkości po gwałtownym wzroście użycia i 529 overloaded_error. |
429 — miesięczny limit wydatków. Nie ma retry-after nagłówka, error.details.error_code jest enforced_spend_limit_reached i nadal kończy się błędem, dopóki dostęp nie zostanie wznowiony. |
Jak radzić sobie z limitami żądań usługi LLM
- Sprawdź, które 429 masz. Błędy rozliczeń, wydatków i przydziałów wymagają osoby, a nie ponawiania próby.
- Czekaj tak długo, jak wymaga tego interfejs API. OpenAI i Anthropic wysyłają
retry-afterw kilka sekund. Usługa Azure OpenAI wysyłaretry-after-msw milisekundach. Bez wskazówki, stosuj wykładnicze wydłużanie odstępów z losowym jitterem i ogranicz zarówno liczbę prób, jak i łączny czas. - Dowiedz się, co już robi Twoje SDK. Pakiety SDK Python od OpenAI i Anthropic domyślnie 2 razy ponawiają żądania po błędach połączenia oraz odpowiedziach
408,409,429i 5xx. Jeśli dodasz własną pętlę ponawiania prób, wyłącz ponawianie prób zestawu SDK, na przykład za pomocąmax_retries=0w Pythonie, jak zaleca Azure OpenAI, w przeciwnym razie liczba prób się zwielokrotni. - Ogranicz to, co się liczy. Na platformie OpenAI i Azure OpenAI ustaw
max_tokenswartość zbliżoną do oczekiwanego rozmiaru odpowiedzi. W Anthropic buforuj powtarzaną zawartość, na przykład instrukcje systemowe. - Zwiększaj stopniowo. Gwałtowny skok ruchu powoduje limity przyspieszenia OpenAI
slow_downi Anthropic, nawet w ramach limitów. OpenAI sugeruje, że po osiągnięciu 1 miliona tokenów wejściowych na minutę rośnie się o nie więcej niż 50% co 15 minut. - Nie odtwarzaj strumienia, który został już odtworzony. Błąd po uruchomieniu strumienia może pojawić się jako zdarzenie strumienia, a OpenAI odradza automatyczne ponowne odtworzenie żądania po odebraniu danych wyjściowych.
- Poinformuj użytkownika, gdy żądanie zawiesi się z powodu błędu 429, zamiast wyświetlać wskaźnik ładowania.
Jak przetestować, czy aplikacja obsługuje limity żądań usługi LLM
| Approach | Co znajdziesz | Co przegapiłeś |
|---|---|---|
| Utwórz atrapę klienta SDK w testach lub pozwól agentowi programistycznemu ją napisać. | Czy gałąź błędu jest uruchamiana | Rzeczywiste kody stanu dostawcy, kody błędów i nagłówki oraz własne ponowienia zestawu SDK. Aplikacja wymaga również przełącznika tylko do testów, aby połączyć się z mockiem. |
| Wywołuj rzeczywiste API, dopóki API nie zacznie ograniczać żądań | Faktyczne zachowanie | Płacisz za każdy token i nie możesz spowodować slow_downprzeciążenia ani limitu wydatków według uznania |
| Przechwytuj rzeczywisty ruch aplikacji i zwracaj błędy dostawcy lub ograniczaj na podstawie tokenów używanych przez aplikację | Rzeczywiste adresy URL, zasady ponawiania prób w pakiecie SDK i treści odpowiedzi błędów dostawcy z limitem wybranym przez Ciebie | Twój kod w izolacji. Zachowaj testy jednostkowe do tego. |
Wypróbuj ją w swojej aplikacji
Dev Proxy przechwytuje żądania aplikacji do interfejsu API modelu językowego i zwraca błędy zwracane przez dostawcę, podczas gdy aplikacja nadal wywołuje rzeczywisty adres URL. Dla OpenAI pobierz preset i uruchom Dev Proxy z jego użyciem:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Ustawienie wstępne openai-throttling kończy się niepowodzeniem w przypadku 90% żądań do https://api.openai.com/* z losowym błędem: rate_limit_exceeded w przypadku modułu TPM lub RPM, slow_down, credit_balance_exhausted lub 503 server_is_overloaded. Ustawienie wstępne anthropic-throttling działa tak samo dla https://api.anthropic.com/* z limitami RPM, tokenów wejściowych, tokenów wyjściowych, przyspieszenia 429 i błędów 529 overloaded_error. Oba predefiniowane ustawienia zawierają wtyczkę RetryAfterPlugin, która informuje, kiedy aplikacja ponownie wywoła interfejs API, zanim upłynie retry-after czas wskazany w odpowiedzi 429. Nie sprawdza odpowiedzi 503 i 529.
Aby ograniczyć liczbę tokenów faktycznie używanych przez aplikację, użyj elementu LanguageModelRateLimitingPlugin. Zlicza ona tokeny monitu i ukończenia, zgłaszane przez każdą odpowiedź, i zwraca kod 429 z retry-after, gdy aplikacja przekroczy ustawione limity. Współpracuje z interfejsami API zgodnymi z interfejsami OpenAI, w tym Azure openAI i modelami lokalnymi:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"https://*.openai.azure.com/openai/deployments/*/chat/completions*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 60
}
}
Wtyczka nie odtwarza oszacowania max_tokens. Domyślna treść 429 używa kodu insufficient_quota. Aby zwrócić treść błędu oczekiwaną przez aplikację dla limitu liczby żądań, ustaw whenLimitExceeded na Custom i wskaż customResponseFile na własną odpowiedź. Aby zainstalować Dev Proxy, zobacz Set up Dev Proxy.