SDK로 시작하기: LiteLLM을 코드에 직접 붙이는 방식
SDK로 시작하기: LiteLLM을 코드에 직접 붙이는 방식
LiteLLM을 쓰는 길은 크게 둘로 나뉘어요. 하나는 게이트웨이(프록시)를 띄워서 여러 앱이 하나의 OpenAI 호환 엔드포인트로 접근하게 하는 방식이고, 다른 하나는 지금 보게 될 SDK를 애플리케이션 코드에 직접 임포트해서 쓰는 방식이에요. 두 번째가 필요한 순간은, "중앙 서버 없이 내 앱 안에서 바로 모델을 호출하고 싶다"거나 PoC를 빠르게 돌려보고 싶을 때입니다.
SDK 경로는 파이썬 패키지를 설치하는 한 줄로 시작해요.
설치와 환경 변수
uv add 'litellm==1.82.6'
그다음은 하나의 프로바이더부터 골라서 그 프로바이더가 요구하는 환경 변수를 설정하면 돼요. 대표적으로 OpenAI는 OPENAI_API_KEY, Anthropic은 ANTHROPIC_API_KEY, Azure OpenAI는 AZURE_API_KEY·AZURE_API_BASE·AZURE_API_VERSION, Bedrock은 표준 AWS 자격증명, Vertex AI는 VERTEXAI_PROJECT·VERTEXAI_LOCATION을 요구합니다. 아직 프로바이더를 못 정했다면 지원 프로바이더 목록을 훑어보면 돼요.
첫 completion 호출
from litellm import completion
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"
response = completion(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello, how are you?"}],
)
print(response.choices[0].message.content)
model 이름에서 눈여겨볼 점은 바로 앞의 openai/ 프리픽스예요. LiteLLM은 이 프리픽스로 "어느 프로바이더로 보낼지"를 판단합니다. 그래서 예를 들어 anthropic/claude-..., bedrock/...처럼 바꾸면 같은 코드로 다른 공급자에 붙을 수 있어요. 나중에 게이트웨이를 도입하면 이 프리픽스가 실제 라우팅을 담당하는 model_group과 연결되는 식으로 바뀌지만, SDK에서는 이렇게 직관적으로 동작합니다.
print(response.choices[0].message.content)는 assistant의 텍스트를, print(response)는 파이썬 ModelResponse(...) 객체 전체를 보여줘요. 이 객체는 OpenAI 스타일의 모양을 따르는데, 개념적으로는 이렇게 생겼습니다.
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-4o",
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "Hello! I'm doing well, thanks for asking."},
"finish_reason": "stop"
}],
"usage": {"prompt_tokens": 13, "completion_tokens": 12, "total_tokens": 25}
}
id, created, 토큰 수, 메시지 텍스트는 요청마다 달라져요. OpenAI 기반 모델을 호출하면 system_fingerprint, service_tier, tool_calls, function_call, annotations, provider_specific_fields, 상세 토큰 사용량 같은 추가 필드도 볼 수 있습니다.
언제 게이트웨이로 넘어갈까
SDK로 프로바이더를 직접 붙이는 건 시작하기엔 가장 빠르지만, 중앙 인증이 필요해지고 가상 키·지출 추적·공용 로깅 또는 여러 앱이 쓰는 하나의 OpenAI 호환 엔드포인트가 필요해지면 LiteLLM 게이트웨이로 넘어가는 걸 권장해요. 핵심 규칙은 간단해요 — "내 앱 하나에 빠르게"는 SDK, "조직 전체에 안전하게"는 게이트웨이.