Поделиться через


Ограничения маркера модели тестового языка

При создании приложений, использующих языковые модели, необходимо проверить, как приложение обрабатывает ограничение скорости на основе маркеров. Dev Proxy позволяет имитировать ограничение токенов для API языковой модели с помощью LanguageModelRateLimitingPlugin.

Симуляция ограничений токенов для API языковых моделей

Чтобы начать, включите LanguageModelRateLimitingPlugin в вашем файле конфигурации.

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

Подсказка

Подключаемый модуль работает с любым API, совместимым с OpenAI, включая локальные языковые модели, такие как Ollama. Включите все конечные точки API языковой модели, которые необходимо протестировать в свойстве urlsToWatch .

Затем настройте подключаемый модуль с желаемыми ограничениями токенов и временным окном.

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

Эта конфигурация позволяет использовать до 1000 токенов запроса и 500 токенов завершения в 60-секундном окне. При превышении любого ограничения последующие запросы ограничиваются стандартным HTTP-ответом 429.

Запустите прокси-сервер разработки с файлом конфигурации и используйте приложение для выполнения запросов языковой модели. Подключаемый модуль отслеживает использование токенов из API в фактических ответах и ограничивает запросы при превышении лимитов.

Тестирование с использованием кастомных ответов об ошибках

Вы также можете настроить индивидуальные ответы в случае превышения ограничений маркеров, установив whenLimitExceeded в Custom и создав файл с пользовательским ответом.

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

Создайте пользовательский файл ответа с нужным форматом ошибки:

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

Значение @dynamic для заголовков 'повторить через' автоматически рассчитывает количество секунд, оставшихся до сброса лимитов токена.

Тестирование различных сценариев

Сценарий 1. Низкие ограничения маркеров для частого тестирования

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

Используйте низкие ограничения с короткими временными интервалами, чтобы быстро активировать ограничение скорости во время разработки и тестирования.

Сценарий 2: Ограничения, подобные производственной среде

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

Чтобы протестировать реалистичные шаблоны потребления токенов, настройте ограничения, аналогичные вашей производственной среде.

Сценарий 3. Асимметричные ограничения

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

Тестовые сценарии с лимитами токена завершения, которые ниже лимитов запроса, имитируя API-планы, ориентированные на стоимость.

Следующий шаг

Узнать больше о LanguageModelRateLimitingPlugin.