Freigeben über


LanguageModelRateLimitingPlugin

Simuliert die tokenbasierte Ratelimitierung für Sprachmodell-APIs, indem der Eingabeaufforderungs- und Abschlusstokenverbrauch innerhalb von konfigurierbaren Zeitfenstern nachverfolgt wird.

Screenshot einer Eingabeaufforderung mit dem Dev-Proxy, der eine Sprachmodellrate simuliert, die die Antwort auf eine LLM-API-Anforderung begrenzt.

Definition der Plug-In-Instanz

{
  "name": "LanguageModelRateLimitingPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "languageModelRateLimitingPlugin",
  "urlsToWatch": [
    "https://api.openai.com/*",
    "http://localhost:11434/*"
  ]
}

Configuration example

{
  "languageModelRateLimitingPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 5000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle",
    "headerRetryAfter": "retry-after"
  }
}

Configuration properties

Property Description Default
promptTokenLimit Maximale Anzahl der im Zeitfenster zulässigen Eingabeaufforderungstoken. 5000
completionTokenLimit Maximale Anzahl der innerhalb des Zeitfensters zulässigen Abschlusstoken. 5000
resetTimeWindowSeconds Zeitfenster in Sekunden, nach denen tokenlimits zurückgesetzt werden. 60
whenLimitExceeded Antwortverhalten, wenn Tokengrenzwerte überschritten werden. Kann Throttle oder Custom sein. Throttle
headerRetryAfter Name des HTTP-Headers, der Wiederholungsinformationen enthält. retry-after
customResponseFile Pfad zur Datei, die benutzerdefinierte Antwort enthält, wenn whenLimitExceeded auf Custom. token-limit-response.json

Benutzerdefinierte Antwortkonfiguration

Wenn sie auf <a0/> festgelegt ist, können Sie eine benutzerdefinierte Antwort in einer separaten JSON-Datei definieren:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.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"
    }
  }
}

Benutzerdefinierte Antworteigenschaften

Property Description
statusCode HTTP-Statuscode, der zurückgegeben werden soll, wenn der Tokengrenzwert überschritten wird.
headers Array von HTTP-Headern, die in die Antwort eingeschlossen werden sollen. Wird zum Erneuten Wiederholen verwendet @dynamic , um Sekunden bis zum Zurücksetzen automatisch zu berechnen.
body Antworttextobjekt, das in JSON serialisiert wird.

Funktionsweise

Das LanguageModelRateLimitingPlugin funktioniert von:

  1. Abfangen von OpenAI-API-Anforderungen: Überwacht POST-Anforderungen auf konfigurierte URLs, die OpenAI-kompatible Anforderungstexte enthalten
  2. Nachverfolgen der Tokennutzung: Analysiert Antworten zum Extrahieren prompt_tokens und completion_tokens aus dem Verwendungsabschnitt.
  3. Enforcing limits: Maintains running totals of consumed tokens within the configured time window
  4. Bereitstellen von Einschränkungsantworten: Wenn Grenzwerte überschritten werden, werden entweder Standardeinschränkungsantworten oder benutzerdefinierte Antworten zurückgegeben.

Unterstützte Anforderungstypen

Das Plug-In unterstützt sowohl OpenAI-Abschluss- als auch Chatabschlussanforderungen:

  • Completion requests: Requests with a prompt property
  • Chat-Abschlussanforderungen: Anforderungen mit einer messages Eigenschaft

Token tracking

Die Tokennutzung wird separat nachverfolgt für:

  • Prompt tokens: Input tokens consumed by the request
  • Completion tokens: Output tokens generated by the response

Wenn beide Grenzwerte überschritten werden, werden nachfolgende Anforderungen gedrosselt, bis das Zeitfenster zurückgesetzt wird.

Verhalten des Zeitfensters

  • Tokenbeschränkungen werden nach der konfigurierten Konfiguration zurückgesetzt resetTimeWindowSeconds
  • Der Zeitgeber zum Zurücksetzen beginnt, wenn die erste Anforderung verarbeitet wird.
  • Wenn ein Zeitfenster abläuft, werden sowohl Eingabeaufforderungs- als auch Abschlusstokenzähler auf ihre konfigurierten Grenzwerte zurückgesetzt.

Standardeinschränkungsantwort

Wenn whenLimitExceeded das Plug-In auf Throttle festgelegt ist, wird eine standardmäßige OpenAI-kompatible Fehlerantwort zurückgegeben:

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

Die Antwort umfasst:

  • HTTP-Statuscode: 429 Too Many Requests
  • retry-after Header mit Sekunden, bis Tokenbeschränkungen zurückgesetzt werden
  • CORS-Header, wenn die ursprüngliche Anforderung einen Origin Header enthält

Use cases

Das LanguageModelRateLimitingPlugin ist nützlich für:

  • Testen der tokenbasierten Ratenbegrenzung: Simulieren, wie sich Ihre Anwendung verhält, wenn Sprachmodellanbieter Tokenkontingente erzwingen
  • Simulation von Entwicklungskosten: Grundlegendes zu Tokenverbrauchsmustern während der Entwicklung, bevor echte API-Grenzwerte erreicht werden
  • Resilience testing: Verify that your application properly handles token limit errors and implements appropriate retry logic
  • Lokale LLM-Tests: Testen von Tokenbeschränkungsszenarien mit lokalen Sprachmodellen (z. B. Ollama), die ihre eigenen Grenzwerte nicht erzwingen

Example scenarios

Szenario 1: Grundlegendes Tokenlimiting

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

Diese Konfiguration ermöglicht bis zu 1.000 Eingabeaufforderungstoken und 500 Abschlusstoken innerhalb eines fünfminütigen Fensters.

Szenario 2: Benutzerdefinierte Fehlerantworten

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

Diese Konfiguration verwendet eine benutzerdefinierte Antwortdatei, um spezielle Fehlermeldungen bereitzustellen, wenn Tokengrenzwerte überschritten werden.

Next step