홈 / 문서 / 요청 속도 제한

요청 속도 제한

요청 제한의 작동 방식, 여기서 429이 의미하는 것, 그리고 이를 유발하지 않는 클라이언트를 구현하는 방법.

한도는 공유되는 업스트림 처리 용량을 공정하게 사용할 수 있도록 합니다. 키별이 아닌 계정별로 적용되므로 키를 추가해도 상한이 높아지지 않습니다.

제한 항목

비교 항목동작
동시 요청계정별로 처리 중인 요청 수입니다. 429의 일반적인 원인입니다.
분당 요청 수지속적인 호출 빈도입니다.
분당 토큰 수입력과 출력을 합산한 처리량입니다.

무제한 요금제에는 크레딧 잔액 대신 공정 사용 한도가 적용됩니다. 토큰당 요금은 없어지지만 동시 요청 상한은 유지됩니다.

429에 올바르게 대응하기

  1. 지터를 적용한 지수 백오프를 사용하세요. 1초, 2초, 4초, 8초 간격마다 무작위 비율만큼 시간을 더하거나 빼세요.
  2. 모든 요청을 한꺼번에 보내고 거부된 요청을 재시도하는 대신, 세마포어로 클라이언트 측 동시 요청 수를 제한하세요.
  3. 배치 작업은 최대한 병렬화하기보다 큐에 넣으세요. 처리량은 열린 소켓 수가 아니라 분당 토큰 수에 의해 제한됩니다.
  4. 취급하세요 529 다음과는 다르게: 429 — 이는 사용자 측 문제가 아니라 업스트림 처리 용량 문제이며, 보통 몇 초 안에 해소됩니다.
import asyncio

sem = asyncio.Semaphore(8)      class=class="s">"c"># ceiling on concurrency, tune to your plan

async def ask(client, body):
    async with sem:
        return await client.post(class="s">"/v1/messages", json=body)
Claude Code와 같은 에이전트 도구는 설계상 많은 작업을 적극적으로 병렬 실행합니다. 에이전트를 집중적으로 사용할 때 429 오류가 발생하면 요금제를 올리기 전에 도구의 병렬 처리 수준을 낮추세요.

재시도 대신 부하 줄이기