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.

Konfigurationsbeispiel

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

Konfigurationseigenschaften

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/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"
    }
  }
}

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. Erzwingen von Grenzwerten: Verwaltet die Gesamtanzahl der verbrauchten Token innerhalb des konfigurierten Zeitfensters.
  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:

  • Abschlussanforderungen: Anforderungen mit einer prompt Eigenschaft
  • Chat-Abschlussanforderungen: Anforderungen mit einer messages Eigenschaft

Tokenverfolgung

Die Tokennutzung wird separat nachverfolgt für:

  • Eingabeaufforderungstoken: Von der Anforderung verbrauchte Eingabetoken
  • Abschlusstoken: Ausgabetoken, die von der Antwort generiert wurden

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

Anwendungsfälle

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
  • Resilienztests: Überprüfen Sie, ob Ihre Anwendung Tokengrenzfehler ordnungsgemäß verarbeitet und geeignete Wiederholungslogik implementiert.
  • Lokale LLM-Tests: Testen von Tokenbeschränkungsszenarien mit lokalen Sprachmodellen (z. B. Ollama), die ihre eigenen Grenzwerte nicht erzwingen

Beispielszenarien

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.

Nächster Schritt