Freigeben über


Test der Beschränkungen von Sprachmodell-Tokens

Beim Erstellen von Apps, die Sprachmodelle verwenden, sollten Sie testen, wie Ihre App tokenbasierte Ratenbeschränkungen behandelt. Mit Dev Proxy können Sie Tokenbeschränkungen für Sprachmodell-APIs mithilfe des LanguageModelRateLimitingPlugin simulieren.

Simulieren von Tokenbeschränkungen für Sprachmodell-APIs

Aktivieren Sie zunächst das LanguageModelRateLimitingPlugin in Ihrer Konfigurationsdatei.

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

Tipp

Das Plug-In funktioniert mit jeder openAI-kompatiblen API, einschließlich lokaler Sprachmodelle wie Ollama. Schließen Sie alle Sprachmodell-API-Endpunkte ein, die Sie in der urlsToWatch Eigenschaft testen möchten.

Konfigurieren Sie als Nächstes das Plug-In mit Ihren gewünschten Tokenlimits und Zeitfenstern.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.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/v1.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle"
  }
}

Diese Konfiguration ermöglicht bis zu 1.000 Eingabeaufforderungstoken und 500 Abschlusstoken innerhalb eines 60-Sekunden-Fensters. Wenn beide Grenzwerte überschritten werden, werden nachfolgende Anforderungen mit einer Standardmäßigen 429-Antwort gedrosselt.

Starten Sie Dev Proxy mit Ihrer Konfigurationsdatei, und verwenden Sie Ihre App, um Sprachmodellanforderungen zu stellen. Das Plug-In verfolgt den Tokenverbrauch von tatsächlichen API-Antworten und drosselt Anforderungen, wenn Grenzwerte überschritten werden.

Testen mit benutzerdefinierten Fehlerantworten

Sie können auch benutzerdefinierte Antworten konfigurieren, wenn Tokengrenzwerte überschritten werden, indem Sie whenLimitExceeded auf Custom setzen und eine benutzerdefinierte Antwortdatei erstellen.

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 500,
    "completionTokenLimit": 300,
    "resetTimeWindowSeconds": 120,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "token-limit-response.json"
  }
}

Erstellen Sie die benutzerdefinierte Antwortdatei mit dem gewünschten Fehlerformat:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugincustomresponse.schema.json",
  "statusCode": 429,
  "headers": [
    {
      "name": "retry-after",
      "value": "@dynamic"
    },
    {
      "name": "content-type",
      "value": "application/json"
    }
  ],
  "body": {
    "error": {
      "message": "Token quota exceeded. Your application has consumed all available tokens for this time period.",
      "type": "quota_exceeded",
      "code": "TOKENS_EXHAUSTED",
      "details": {
        "quota_type": "tokens",
        "retry_after_seconds": "@dynamic"
      }
    }
  }
}

The @dynamic Der Wert für "retry-after"-Header berechnet automatisch die verbleibenden Sekunden bis zum Zurücksetzen der Grenzwerte für Token.

Testen verschiedener Szenarien

Szenario 1: Niedrige Tokenlimits für häufige Tests

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 100,
    "completionTokenLimit": 50,
    "resetTimeWindowSeconds": 30
  }
}

Verwenden Sie niedrige Grenzwerte mit kurzen Zeitfenstern, um die Drosselungsmechanismen während der Entwicklung und Tests schnell auszulösen.

Szenario 2: Produktionsähnliche Grenzwerte

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 10000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 3600
  }
}

Um realistische Tokenverbrauchsmuster zu testen, konfigurieren Sie Grenzwerte, die Ihrer Produktionsumgebung ähneln.

Szenario 3: Asymmetrische Grenzwerte

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 100,
    "resetTimeWindowSeconds": 300
  }
}

Testszenarien, in denen Abschlusstokengrenzwerte niedriger sind als Eingabeaufforderungsgrenzwerte, die kostenbewusste API-Pläne simulieren.

Nächster Schritt

Weitere Informationen finden Sie unter LanguageModelRateLimitingPlugin.