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


LanguageModelRateLimitingPlugin

Имитирует ограничение скорости на основе маркеров для API языковой модели путем отслеживания запроса и потребления маркеров завершения в настраиваемые периоды времени.

Снимок экрана: командная строка с прокси-сервером разработки, имитирующей скорость передачи ответа на запрос API LLM.

Пример конфигурации

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

Свойства конфигурации

Property Description Default
promptTokenLimit Максимальное количество маркеров запроса, разрешенных в течение периода времени. 5000
completionTokenLimit Максимальное количество маркеров завершения, разрешенных в течение периода времени. 5000
resetTimeWindowSeconds Время в секундах после сброса ограничений маркера. 60
whenLimitExceeded Поведение ответа при превышении ограничений маркеров. Может иметь значение Throttle или Custom. Throttle
headerRetryAfter Имя заголовка HTTP для включения сведений о повторных попытках. retry-after
customResponseFile Путь к файлу, содержаму настраиваемый ответ, если whenLimitExceeded задано значение Custom. token-limit-response.json

Настраиваемая конфигурация ответа

Если whenLimitExceeded задано значение Custom, можно определить пользовательский ответ в отдельном 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": "You have exceeded your token quota. Please wait before making additional requests.",
      "type": "insufficient_quota",
      "code": "token_quota_exceeded"
    }
  }
}

Свойства настраиваемого ответа

Property Description
statusCode Код состояния HTTP, возвращаемый при превышении предела маркера.
headers Массив заголовков HTTP для включения в ответ. Используется @dynamic для повтора после автоматического вычисления секунд до сброса.
body Объект текста ответа, сериализованный в JSON.

Принцип работы

ЯзыкModelRateLimitingPlugin работает следующими способами:

  1. Перехват запросов OpenAI API: отслеживает запросы POST на настроенные URL-адреса, содержащие тела запросов, совместимые с OpenAI
  2. Использование маркера отслеживания: анализ ответов на извлечение и извлечение prompt_tokens и completion_tokens из раздела использования
  3. Принудительное применение ограничений: поддерживает выполнение итогов потребляемых маркеров в течение настроенного периода времени
  4. Предоставление ответов регулирования: при превышении ограничений возвращает стандартные ответы регулирования или пользовательские ответы.

Поддерживаемые типы запросов

Подключаемый модуль поддерживает как запросы на завершение OpenAI, так и запросы на завершение чата:

  • Запросы на завершение: запросы со свойством prompt
  • Запросы на завершение чата: запросы со свойством messages

Отслеживание маркеров

Потребление маркеров отслеживается отдельно для:

  • Маркеры запроса: входные маркеры, используемые запросом
  • Маркеры завершения: выходные маркеры, созданные ответом

При превышении любого ограничения последующие запросы регулируются до сброса периода времени.

Поведение периода времени

  • Сброс ограничений маркера после настройки resetTimeWindowSeconds
  • Таймер сброса начинается при обработке первого запроса
  • Когда истекает срок действия периода времени, счетчики маркеров запроса и завершения сбрасываются до заданных ограничений.

Ответ регулирования по умолчанию

Если whenLimitExceeded задано значение Throttle, подключаемый модуль возвращает стандартный ответ на ошибку, совместимую с OpenAI:

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

Ответ включает:

  • Код состояния HTTP: 429 Too Many Requests
  • retry-after заголовок с секундами до сброса ограничений маркера
  • Заголовки CORS, если исходный Origin запрос содержит заголовок

Случаи использования

Язык LanguageModelRateLimitingPlugin полезен для:

  • Тестирование ограничения скорости на основе маркеров. Имитируйте поведение приложения, когда поставщики языковых моделей применяют квоты маркеров.
  • Моделирование затрат на разработку. Общие сведения о шаблонах потребления маркеров во время разработки перед выполнением реальных ограничений API
  • Тестирование устойчивости. Убедитесь, что приложение правильно обрабатывает ошибки ограничения маркеров и реализует соответствующую логику повторных попыток.
  • Локальное тестирование LLM: сценарии ограничения маркеров с локальными языковыми моделями (например, Ollama), которые не применяют собственные ограничения

Пример сценариев

Сценарий 1. Ограничение базовых маркеров

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 300
  }
}

Эта конфигурация позволяет выполнять до 1000 маркеров запроса и 500 маркеров завершения в течение 5 минут.

Сценарий 2. Настраиваемые ответы на ошибки

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 1000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "custom-token-error.json"
  }
}

Эта конфигурация использует пользовательский файл ответа для предоставления специализированных сообщений об ошибках при превышении ограничений маркеров.

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