Partager via


Limites des jetons de modèle de langage de test

Lors de la création d’applications qui utilisent des modèles linguistiques, vous devez tester la façon dont votre application gère la limitation du débit basé sur les jetons. Le Dev Proxy vous permet de simuler des limites de jetons sur les API de modèle de langage en utilisant le plugin LanguageModelRateLimitingPlugin.

Simuler des limites de jetons sur les API du modèle de langage

Pour commencer, activez le LanguageModelRateLimitingPlugin dans votre fichier de configuration.

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

Conseil / Astuce

Le plug-in fonctionne avec n’importe quelle API compatible OpenAI, y compris les modèles de langage local comme Ollama. Incluez tous les points de terminaison de l’API de modèle de langage que vous souhaitez tester dans la urlsToWatch propriété.

Ensuite, configurez le plug-in avec vos limites de jeton et fenêtre de temps souhaitées.

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

Cette configuration permet jusqu’à 1 000 jetons d’invite et 500 jetons d’achèvement dans une fenêtre de 60 secondes. Lorsque l’une ou l’autre limite est dépassée, les requêtes suivantes sont limitées avec une réponse standard 429.

Démarrez le proxy de développement avec votre fichier de configuration et utilisez votre application pour effectuer des requêtes de modèle de langage. Le plug-in effectue le suivi de la consommation de jetons à partir des réponses d’API réelles et limite les demandes lorsque les limites sont dépassées.

Tester avec des réponses d’erreur personnalisées

Vous pouvez également configurer des réponses personnalisées lorsque les limites de jetons sont dépassées en définissant whenLimitExceededCustom et en créant un fichier de réponse personnalisé.

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

Créez le fichier de réponse personnalisé avec le format d’erreur souhaité :

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

La valeur @dynamic des en-têtes de nouvelle tentative calcule automatiquement les secondes restantes jusqu’à la réinitialisation des limites de jetons.

Tester différents scénarios

Scénario 1 : Limites de jeton faible pour les tests fréquents

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

Utilisez des limites basses avec des intervalles de temps courts pour déclencher rapidement la limitation pendant le développement et les tests.

Scénario 2 : Limites semblables à la production

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

Pour tester des modèles de consommation de jeton réalistes, configurez des limites similaires à votre environnement de production.

Scénario 3 : Limites asymétriques

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

Scénarios de test où les limites de jetons de fin sont inférieures aux limites de jetons de prompt afin de simuler des plans API tenant compte des coûts.

Étape suivante

Découvrez plus en détail l’LanguageModelRateLimitingPlugin.