OpenAI '요청 한도 초과' 오류: 의미 및 처리 방법

OpenAI API는 조직에서 분당 한도가 허용하는 것보다 더 많은 요청 또는 토큰을 보내면 "Rate limit reached"와 함께 429를 반환합니다. 제한은 각 사용자가 아닌 조직에 적용됩니다. 이러한 오류는 일시적입니다. 대기하고 요청을 다시 보내면 일반적으로 성공합니다. OpenAI의 다른 429 오류는 청구에 관한 것이며 기다릴 때 사라지지 않습니다. 자세한 내용은 오류 코드를 참조하세요.

OpenAI의 요청 한도 오류가 어떻게 표시되는지

상태 Error 의미 다시 시도하시겠습니까?
429 rate_limit_exceeded, 분당 요청(RPM) 1분 만에 너무 많은 요청을 보냈습니다. 예, Retry-After 후에
429 rate_limit_exceeded, 분당 토큰(TPM) 귀하의 요청으로 1분 동안 너무 많은 토큰이 사용되었습니다. 메시지에는 한도, 사용한 토큰 수 및 요청에서 요구한 토큰 수가 표시됩니다. 예, Retry-After 후에. 요청이 작을수록 도움이 됩니다.
429 slow_down (type rate_limit_error) RPM 및 TPM 제한 내에 있더라도 트래픽이 너무 빠르게 증가했습니다. 네, 더 낮은 요율로
503 server_is_overloaded (type service_unavailable_error) OpenAI의 서버가 사용 중입니다. 예, 매번 지연 시간이 더 길어집니다
429 credit_balance_exhausted, 지출 한도 또는 사용량 제한 오류(유형 insufficient_quota) 크레딧이 부족하거나 한도를 초과했습니다. No. OpenAI insufficient_quota 및 credit_balance_exhausted 참조하세요.

이러한 오류의 대부분은 429 상태를 공유하므로 상태만으로 구분할 수 없습니다. 응답 본문에서 error.code을 읽습니다.

OpenAI 속도 제한 오류를 처리하는 방법

  1. 먼저 error.code 확인하세요. credit_balance_exhausted와 같은 청구 코드인 경우 다시 시도를 중지하고 사용자에게 알리세요. 청구 오류를 다시 시도해도 액세스 권한이 복원되지 않습니다.
  2. Retry-After이(가) 있으면 이를 따르세요. 없는 경우 지터와 함께 지수 백오프를 사용하고 재시도 횟수를 제한합니다.
  3. slow_down 후에 속도를 늦추세요. 요청 속도를 줄인 다음 그런 다음 점진적으로 늘리세요. 입력 TPM이 1M을 초과할 경우 OpenAI의 경험칙은 15분마다 트래픽을 최대 50%까지만 늘리는 것입니다.
  4. TPM 오류 발생 후에는 토큰 수를 줄여 보내세요. 프롬프트 및 응답이 짧을수록 매분 더 많은 요청을 처리할 수 있습니다.
  5. 503 후에 더 뒤로 물러나세요 재시도 간격을 늘리고 OpenAI 상태 페이지를 확인하세요.
  6. 사용자에게 무슨 일이 일어나고 있는지 알리세요. "사용 중입니다. 5초 후 다시 시도합니다"는 끝나지 않는 스피너보다 낫다.

OpenAI Python SDK는 기본적으로 짧은 지수 백오프 간격으로 연결 오류와 408, 409, 429, 5xx 응답에 대해 2회 재시도합니다. max_retries로 이를 변경할 수 있습니다. 재시도 횟수를 모두 소진하면 SDK가 503에 대해서는 InternalServerError를, RateLimitError에 대해서는 429를 발생시키므로 코드에는 여전히 계획이 필요합니다.

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 찾은 내용 당신이 놓친 것
프로덕션을 기다리세요 실제 실패 사용자가 클릭하기 전까지는 모든 것
테스트에서 API를 모킹하거나 코딩 에이전트가 모의 개체를 작성하도록 허용 재시도 분기 실행 여부 OpenAI의 실제 오류 본문 및 코드와 SDK의 재시도 정책 또한 모의 환경에 도달하려면 앱에 테스트 전용 스위치가 필요합니다.
실제 API를 요청을 제한할 때까지 호출하세요 실제 동작 원할 때 특정 오류를 트리거할 수 없으며 모든 요청에는 토큰 비용이 듭니다
앱의 실제 트래픽을 가로채고 필요할 때 OpenAI 오류를 반환합니다. 실제 URL, 실제 SDK 및 재시도 정책 및 OpenAI 자체 오류 형식 앱에서 아무것도 변경되지 않으므로 코드를 격리된 상태에서 테스트하지 않습니다. 그건 단위 테스트로 처리하세요.

앱에서 직접 써 보기

Dev Proxy는 앱의 api.openai.com에 대한 요청을 가로채 OpenAI 오류를 반환하는 동안, 앱은 실제 URL을 계속 호출합니다. openai-throttling 사전 설정은 OpenAI 자체 형식으로 TPM 및 RPM rate_limit_exceeded, credit_balance_exhausted, slow_down, 및 503server_is_overloaded 오류 중 임의로 선택해 대부분의 요청을 실패시킵니다. 429 요청 제한 응답에는 Retry-After 헤더가 포함되며, 해당 시간이 지나기 전에 앱이 다시 시도하면 개발자 프록시가 이를 기록합니다.

사전 설정을 다운로드하고 해당 사전 설정으로 Dev Proxy를 시작합니다.

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

그런 다음 평소와 같이 앱을 실행하고 어떻게 동작하는지 확인하세요. Dev Proxy를 설치하려면 Dev Proxy 설정을(를) 참조하세요.

요청에서 사용하는 프롬프트 및 완료 토큰에 따라 분당 토큰이 부족할 때 앱이 동작하는 방식을 테스트하려면 테스트 언어 모델 토큰 제한을 참조하세요.

다음 단계

또한, 다음을 참조하세요.