[AI] LiteLLM

Google 아니고 Joogle·2025년 9월 8일
0

AI

목록 보기
3/6

LiteLLM

  • 다양한 대규모 언어모델 (LLM)을 단일 통합 API로 관리하는 오픈소스 프레임워크

주요 기능

1. Multi-Provider Integration

  • 각기 다른 API사양과 인증 방식을 가진 여러 LLM을 추상화하여, 마치 단일 제공업체 서비스를 사용하는 것처럼 사용의 편의성 향상
  • 모든 LLM API 호출을 OpenAI API 형식으로 표준화하는 것이 핵심
  • 내부적으로 요청을 받아들이면, 지정된 모델에 따라 해당 공급자의 실제 API 앤드포인트로 변환하여 전달
  • 간편한 모델 전환: 백엔드에서 사용하는 LLM을 바꾸더라도 애플리케이션 코드는 그대로 유지 가능
  • 통합 예외처리: 다양한 제공업체에서 발생할 수 있는 오류를 일관된 방식으로 처리하여 안정성 높임

liteLLM을 쓰지 않으면 아래처럼 각 벤더(OpenAI, Anthropic, Google 등)의 공식 SDK를 직접 불러와서 호출

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
    response = client.chat.completions.create(
        model="gpt-5",
        messages=[{"role": "user", "content": "안녕하세요!"}]
    )
import os
from anthropic

client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
    message = client.messages.create(
        model="claude-4-1-opus",
        messages=[{"role": "user", "content": "안녕하세요!"}]
    )
import os
from google.generativeai as genai

genai.configure(api_key=os.environ.get("GENAI_API_KEY"))
model=genai.GenerativeModel("gemini-2.5-pro-latest")
response=model.generate_content("안녕하세요!")

liteLLM을 사용하면 아래와 같이 기본 호출 구조를 통일할 수 있다

from litellm import completion, acompletiong, litellm

message = [{"content": "Hello, how are you?", "role": "user"}]
response = litellm.completion(model = "gpt-4o-mini", messages=messages)

위 코드에서 모델명만 변경하여 다른 LLM으로 쉽게 전환 가능

OpenAI 모델 외에는 벤터 prefix를 붙여줘야 함. 아래는 gemini 라는 prefix를 붙임

google_api_key=os.environ.get("GOOGLE_API_KEY")
response = litellm.completion(
	model="gemini/gemini-1.5-flash-latest",
    messages=messages,
    api_key=google_api_key
)

2. 비동기 호출

여러 모델을 동시에 비동기로 호출

  • Acompletion(): 비동기 버전의 completion 함수
  • Asyncio.gather(): 여러 비동기 작업을 동시에 수행
  • 성능 향상: 순차 호출 대비 시간 단축
    gpt_task = await acompletion(
        model="gpt-5",
        messages=[{"role": "user", "content": "안녕하세요 GPT!"}]
    )
    gemini_tast = await acompletion(
        model="gemini/gemini-1.5-pro-latest",
        messages=[{"role": "user", "content": "안녕하세요 Gemini!"}]
    )
    gpt_resp, gemini_resp = await asyncio.gather(gpt_task, gemini_task)

3. LiteLLM Proxy

  • API Gateway 개념을 LLM에 특화시킨 것으로, 100개가 넘는 LLM API를 OpenAI API와 동일한 형식으로 호출하도록 지원
  • LLM 기반 애플리케이션의 안정성, 성능, 비용 효율성 및 관리 용이성을 향상

가상 키(Virtual Keys)

  • 실제 LLM 제공업체의 API키를 노출하는 대신, LiteLLM이 생성한 가상 키(sk-xxxx)를 사용자에게 발급
  • 이 키를 통해 모델 접근 권한, 분당 요청/토큰 수, 비용 예산을 세밀하게 제어
    [Client] -- sk-proxy-user1 --> [LiteLLM Proxy] -- 실제 OpenAI Key --> [OpenAI API]

로드 밸런싱 및 폴백(Load Balancing & Fallbacks)

  • 여러 개의 LLM 모델 또는 배포 환경에 트래픽을 분산시키고, 특정 모델에 장애 발생 시, 사전에 정의된 다른 모델로 요청을 자동으로 전환하여 서비스 안정성을 보장

중앙 집중식 구성 (config.yaml)

  • 지원할 모델 목록, 라우팅 규칙, 폴백 정책 등 모든 동작을 하나의 yaml 파일로 관리

    # config.yaml
    model_list:
      # OpenAI GPT-5
      - model_name: gpt-5
        litellm_params:
          model: gpt-5
          api_key: "OPENAI_KEY_1"
    
      # Anthropic Claude (폴백 후보)
      - model_name: claude-opus
        litellm_params:
          model: claude/claude-3-opus-20240229
          api_key: "ANTHROPIC_KEY_1"
    
      # Google Gemini
      - model_name: gemini-pro
        litellm_params:
          model: gemini/gemini-1.5-pro-latest
          api_key: "GEMINI_KEY_1"
    
    router:
      # 기본 라우팅 규칙
      - model: gpt-5
        strategy: round_robin
        fallback_models: [claude-opus, gemini-pro]   # gpt-5 장애 시 폴백 순서
        max_retries: 2                               # 최대 재시도 횟수
    
      - model: gemini-pro
        strategy: random
        fallback_models: [claude-opus]               # Gemini 장애 시 Claude로 폴백

    위의 경우,

    1. 사용자가 model="gpt-5" 요청
    2. Round robin 방식으로 OPENAO_KEY_1사용
    3. 만약 OpenAI API 장애 발생시 claude-opus -> gemini-pro 순서로 폴백
    4. 최종 응답은 항상 OpenAI 스타일 JSON으로 반환
profile
백엔드 개발자 지망생에서 Test Engineer. 를 지나 AI Engineer를 향해 가는 Software Engineer (https://juyoungkimmy-kim.github.io/ 블로그 이주))

0개의 댓글