Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
API OpenAI возвращает 429 с типом ошибки insufficient_quota, когда на вашей учетной записи закончились кредиты или вы превысили лимит расходов или использования. Это тот же код состояния, что и лимит запросов, но ожидание нескольких секунд не исправит ситуацию. Доступ возвращается только после того, как кто-то добавляет кредиты, поднимает ограничение или ежемесячный период сбрасывается. OpenAI говорит, что повторные попытки после ошибок, связанных с биллингом, расходами или квотой, не восстановят доступ к API, и что необходимо проверить error.code, чтобы найти конкретную причину. Дополнительные сведения см. в разделе Коды ошибок.
Как выглядят ошибки, связанные с квотой OpenAI
Каждая из этих ошибок возвращает 429.
error.type все еще может быть insufficient_quota, поэтому проверьте error.code, чтобы узнать, какой вариант вам достался.
error.code |
Что это означает | Как возвращается доступ |
|---|---|---|
credit_balance_exhausted |
У вашей организации не осталось предоплаченных кредитов. | Добавьте кредиты. |
organization_spend_limit_exceeded |
Ваша организация достигла ежемесячного лимита расходов по всем проектам. | Поднимите или удалите ограничение или дождитесь ежемесячного сброса. |
project_spend_limit_exceeded |
Проект достиг своего ежемесячного лимита расходов. Другие проекты продолжают работать. | Поднимите или снимите ограничение проекта, или дождитесь ежемесячного сброса. |
organization_usage_limit_exceeded |
Ваша организация достигла ежемесячного ограничения использования, назначенного OpenAI. Это отдельно от установленных ограничений расходов. | Запросите более высокий утвержденный предел или обратитесь в службу поддержки OpenAI. |
Сравните их с ошибками "Достигнут лимит запросов", например rate_limit_exceeded и slow_down. Это временное явление, и повторная попытка после короткого ожидания обычно работает. Дополнительные сведения см. в разделе об ошибках OpenAI «Превышен лимит запросов».
Обработка ошибок квоты OpenAI
- Читайте
error.code, а не только состояние. Сам по себе429не говорит вам, следует ли повторить попытку. Обработайте 4 кода в таблице как "стоп", а коды ограничения частоты запросов — "ожидание и повтор". - Прекратите повторные попытки. Не отправляйте запрос еще раз и не позволяйте циклу повторных попыток продолжать вызывать API. Пока кто-то не исправит проблему с выставлением счетов, каждый запрос одинаково завершается с ошибкой.
- Приостанавливать вызовы, которые могут завершиться ошибкой. Одна ошибка квоты означает, что следующие запросы из той же организации или проекта тоже завершаются ошибкой. Пропустите их вместо отправки каждой из них, ожидая ошибки.
- Сообщите пользователю. Объясните, что функция ИИ недоступна на данный момент, и обеспечьте работу остальной части приложения.
- Настройте уведомления для себя. Зарегистрируйте код с высоким уровнем критичности или свяжитесь по пейджеру с тем, кто отвечает за биллинг. Исправление находится за пределами кода, поэтому кто-то ответственный должен быть в курсе.
По умолчанию OpenAI Python SDK повторно выполняет запросы при ответах 429 2 раза. Сколько бы ни выполнялись повторные попытки, ваш код в конечном итоге получает RateLimitError с кодом биллинга, и на этом вы останавливаетесь:
import logging
import openai
from openai import OpenAI
client = OpenAI()
logger = logging.getLogger(__name__)
BILLING_CODES = {
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
}
billing_error: str | None = None
def ask(prompt: str) -> str:
global billing_error
if billing_error:
raise RuntimeError("AI features are paused until billing is fixed.")
try:
response = client.responses.create(model="gpt-4.1", input=prompt)
return response.output_text
except openai.RateLimitError as error:
if error.code in BILLING_CODES:
billing_error = error.code
logger.critical("OpenAI billing error: %s", error.code)
raise
Флаг остается заданным до перезапуска приложения. Очистите это другим способом, если приложение работает в течение длительного времени, например, с помощью действия администратора после того, как кто-то исправит биллинг.
Как проверить, что приложение обрабатывает ошибки квоты OpenAI
При разработке редко возникает ошибка квоты. У вашей тестовой учетной записи есть кредиты, и уровень использования низкий. То, как вы тестируете обработку квот, определяет, найдёте ли вы ошибки раньше своих пользователей.
| Approach | Что вы найдете | Чего вам не хватает |
|---|---|---|
| Ожидание продакшена | Реальные сбои | Всё, пока пользователь не столкнётся с этим, и функция искусственного интеллекта остаётся недоступной до тех пор, пока кто-то не заметит |
| Мокируйте API в тестах или позвольте агенту кодирования написать мок | Выполняется ли ветвь остановки | Реальный текст и коды ошибок OpenAI, а также политика повторных попыток пакета SDK. Приложению также требуется переключатель только для тестирования, чтобы получить доступ к моку. |
| Используйте ваши реальные кредиты или установите крошечный лимит расходов | Реальное поведение | Это требует затрат и блокирует любое другое приложение, которое использует ту же организацию или проект |
| Перехватывайте реальный трафик приложения и возвращайте ошибки квоты по запросу | Реальные URL-адреса, ваш реальный SDK, политика повторных попыток и собственный формат ошибок OpenAI | Ничего в приложении не изменяется, поэтому код не тестируется изолированно. Оставьте модульные тесты для этого. |
Попробуйте в вашем приложении
Прокси-сервер разработки перехватывает запросы приложения к api.openai.com и возвращает ошибки OpenAI, а приложение продолжает вызывать реальные URL-адреса. Предустановка openai-throttling смешивает ошибку credit_balance_exhausted с ошибками ограничения скорости. Он возвращает 429 с типом insufficient_quota и без заголовка Retry-After, поэтому вы можете проверить, останавливается ли приложение вместо повторной попытки.
Скачайте пресет и запустите Dev Proxy с ним:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
Чтобы проверить только ошибки квоты, измените файл предустановки openai-errors.json и оставьте только ответ credit_balance_exhausted. Чтобы проверить коды ограничения расходов и использования, добавьте ответы с той же структурой и другим code.
Затем запустите приложение как обычно и посмотрите, что оно делает. Чтобы установить Dev Proxy, см. статью «Настройка Dev Proxy».