Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имитирует ограничение скорости на основе маркеров для API языковой модели путем отслеживания запроса и потребления маркеров завершения в настраиваемые периоды времени.
Пример конфигурации
{
"$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 работает следующими способами:
- Перехват запросов OpenAI API: отслеживает запросы POST на настроенные URL-адреса, содержащие тела запросов, совместимые с OpenAI
-
Использование маркера отслеживания: анализ ответов на извлечение и извлечение
prompt_tokensиcompletion_tokensиз раздела использования - Принудительное применение ограничений: поддерживает выполнение итогов потребляемых маркеров в течение настроенного периода времени
- Предоставление ответов регулирования: при превышении ограничений возвращает стандартные ответы регулирования или пользовательские ответы.
Поддерживаемые типы запросов
Подключаемый модуль поддерживает как запросы на завершение 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"
}
}
Эта конфигурация использует пользовательский файл ответа для предоставления специализированных сообщений об ошибках при превышении ограничений маркеров.