Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
API OpenAI возвращает 429 со значением "Достигнут лимит запросов", когда ваша организация отправила больше запросов или больше токенов в минуту, чем разрешено. Ограничения применяются к вашей организации, а не к каждому пользователю. Эти ошибки являются временными. Если немного подождать и отправить запрос еще раз, он обычно завершается успешно. Некоторые другие 429 ошибки из OpenAI относятся к выставлению счетов, и они не исчезают, если подождать. Дополнительные сведения см. в разделе "Коды ошибок".
Как выглядят ошибки превышения лимита запросов OpenAI
| Status | Error | Что это означает | Повторите попытку? |
|---|---|---|---|
429 |
rate_limit_exceeded, запросы в минуту (RPM) |
Вы отправили слишком много запросов в минуту. | Да, после Retry-After |
429 |
rate_limit_exceeded, токены в минуту (TPM) |
Ваши запросы использовали слишком много токенов в минуту. В сообщении отображаются ваш лимит, сколько токенов вы использовали и сколько токенов запросил запрос. | Да, после Retry-After. Небольшие запросы помогают. |
429 |
slow_down (тип rate_limit_error) |
Ваш трафик вырос слишком быстро, несмотря на то, что вы находитесь в пределах лимитов RPM и TPM. | Да, по более низкой ставке |
503 |
server_is_overloaded (тип service_unavailable_error) |
Серверы OpenAI заняты. | Да, с более длительными задержками каждый раз |
429 |
credit_balance_exhausted, лимит расходов или ошибки ограничения использования (тип insufficient_quota) |
У вас закончились средства или превышен лимит. | No. См. insufficient_quota OpenAI и credit_balance_exhausted. |
Большинство этих ошибок имеют одинаковый статус 429, поэтому их нельзя различить только по статусу. Прочтите error.code в тексте ответа.
Обработка ошибок ограничения частоты запросов OpenAI
- Сначала проверьте
error.code. Если это код выставления счетов вродеcredit_balance_exhausted, остановите повторные попытки и сообщите пользователю. Повторная попытка после ошибки при выставлении счетов не восстановит доступ. - Следуйте
Retry-After, когда он присутствует. Если он отсутствует, используйте экспоненциальный откат с jitter и ограничьте количество повторных попыток. - Замедлитесь после
slow_down. Уменьшите частоту запросов, а затем постепенно наращивайте её. Практическое правило OpenAI при значении входного TPM выше 1 млн заключается в увеличении трафика не более чем на 50% каждые 15 минут. - Отправьте меньше токенов после ошибки TPM. Более короткие запросы и ответы позволяют больше запросов помещаться в каждую минуту.
- Отойдите дальше после
503. Увеличьте задержку между повторными попытками и проверьте страницу состояния OpenAI. - Расскажите пользователю, что происходит. «Занят, повтор через 5 секунд» лучше, чем спиннер, который никогда не заканчивается.
SDK OpenAI Python по умолчанию повторяет попытку 2 раза при ошибках подключения и ответах 408, 409, 429 и 5xx, с короткой экспоненциальной задержкой. Вы можете изменить это с помощью max_retries. Когда повторные попытки исчерпаны, SDK вызывает RateLimitError для 429 и InternalServerError для 503, поэтому вашему коду всё равно нужен план:
import openai
from openai import OpenAI
client = OpenAI(max_retries=3)
BILLING_CODES = {
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
}
def summarize(text: str) -> str | None:
try:
response = client.responses.create(model="gpt-4.1", input=text)
return response.output_text
except openai.RateLimitError as error:
if error.code in BILLING_CODES:
raise # Retrying won't help: alert and tell the user
return None # Still throttled after retries: show "busy, try again"
except openai.InternalServerError:
return None
Как проверить, что ваше приложение обрабатывает ограничения частоты OpenAI
Вы редко достигаете лимита запросов OpenAI во время разработки. Вы единственный пользователь, и ваши запросы коротки. Таким образом, способ тестирования обработки ограничения частоты запросов решает, найдете ли вы ошибки раньше, чем их обнаружат пользователи.
| Approach | Что вы найдете | То, что вы пропустили |
|---|---|---|
| Ожидание production | Реальные сбои | Всё, пока пользователь не нажмёт |
| Мокируйте API в тестах или позвольте ИИ-агенту для программирования написать мок | Выполняется ли ветвь повторных попыток | Реальные тела и коды ошибок OpenAI, а также политика повторных попыток пакета SDK. Приложению также требуется переключатель только для тестирования, чтобы получить доступ к mock-сервису. |
| Вызывайте реальный API до тех пор, пока он не начнет ограничивать ваши запросы | Реальное поведение | Вы не можете активировать определенную ошибку по запросу, и каждый запрос расходует токены |
| Перехватывайте реальный трафик приложения и возвращайте ошибки OpenAI по запросу | Реальные URL-адреса, ваш реальный SDK, политика повторных попыток и собственный формат ошибок OpenAI | Ничего в приложении не изменяется, поэтому ваш код не тестируется изолированно. Оставьте модульные тесты для этого. |
Попробуйте его в вашем приложении
Прокси-сервер разработки перехватывает запросы приложения к api.openai.com и возвращает ошибки OpenAI, а приложение продолжает вызывать реальные URL-адреса. Предустановка openai-throttling приводит к сбою большинства запросов со случайным выбором ошибок TPM и RPM rate_limit_exceeded, slow_down, credit_balance_exhausted и 503server_is_overloaded в собственном формате OpenAI. Ответы 429 с ограничением скорости включают Retry-After заголовок, и если ваше приложение повторяет попытку до истечения этого времени, Dev Proxy сообщает об этом.
Скачайте пресет и запустите Dev Proxy с ним:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Затем запустите приложение как обычно и посмотрите, что оно делает. Чтобы установить Dev Proxy, см. статью "Настройка Dev Proxy".
Чтобы проверить поведение приложения, когда приложение исчерпывает лимит токенов в минуту на основе токенов запроса и токенов завершения, ознакомьтесь с Тестирование ограничений токенов языковой модели.