Delen via


LanguageModelRateLimitingPlugin

Simuleert snelheidsbeperking op basis van tokens voor taalmodel-API's door het bijhouden van prompt- en voltooiingstokenverbruik binnen configureerbare tijdvensters.

Schermopname van een opdrachtprompt met de Dev Proxy die een taalmodelsnelheidsbeperkingsreactie simuleert voor een LLM-API-aanvraag.

Configuratievoorbeeld

{
  "$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"
  }
}

Configuratie-eigenschappen

Property Description Default
promptTokenLimit Maximum aantal prompttokens dat is toegestaan binnen het tijdvenster. 5000
completionTokenLimit Maximum aantal voltooiingstokens dat is toegestaan binnen het tijdvenster. 5000
resetTimeWindowSeconds Tijdvenster in seconden waarna tokenlimieten opnieuw worden ingesteld. 60
whenLimitExceeded Reactiegedrag wanneer tokenlimieten worden overschreden. Deze waarde kan Throttle of Custom zijn. Throttle
headerRetryAfter De naam van de HTTP-header voor het opnieuw proberen van gegevens. retry-after
customResponseFile Pad naar bestand met aangepaste respons wanneer whenLimitExceeded deze is ingesteld op Custom. token-limit-response.json

Aangepaste antwoordconfiguratie

Wanneer whenLimitExceeded dit is ingesteld Custom, kunt u een aangepast antwoord definiƫren in een afzonderlijk JSON-bestand:

{
  "$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"
    }
  }
}

Aangepaste antwoordeigenschappen

Property Description
statusCode HTTP-statuscode die moet worden geretourneerd wanneer de tokenlimiet wordt overschreden.
headers Matrix van HTTP-headers die moeten worden opgenomen in het antwoord. Gebruik @dynamic deze functie voor opnieuw proberen na het automatisch berekenen van seconden totdat deze opnieuw is ingesteld.
body Antwoordtekstobject dat is geserialiseerd naar JSON.

Hoe het werkt

LanguageModelRateLimitingPlugin werkt door:

  1. OpenAI API-aanvragen onderscheppen: POST-aanvragen controleren op geconfigureerde URL's die openAI-compatibele aanvraagbody's bevatten
  2. Tokenverbruik bijhouden: parseert antwoorden om te extraheren prompt_tokens en completion_tokens uit de gebruikssectie
  3. Limieten afdwingen: onderhoudt het uitvoeren van totalen van verbruikte tokens binnen het geconfigureerde tijdvenster
  4. Beperkingsreacties verleent: Wanneer limieten worden overschreden, retourneert u standaardbeperkingsreacties of aangepaste antwoorden

Ondersteunde aanvraagtypen

De invoegtoepassing ondersteunt zowel OpenAI-voltooiings- als chat-voltooiingsaanvragen:

  • Voltooiingsaanvragen: Aanvragen met een prompt eigenschap
  • Aanvragen voor chatvoltooiing: aanvragen met een messages eigenschap

Tokentracking

Tokenverbruik wordt afzonderlijk bijgehouden voor:

  • Prompttokens: invoertokens die door de aanvraag worden gebruikt
  • Voltooiingstokens: Uitvoertokens gegenereerd door het antwoord

Wanneer een van beide limieten wordt overschreden, worden de volgende aanvragen beperkt totdat het tijdvenster opnieuw wordt ingesteld.

Gedrag van tijdvensters

  • Tokenlimieten opnieuw instellen na de geconfigureerde resetTimeWindowSeconds
  • De timer voor opnieuw instellen wordt gestart wanneer de eerste aanvraag wordt verwerkt
  • Wanneer een tijdvenster verloopt, worden prompt- en voltooiingstokentellers opnieuw ingesteld op de geconfigureerde limieten

Standaardbeperkingsreactie

Wanneer whenLimitExceeded deze is ingesteld Throttleop, retourneert de invoegtoepassing een standaard openAI-compatibel foutantwoord:

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

Het antwoord bevat:

  • HTTP-statuscode: 429 Too Many Requests
  • retry-after header met seconden totdat tokenlimieten opnieuw worden ingesteld
  • CORS-headers wanneer de oorspronkelijke aanvraag een Origin header bevat

Gebruikssituaties

LanguageModelRateLimitingPlugin is handig voor:

  • Snelheidsbeperking op basis van tokens testen: Simuleren hoe uw toepassing zich gedraagt wanneer taalmodelproviders tokenquota afdwingen
  • Simulatie van ontwikkelingskosten: Inzicht in gebruikspatronen voor tokens tijdens de ontwikkeling voordat u echte API-limieten bereikt
  • Tolerantietests: Controleer of uw toepassing tokenlimietfouten correct verwerkt en de juiste logica voor opnieuw proberen implementeert
  • Lokale LLM-tests: Token beperken van scenario's met lokale taalmodellen (zoals Ollama) die hun eigen limieten niet afdwingen

Voorbeeldscenario's

Scenario 1: Beperking van basistoken

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 300
  }
}

Met deze configuratie kunnen maximaal 1000 prompttokens en 500 voltooiingstokens binnen een venster van 5 minuten worden voltooid.

Scenario 2: Aangepaste foutreacties

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 1000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "custom-token-error.json"
  }
}

Deze configuratie maakt gebruik van een aangepast antwoordbestand om gespecialiseerde foutberichten te bieden wanneer tokenlimieten worden overschreden.

Volgende stap