속도 제한
개요
swag2mcp에는 LLM이 동일한 API 엔드포인트를 너무 자주 호출하는 것을 방지하는 내장 속도 제한기가 있습니다. 실수로 인한 중복 호출을 방지하고 API 속도 제한을 준수합니다.
작동 방식
각 엔드포인트에는 쿨다운 기간이 있습니다. LLM이 쿨다운 내에 동일한 엔드포인트를 다시 호출하려고 하면 구조화된 오류와 함께 거부됩니다.
t=0s → invoke(endpoint) → 실행
t=2s → invoke(endpoint) → rate_limit 오류로 거부
t=12s → invoke(endpoint) → 실행 (쿨다운 경과)기본 동작
- 쿨다운: 엔드포인트당 10초
- 범위: 엔드포인트별 — 엔드포인트 A 호출이 엔드포인트 B에 영향을 주지 않음
- 오류 응답: LLM은 코드
rate_limit와 대기 시간을 알리는 메시지가 포함된LLMError를 받습니다 - 초기화: 해당 엔드포인트에서 10초 동안 활동이 없으면 초기화
오류 형식
속도 제한 시 LLM이 받는 응답:
json
{
"code": "rate_limit",
"message": "endpoint \"abc123\"에 대한 속도 제한 초과: 8초 후에 다시 시도하세요",
"hint": "쿨다운 기간이 만료될 때까지 기다린 후 엔드포인트를 다시 호출하세요. 그동안 호출할 수 있는 다른 엔드포인트를 찾으려면 검색 도구를 사용하세요."
}LLM은 이 정보를 사용하여 대기 후 재시도하거나 다른 엔드포인트로 전환할 수 있습니다.
존재 이유
- 실수로 인한 중복 호출 방지 — LLM이 동일한 엔드포인트를 빠르게 연속해서 여러 번 호출할 수 있음
- API 속도 제한 보호 — 많은 API에 자체 속도 제한이 있으며, 이를 초과하면 오류가 발생함
- 리소스 절약 — 불필요한 네트워크 트래픽 감소
설정
속도 제한기를 비활성화하거나 쿨다운 간격을 변경할 수 있습니다:
yaml
# 속도 제한기 완전 비활성화
disable_ratelimiter: true
# 커스텀 쿨다운 간격
rate_limit_interval: 30sdisable_ratelimiter
- 타입:
bool - 기본값:
false - 효과:
true일 때 엔드포인트별 속도 제한기가 비활성화됩니다. LLM이 대기 없이 동일한 엔드포인트를 반복해서 호출할 수 있습니다. - 활성화 시기: 테스트, 디버깅 또는 동일한 엔드포인트를 빠르게 연속해서 여러 번 호출해야 할 때.
- 비활성화 유지(권장): 프로덕션. 속도 제한기는 실수로 인한 남용을 방지합니다.
rate_limit_interval
- 타입: duration (Go 형식:
10s,30s,1m) - 기본값:
10s - 효과: 동일한 엔드포인트 호출 간 LLM이 대기해야 하는 시간을 설정합니다.
- 증가 시기: 엄격한 속도 제한이 있는 API(예: 분당 10회 요청).
- 감소 시기: 부하를 제어할 수 있는 내부 API.
- 예시:
5s,30s,1m,2m
중요 참고 사항
- 엔드포인트별 추적 — 각 엔드포인트는 독립적으로 추적됩니다. 하나의 엔드포인트를 호출해도 다른 엔드포인트에 영향을 주지 않습니다.
- LLM에 오류 반환 — 쿨다운 내의 두 번째 호출은
rate_limit오류와 함께 거부됩니다. LLM은 쿨다운 시간을 받고 대기 후 재시도할 수 있습니다. - 정리 불필요 — 속도 제한기는 엔드포인트를 자동으로 추적하며 유지보수가 필요하지 않습니다.