Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Symuluje ograniczanie szybkości opartej na tokenach dla interfejsów API modelu języka przez śledzenie użycia monitów i tokenów ukończenia w konfigurowalnych oknach czasu.
Przykład konfiguracji
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"http://localhost:11434/*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 5000,
"completionTokenLimit": 5000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Throttle",
"headerRetryAfter": "retry-after"
}
}
Właściwości konfiguracji
| Property | Description | Default |
|---|---|---|
promptTokenLimit |
Maksymalna liczba tokenów monitu dozwolonych w przedziale czasu. | 5000 |
completionTokenLimit |
Maksymalna liczba tokenów ukończenia dozwolonych w przedziale czasu. | 5000 |
resetTimeWindowSeconds |
Przedział czasu w sekundach, po którym limity tokenów są resetowane. | 60 |
whenLimitExceeded |
Zachowanie odpowiedzi w przypadku przekroczenia limitów tokenów. Możliwe wartości to Throttle i Custom. |
Throttle |
headerRetryAfter |
Nazwa nagłówka HTTP do uwzględnienia informacji po ponowieniu próby. | retry-after |
customResponseFile |
Ścieżka do pliku zawierającego odpowiedź niestandardową, gdy whenLimitExceeded jest ustawiona na Customwartość . |
token-limit-response.json |
Niestandardowa konfiguracja odpowiedzi
Gdy whenLimitExceeded jest ustawiona wartość Custom, możesz zdefiniować niestandardową odpowiedź w osobnym pliku JSON:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json",
"statusCode": 429,
"headers": [
{
"name": "retry-after",
"value": "@dynamic"
},
{
"name": "content-type",
"value": "application/json"
}
],
"body": {
"error": {
"message": "You have exceeded your token quota. Please wait before making additional requests.",
"type": "insufficient_quota",
"code": "token_quota_exceeded"
}
}
}
Właściwości odpowiedzi niestandardowej
| Property | Description |
|---|---|
statusCode |
Kod stanu HTTP, który ma być zwracany po przekroczeniu limitu tokenu. |
headers |
Tablica nagłówków HTTP do uwzględnienia w odpowiedzi. Służy @dynamic do ponawiania próby po, aby automatycznie obliczyć sekundy do zresetowania. |
body |
Obiekt treści odpowiedzi, który jest serializowany do formatu JSON. |
Jak to działa
Model LanguageModelRateLimitingPlugin działa przez:
- Przechwytywanie żądań interfejsu API openAI: monitoruje żądania POST do skonfigurowanych adresów URL zawierających jednostki żądań zgodne z interfejsem OpenAI
-
Śledzenie użycia tokenu: analizuje odpowiedzi w celu wyodrębnienia
prompt_tokensicompletion_tokensz sekcji użycia - Wymuszanie limitów: utrzymuje sumy uruchomione zużytych tokenów w skonfigurowanym przedziale czasu
- Zapewnianie odpowiedzi ograniczania przepustowości: w przypadku przekroczenia limitów zwraca odpowiedzi dotyczące ograniczania przepustowości w warstwie Standardowa lub odpowiedzi niestandardowe
Obsługiwane typy żądań
Wtyczka obsługuje zarówno uzupełnianie interfejsu OpenAI, jak i żądania ukończenia czatu:
-
Żądania ukończenia: żądania z właściwością
prompt -
Żądania ukończenia czatu: żądania z właściwością
messages
Śledzenie tokenów
Użycie tokenu jest śledzone oddzielnie dla:
- Tokeny monitowania: tokeny wejściowe używane przez żądanie
- Tokeny ukończenia: tokeny wyjściowe wygenerowane przez odpowiedź
Po przekroczeniu dowolnego limitu kolejne żądania są ograniczane do momentu zresetowania przedziału czasu.
Zachowanie przedziału czasu
- Limity tokenów są resetowane po skonfigurowaniu
resetTimeWindowSeconds - Czasomierz resetowania jest uruchamiany po przetworzeniu pierwszego żądania
- Po wygaśnięciu przedziału czasu liczniki tokenów monitu i ukończenia są resetowane do skonfigurowanych limitów
Domyślna odpowiedź ograniczania przepustowości
Gdy whenLimitExceeded jest ustawiona wartość Throttle, wtyczka zwraca standardową odpowiedź o błędzie zgodną z interfejsem OpenAI:
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
Odpowiedź obejmuje:
- Kod stanu HTTP:
429 Too Many Requests -
retry-afternagłówek z sekundami do momentu zresetowania limitów tokenów - Nagłówki CORS, gdy oryginalne żądanie zawiera
Originnagłówek
Przypadki użycia
LanguageModelRateLimitingPlugin jest przydatny w następujących celach:
- Testowanie ograniczania szybkości opartej na tokenach: symuluj zachowanie aplikacji, gdy dostawcy modelu językowego wymuszają limity przydziału tokenów
- Symulacja kosztów programowania: omówienie wzorców użycia tokenów podczas programowania przed osiągnięciu rzeczywistych limitów interfejsu API
- Testowanie odporności: sprawdź, czy aplikacja prawidłowo obsługuje błędy limitu tokenów i implementuje odpowiednią logikę ponawiania prób
- Lokalne testowanie usługi LLM: testowanie scenariuszy ograniczania tokenów przy użyciu lokalnych modeli językowych (takich jak Ollama), które nie wymuszają własnych limitów
Przykładowe scenariusze
Scenariusz 1. Ograniczanie tokenów podstawowych
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 300
}
}
Ta konfiguracja umożliwia maksymalnie 1000 tokenów monitów i 500 tokenów ukończenia w ciągu 5 minut.
Scenariusz 2. Niestandardowe odpowiedzi na błędy
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 2000,
"completionTokenLimit": 1000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Custom",
"customResponseFile": "custom-token-error.json"
}
}
Ta konfiguracja używa niestandardowego pliku odpowiedzi do dostarczania wyspecjalizowanych komunikatów o błędach w przypadku przekroczenia limitów tokenów.