Проверка того, как приложение обрабатывает ограничения частоты запросов OpenAI

На первый взгляд
Цель: Проверьте, как приложение обрабатывает ограничения скорости OpenAI и ошибки перегрузки
Время: 10 минут
Подключаемые модули:GenericRandomErrorPlugin, RetryAfterPlugin
Предварительные требования:настройка прокси-сервера разработки

Ваше приложение работает в разработке, а затем завершается сбоем в рабочей среде из-за 429 Too Many Requests. Лимиты запросов OpenAI зависят от уровня использования вашей организации, вашей модели и всех остальных пользователей, использующих одну и ту же организацию, поэтому вы не можете намеренно стабильно достигать этих лимитов. Прокси-сервер разработки возвращает те же ошибки, что и API OpenAI, поэтому вы можете увидеть, что делает ваше приложение, до того, как это увидят ваши пользователи.

Узнайте, что возвращает OpenAI

Не каждая ошибка OpenAI означает "повторить попытку". Ваше приложение должно различать их друг от друга.

Status error.code Что это означает Что должно сделать ваше приложение
429 rate_limit_exceeded Вы достигли лимита запросов в минуту (RPM) или токенов в минуту (TPM). Дождитесь времени, указанного в заголовке Retry-After, а затем повторите попытку.
429 slow_down Частота ваших запросов увеличилась слишком быстро, даже если вы находитесь в пределах ваших ограничений. Подождите Retry-After, уменьшите частоту запросов и постепенно увеличивайте её.
429 credit_balance_exhausted У вашей организации нет предоплаченных кредитов. Не пытайтесь снова. Повторная попытка не восстановит доступ. Сообщите пользователю или сообщите администратору.
503 server_is_overloaded Сейчас модель не имеет достаточной мощности. Подождите Retry-After, если он присутствует, затем повторите попытку с увеличивающимися задержками.

Полный список см. в разделе "Коды ошибок " в документации по OpenAI.

Important

Все 3 ошибки во всех 429 строках используют один и тот же код состояния. Если приложение повторяет запрос при каждом ответе 429, оно продолжает повторять ошибки биллинга, которые нельзя устранить повторными попытками. Проверьте error.code, чтобы решить, что делать.

Сведения о том, что делает пакет SDK OpenAI для вас

Официальные SDK OpenAI для Python и JavaScript по умолчанию 2 раза повторяют запросы при получении ответов с кодами 408, 409, 429 и 5xx, а также при ошибках подключения, с экспоненциальной задержкой. Это можно изменить с помощью max_retries параметра в Python и maxRetries в JavaScript.

Повторные попытки SDK справляются с кратковременными всплесками. Ваше приложение по-прежнему должно решить, что происходит, когда попытки повтора исчерпаются, и как обрабатывать ошибки, которые повторные попытки не исправляют. В Python при 429 возникает RateLimitError, а при 503 возникает InternalServerError, поэтому обработайте оба случая.

Tip

Чтобы узнать, что получает код обработки ошибок, задайте max_retries=0 (Python) или maxRetries: 0 (JavaScript) во время тестирования. После этого снова включите повторные попытки SDK.

Имитация лимитов запросов OpenAI

Прокси-сервер разработки имеет предустановку с ошибками OpenAI в таблице. Скачать:

devproxy config get openai-throttling

Запустите прокси-сервер разработки с предустановленным набором:

devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"

Предустановка завершается ошибкой 90% запросов к https://api.openai.com/* случайной ошибке из таблицы. Для ответов с ограничением частоты он задает заголовок Retry-After и использует RetryAfterPlugin, чтобы убедиться, что приложение ждет столько времени, прежде чем снова вызвать API.

Убедитесь, что приложение отправляет свои запросы через Dev Proxy и доверяет сертификату Dev Proxy. Сведения о Node.jsсм. в разделе "Использование прокси-сервера разработки" с приложениями Node.js. Сведения о других средах выполнения см. в разделе Устранение неполадок с прокси-сервером разработки.

Запустите приложение и убедитесь, что:

  • По истечении rate_limit_exceeded или slow_down ошибки приложение ожидает Retry-After времени. Если он вызывает API слишком рано, dev Proxy сообщает об этом и регулирует запрос.
  • credit_balance_exhausted После ошибки приложение перестает вызывать API и отображает четкое сообщение.
  • server_is_overloaded После ошибки приложение повторяет попытку с задержкой и при выполнении повторных попыток возвращается или отображает четкое сообщение вместо трассировки стека.
  • Ваше приложение не теряет работу. Например, длительная беседа в чате или пакетное задание продолжается после ошибки.

Чтобы изменить, как часто запросы завершаются сбоем, используйте параметр --failure-rate. Например, чтобы каждый запрос завершался с ошибкой:

devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json" --failure-rate 100

Имитация ограничений маркера для Azure OpenAI и других поставщиков

Предустановка возвращает ошибки случайным образом независимо от количества токенов, которые использует ваше приложение. Чтобы ограничить запросы на основе фактического использования токенов, например, чтобы увидеть, что происходит, когда длительный диалог превышает ваш лимит TPM, используйте LanguageModelRateLimitingPlugin. Он работает с любым API, совместимым с OpenAI, включая Azure OpenAI и локальные модели. Дополнительные сведения см. в разделе Ограничения на количество токенов в тестовой языковой модели.

Следующий шаг

Узнайте, как имитировать ограничения на основе токенов.

См. также