Udostępnij przez


LanguageModelRateLimitingPlugin

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.

Zrzut ekranu przedstawiający wiersz polecenia z serwerem proxy dewelopera symulującym odpowiedź na żądanie interfejsu API LLM ograniczającą szybkość modelu języka.

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:

  1. Przechwytywanie żądań interfejsu API openAI: monitoruje żądania POST do skonfigurowanych adresów URL zawierających jednostki żądań zgodne z interfejsem OpenAI
  2. Śledzenie użycia tokenu: analizuje odpowiedzi w celu wyodrębnienia prompt_tokens i completion_tokens z sekcji użycia
  3. Wymuszanie limitów: utrzymuje sumy uruchomione zużytych tokenów w skonfigurowanym przedziale czasu
  4. 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-after nagłówek z sekundami do momentu zresetowania limitów tokenów
  • Nagłówki CORS, gdy oryginalne żądanie zawiera Origin nagłó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.

Następny krok