한도와 에러
Rate limit
| 한도 | 기본 | 원문 저장 동의 시 |
|---|---|---|
| 분당 요청 (RPM) | 60 | 120 (×2) |
| 분당 토큰 (TPM) | 200,000 | 400,000 (×2) |
| 일일 토큰 | 4,000,000 | 40,000,000 (×10) |
모든 한도는 계정 단위입니다. 키를 여러 개 만들어도 한도는 늘지 않고 모든 키가 함께 씁니다. 임베딩·희소 임베딩·리랭크 API도 같은 한도를 함께 씁니다.
- 한 요청에 텍스트를 최대 8개(리랭크는 문서 100개)까지 묶을 수 있고 요청 수는 1회로 셉니다. 긴 문서를 배치로 보내면 RPM보다 TPM에 먼저 닿습니다.
- 분당 한도는 1분 단위로 끊기지 않고 계속 채워집니다. 예를 들어 RPM 60이면 1초에 1회씩 회복됩니다.
- 토큰은 요청이 끝난 뒤 실제 사용량(응답의
usage)만큼 차감합니다. 리랭크는 질의를 문서 수만큼 반복해서 셉니다. 남은 토큰보다 큰 요청도 처리되지만 그만큼 마이너스가 되어, 회복될 때까지 다음 요청이429가 됩니다. - 일일 한도는 한국 시간 자정에 초기화됩니다.
- 데이터 정책의 원문 저장에 동의하면 분당 한도는 2배, 일일 토큰은 10배로 늘어나며, 대시보드 → 설정에서 언제든 바꿀 수 있습니다. 현재 한도와 사용량은 대시보드 → 사용량에서 볼 수 있습니다.
한도 상향
연구·서비스에 더 큰 한도가 필요하면 한도 상향 요청을 보내 주세요. 계정의 최근 사용량이 함께 전달되며, 확인 후 계정별로 한도를 올려 드립니다. 기관 단위 이용이나 전용 용량이 필요하면 기관·엔터프라이즈 문의로 연락 주세요.
응답 헤더
성공한 요청과 한도 초과 응답에는 다음 헤더가 붙습니다.
| 헤더 | 설명 |
|---|---|
x-ratelimit-limit-requests | 분당 요청 한도 |
x-ratelimit-remaining-requests | 지금 남은 요청 수 |
x-ratelimit-limit-tokens | 분당 토큰 한도 |
x-ratelimit-remaining-tokens | 지금 남은 토큰 수 |
retry-after | 한도 초과 시, 다시 보내도 되는 시점까지 남은 초 |
에러 형식
에러는 OpenAI와 같은 형식입니다.
{
"error": {
"message": "Rate limit reached for requests per minute (60 RPM). Retry after 1s.",
"type": "rate_limit_error",
"param": null,
"code": "rate_limit_exceeded"
}
}| 상태 | code | 의미 | 대응 |
|---|---|---|---|
| 400 | null | 파라미터가 잘못됨. param에 문제 필드가 있습니다. | 요청 수정 |
| 400 | context_length_exceeded | 임베딩할 텍스트 하나가 8,192 토큰을 넘음 (희소 임베딩·리랭크는 잘라서 처리) | 텍스트를 나누어 다시 요청 |
| 401 | missing_api_key | Authorization 헤더가 없음 | 키 추가 |
| 401 | invalid_api_key | 키가 틀렸거나 폐기됨 | 대시보드에서 키 확인 |
| 404 | model_not_found | 없는 모델 ID, 또는 다른 엔드포인트용 모델 (메시지에 맞는 엔드포인트) | GET /models로 확인 |
| 410 | model_retired | 서빙이 끝난 모델 | 메시지의 대체 모델로 옮기기 (모델 수명 주기) |
| 429 | rate_limit_exceeded | 내 한도를 넘음 | retry-after만큼 기다린 뒤 재시도 |
| 429 | overloaded | 서버가 일시적으로 바쁨 | 잠시 후 재시도 |
| 502 | worker_error | 추론 서버 내부 오류 | 잠시 후 재시도, 계속되면 kure.nlpai@gmail.com |
| 503 | no_worker_available, worker_failed, api_unavailable | 추론 서버 점검·재시작 중 | retry-after만큼 기다린 뒤 재시도 |
| 504 | timeout | 추론 시간 초과 | 입력을 줄여 재시도 |
재시도
429와 5xx는 다시 보내면 대부분 성공합니다. retry-after 헤더가 있으면 그만큼 기다리고, 없으면 지수 백오프로 재시도하세요. OpenAI SDK는 이 동작이 기본으로 들어 있습니다(max_retries, 기본 2회).
client = OpenAI(
base_url="https://kure.kullm.ai/api/v1",
api_key=os.environ["KURE_API_KEY"],
max_retries=5,
)400, 401, 404는 다시 보내도 같은 결과이므로 요청을 고쳐야 합니다.
