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


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

На первый взгляд
Цель: Проверка лимитов скорости токенов LLM
Время: 10 минут
Подключаемые модули:LanguageModelRateLimitingPlugin
Предварительные требования:настройка прокси-сервера разработки

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

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

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

Файл: devproxyrc.json

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

Подсказка

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

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

Файл: devproxyrc.json (в комплекте с ограничениями маркеров)

{
  "$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": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle"
  }
}

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

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

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

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

Файл: devproxyrc.json (только раздел languageModelRateLimitingPlugin)

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

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

Файл: token-limit-response.json

{
  "$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": "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. Низкие ограничения маркеров для частого тестирования

Файл: devproxyrc.json (только раздел languageModelRateLimitingPlugin)

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

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

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

Файл: devproxyrc.json (только раздел languageModelRateLimitingPlugin)

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

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

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

Файл: devproxyrc.json (только раздел languageModelRateLimitingPlugin)

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

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

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

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