LLM-API-Key-Proxy

AI GatewaysCLIPython

★ 550주당 +3조회 4

무엇인가

LLM-API-Key-Proxy는 여러 LLM 제공자 앞에 세우는 자체 호스팅 게이트웨이다. 클라이언트는 제공자별 SDK 대신 이 프록시의 주소 하나만 바라보고, 프록시가 요청을 해당 백엔드로 넘긴다. 저장소는 FastAPI로 만든 API 프록시와 재사용 가능한 Python 라이브러리인 Resilience Library 두 부분으로 나뉜다.

어떻게 동작하나

프록시는 /v1/chat/completions(OpenAI 형식)와 /v1/messages(Anthropic 형식) 두 엔드포인트를 연다. 요청 본문의 모델 이름은 provider/model_name 형식이어야 하며, provider/ 접두사가 어느 백엔드로 라우팅할지 결정한다. 제공자 간 변환은 LiteLLM 폴백 경로가 담당한다. Resilience Library가 키 선택, 로테이션, 실패 시 페일오버, 모델별 쿨다운을 처리한다. 자격 증명은 .env 파일에 저장되고, OAuth 자격 증명은 oauth_creds/ 디렉터리에, 사용량 통계는 usage/ 디렉터리에 남는다.

무엇과 다른가

제공자마다 클라이언트 설정을 따로 두는 방식과 달리, 여기서는 PROXY_API_KEY 하나로 모든 제공자에 접근한다. Anthropic Messages API와 호환되므로 Claude Code나 Anthropic SDK 클라이언트를 Gemini, OpenAI 같은 비-Anthropic 모델에 그대로 연결할 수 있다. Gemini CLI처럼 다른 곳에서는 제공하지 않는 제공자도 포함한다.

어떻게 쓰나

Windows에서는 릴리스 압축을 풀고 proxy_app.exe를 실행하면 대화형 TUI 런처가 열린다. 소스에서 실행할 때 --host, --port 같은 인자를 주면 TUI를 건너뛰고 바로 서버가 뜬다. Docker 이미지와 Docker Compose 구성도 제공된다. 클라이언트에는 base URL http://127.0.0.1:8000/v1, API 키 PROXY_API_KEY, 모델 provider/model_name을 넣는다. /v1/models로 사용 가능한 모델 목록을 가져올 수 있고, ?enriched=false를 붙이면 가격 정보 없는 최소 응답을 받는다.

전제와 한계

모델 이름에 provider/ 접두사를 생략할 수 없다. LiteLLM 폴백 경로를 쓰는 제공자는 LiteLLM이 지원하는 범위에 묶인다. OAuth 제공자는 로컬에서 먼저 인증을 마친 뒤 oauth_creds/를 마운트하거나 자격 증명을 환경 변수로 내보내야 한다. Docker Compose로 사용량 통계를 호스트에 남기려면 실행 전에 usage/ 디렉터리를 만들어야 한다. 쿨다운은 모델 단위로 10초, 30초, 60초, 120초 순으로 늘어난다.

관련 논문 1

유사 도구