Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
API-интерфейсы языковой модели ограничивают трафик одновременно 2 способами: сколько запросов отправляется в минуту (RPM) и сколько токенов используется в минуту (TPM). Вы можете оставаться значительно ниже лимита запросов и всё равно столкнуться с троттлингом, так как несколько длинных промптов израсходовали ваш бюджет токенов. Когда вы достигнете любого ограничения, API отвечает сообщением 429 Too Many Requests, и приложение должно ждать.
Как OpenAI, Azure OpenAI и Anthropic подсчитывают
| Provider | Что ограничено | Что нужно знать |
|---|---|---|
| OpenAI | RPM, запросы в день, TPM, токены в день и многое другое, для каждой организации и проекта, для каждой модели | Вы достигнете того лимита, который закончится первым. Для лимита токенов запрос считается по большему из двух значений: max_tokens или оценки на основе его символов. Число неудачных запросов тоже. |
| Azure OpenAI | TPM, назначенный каждому развертыванию, а также ограничение RPM, заданное в пропорции к нему | RPM проверяется в окнах длительностью 1 или 10 секунд, поэтому всплеск получает 429, даже если общий показатель за минуту в норме. Оценка токена включает в себя max_tokens. |
| Anthropic | RPM, входные токены в минуту (ITPM) и выходные токены в минуту (OTPM) для каждой модели | Лимит постоянно пополняется, а 60 RPM может применяться как 1 запрос в секунду. Для большинства моделей кэшированные токены входных данных не учитываются в ITPM, и max_tokens не учитывается в OTPM. |
Если установить max_tokens на 4 000 и получаете 200 токенов обратно, OpenAI и Azure OpenAI по-прежнему подсчитывают 4 000 по отношению к вашему ограничению. Вот как можно получить 429s, при том что метрики использования кажутся значительно ниже вашего лимита.
Что означает 429 для каждого поставщика
Не каждая ошибка 429 исчезает, если подождать.
| Provider | Подождите и повторите попытку | Остановитесь и сообщите кому-нибудь |
|---|---|---|
| OpenAI | 429 для запросов или токенов, 429 slow_down (ваш трафик вырос слишком быстро, даже в пределах ограничений), и 503 server_is_overloaded. Подождите Retry-After, пока он не появится. |
429 с credit_balance_exhausted, organization_spend_limit_exceededproject_spend_limit_exceededили organization_usage_limit_exceeded в error.code. Повторная попытка не восстановит доступ. |
| Azure OpenAI | 429 для TPM или RPM развертывания, из-за ограничений пропускной способности системы или для временного уменьшения лимита запросов. Подождите retry-after-ms. |
Постоянные ошибки 429 в производственной среде, хотя вы не превышаете одобренную квоту. Проверьте выделение TPM для развертывания, а затем откройте обращение в службу поддержки. |
| Anthropic | 429 rate_limit_error с заголовком retry-after, включая ограничения скорости после резкого роста использования, и 529 overloaded_error. |
429 за ежемесячный лимит расходов. Он не retry-after имеет заголовка, enforced_spend_limit_reached — error.details.error_code, и он продолжает завершаться ошибкой до возобновления доступа. |
Как работать с лимитами запросов LLM
- Проверьте, какой 429 вы получили. Ошибки выставления счетов, расходов и квот требуют вмешательства человека, а не повторных попыток.
- Подождите столько, сколько требует API. OpenAI и Anthropic отправляют
retry-afterза секунды. Azure OpenAI отправляетretry-after-msза миллисекунды. При отсутствии указаний используйте экспоненциальное увеличение интервала со случайным джиттером и ограничьте и число попыток, и общее время. - Узнайте, что уже делает ваш пакет SDK. Python SDK OpenAI и Anthropic по умолчанию повторяют попытку 2 раза при ошибках подключения и ответах
429,408,409и 5xx. Если вы добавите собственный цикл повторных попыток, отключите повторные попытки пакета SDK, например вmax_retries=0Python, как рекомендует Azure OpenAI, иначе число попыток увеличится. - Сократите самое важное. В OpenAI и Azure OpenAI установите значение
max_tokensблизко к ожидаемому размеру ответа. В Anthropic кэшируйте повторяющееся содержимое, например системные инструкции. - Постепенно увеличивайте. Резкий скачок трафика приводит к срабатыванию лимитов частоты запросов OpenAI
slow_downи Anthropic даже в пределах ваших ограничений. OpenAI предполагает, что после достижения 1 миллиона входных токенов в минуту вы растете не более чем на 50% каждые 15 минут. - Не воспроизводите поток, который вы уже обработали. Ошибка после запуска потока может поступать в качестве события потока, и OpenAI не советует автоматически повторять запрос после использования выходных данных.
- Сообщите пользователю, когда запрос застопорится на 429, вместо показа спиннера.
Как проверить, что ваше приложение обрабатывает ограничения скорости LLM
| Approach | Что вы найдете | То, что вы пропустили |
|---|---|---|
| Замокайте клиент SDK в тестах или позвольте агенту для написания кода написать мок | Выполняется ли ветка обработки ошибок | Реальные коды состояния, коды ошибок и заголовки поставщика, а также собственные повторные запросы SDK. Приложению также требуется переключатель только для тестирования, чтобы получить доступ к mock-серверу. |
| Вызывайте реальный API до тех пор, пока он не начнет ограничивать ваши запросы | Реальное поведение | Вы платите за каждый токен, и вы не можете по своему усмотрению активировать slow_down, перегрузку или ограничение расходов |
| Перехватывайте реальный трафик приложения и возвращайте ошибки поставщика или ограничивайте по токенам, которые использует приложение. | Реальные URL-адреса, политика повторных попыток пакета SDK и тела ошибок поставщика с выбранным вами ограничением | Ваш код в изоляции. Оставьте для этого модульные тесты. |
Попробуйте в вашем приложении
Dev Proxy перехватывает запросы приложения к API языковой модели и возвращает собственные ошибки поставщика, а ваше приложение продолжает вызывать реальный URL-адрес. Для OpenAI скачайте preset и запустите прокси-сервер разработки с ним:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Предустановка https://api.openai.com/* приводит к сбою 90% запросов к rate_limit_exceeded со случайной ошибкой: slow_down для TPM или RPM, credit_balance_exhausted, server_is_overloaded или 503 openai-throttling. Предустановка anthropic-throttling выполняет то же самое для https://api.anthropic.com/* с RPM, входным токеном, выходным токеном, а также ошибками ускорения 429s и 529 overloaded_error. Обе предустановки включают RetryAfterPlugin, который сообщает, что приложение повторно вызывает API до истечения времени ожидания для ответа 429 retry-after. Он не проверяет ответы 503 и 529.
Для регулирования токенов, фактически используемых приложением, используйте LanguageModelRateLimitingPlugin. Он подсчитывает токены запроса и завершения, о которых сообщает каждый ответ, и возвращает 429 с retry-after, когда приложение превышает установленные вами лимиты. Он работает с API, совместимыми с OpenAI, включая Azure OpenAI и локальные модели:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"https://*.openai.azure.com/openai/deployments/*/chat/completions*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 60
}
}
Плагин не воспроизводит max_tokens оценку. Тело ответа 429 по умолчанию использует код insufficient_quota. Чтобы вернуть текст ошибки, который приложение ожидает при ограничении скорости, задайте whenLimitExceeded значение Custom и укажите в customResponseFile собственный ответ. Чтобы установить Dev Proxy, см. Настройка Dev Proxy.