Skip to main content
대규모 평가 작업을 실행할 때 흔히 발생하는 문제는 서드파티 API 속도 제한, 주로 모델 제공자의 속도 제한에 도달하는 것입니다. 속도 제한을 처리하는 몇 가지 방법이 있습니다.

langchain RateLimiter 사용하기 (Python만 해당)

애플리케이션이나 평가자에서 langchain Python ChatModel을 사용하는 경우, 모델에 레이트 리미터를 추가하여 속도 제한 오류를 방지할 수 있도록 모델 제공자 API로 전송되는 요청 빈도를 클라이언트 측에서 제어할 수 있습니다.
from langchain.chat_models import init_chat_model
from langchain_core.rate_limiters import InMemoryRateLimiter

rate_limiter = InMemoryRateLimiter(
    requests_per_second=0.1,  # <-- Super slow! We can only make a request once every 10 seconds!!
    check_every_n_seconds=0.1,  # Wake up every 100 ms to check whether allowed to make a request,
    max_bucket_size=10,  # Controls the maximum burst size.
)

model = init_chat_model("gpt-4o", rate_limiter=rate_limiter)

def app(inputs: dict) -> dict:
    response = model.invoke(...)
    ...

def evaluator(inputs: dict, outputs: dict, reference_outputs: dict) -> dict:
    response = model.invoke(...)
    ...
레이트 리미터 구성 방법에 대한 자세한 내용은 langchain 문서를 참조하세요.

지수 백오프를 사용한 재시도

속도 제한 오류를 처리하는 매우 일반적인 방법은 지수 백오프를 사용한 재시도입니다. 지수 백오프를 사용한 재시도는 실패한 요청을 각 재시도 사이에 (지수적으로) 증가하는 대기 시간을 두고 반복적으로 재시도하는 것을 의미합니다. 이는 요청이 성공하거나 최대 요청 횟수에 도달할 때까지 계속됩니다.

langchain과 함께 사용하기

langchain 컴포넌트를 사용하는 경우 .with_retry(...) / .withRetry() 메서드를 사용하여 모든 모델 호출에 재시도를 추가할 수 있습니다:
from langchain import init_chat_model

model_with_retry = init_chat_model("gpt-4o-mini").with_retry(stop_after_attempt=6)
자세한 내용은 langchain PythonJS API 레퍼런스를 참조하세요.

langchain 없이 사용하기

langchain을 사용하지 않는 경우 tenacity (Python) 또는 backoff (Python)와 같은 다른 라이브러리를 사용하여 지수 백오프를 사용한 재시도를 구현하거나, 처음부터 직접 구현할 수 있습니다. 이를 수행하는 방법에 대한 몇 가지 예시는 OpenAI 문서를 참조하세요.

max_concurrency 제한하기

애플리케이션과 평가자에 대해 수행하는 동시 호출 수를 제한하는 것은 모델 호출 빈도를 줄이고 이를 통해 속도 제한 오류를 방지하는 또 다른 방법입니다. max_concurrencyevaluate() / aevaluate() 함수에서 직접 설정할 수 있습니다. 이는 데이터셋을 스레드 간에 효과적으로 분할하여 평가를 병렬화합니다.
from langsmith import aevaluate

results = await aevaluate(
    ...
    max_concurrency=4,
)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I