Ошибки OpenAI «Достигнут лимит запросов»: что они означают и как их обрабатывать

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

  1. Сначала проверьте error.code . Если это код выставления счетов вроде credit_balance_exhausted, остановите повторные попытки и сообщите пользователю. Повторная попытка после ошибки при выставлении счетов не восстановит доступ.
  2. Следуйте Retry-After, когда он присутствует. Если он отсутствует, используйте экспоненциальный откат с jitter и ограничьте количество повторных попыток.
  3. Замедлитесь после slow_down. Уменьшите частоту запросов, а затем постепенно наращивайте её. Практическое правило OpenAI при значении входного TPM выше 1 млн заключается в увеличении трафика не более чем на 50% каждые 15 минут.
  4. Отправьте меньше токенов после ошибки TPM. Более короткие запросы и ответы позволяют больше запросов помещаться в каждую минуту.
  5. Отойдите дальше после 503. Увеличьте задержку между повторными попытками и проверьте страницу состояния OpenAI.
  6. Расскажите пользователю, что происходит. «Занят, повтор через 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".

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

Дальнейшие действия

См. также