블로그로 돌아가기

API & SDK가이드

커스텀 api_base로 LiteLLM 사용하기: Python에서 CheapTokens 호출

openai/ 접두사, api_base, 전체 모델 id로 litellm.completion()과 LiteLLM 프록시 config.yaml에서 CheapTokens를 호출하고 Not Found를 해결하세요.

작성자: CheapTokens Team 게시됨읽는 시간 5분

openai/ 모델 접두사와 CheapTokens를 가리키는 api_base를 사용한 LiteLLM 호출
이 페이지의 내용
  1. Python과 프록시에서의 동일한 호출
  2. 확인해야 할 결과
  3. 프록시에 모델 더 추가하기
  4. 문제가 생길 때: Not Found와 401
  5. 1,000회 호출 비용

LiteLLM을 CheapTokens로 보내려면 세 가지 값을 바꾸면 됩니다. model에는 전체 모델 id 앞에 openai/ 접두사를 붙이고, api_base는 https://api.cheaptokens.dev/v1가 되며, api_key에는 CheapTokens 키를 넣습니다. Python의 litellm.completion()든 LiteLLM 프록시든 전환은 이게 전부입니다.

OpenAI나 Anthropic 모델로 litellm.completion()를 호출하는 프로젝트가 이미 있고, 나머지 코드는 건드리지 않은 채 더 저렴한 모델을 시험해 보고 싶다고 해 봅시다. 이걸 가능하게 하는 게 바로 접두사입니다. LiteLLM의 OpenAI 호환 제공자 문서(2026년 10월 29일 확인)에 따르면 OpenAI 호환 엔드포인트에서는 모델을 openai/로 설정해 LiteLLM이 OpenAI 제공자로 라우팅되게 한 다음, 그 옆에 api_base과 api_key를 넘기라고 되어 있습니다. CheapTokens는 https://api.cheaptokens.dev/v1에서 OpenAI Chat Completions 형식을 지원하므로 잘 맞습니다.

Python과 프록시에서의 동일한 호출#

두 설정 모두 짧습니다. LiteLLM을 실행하는 방식에 맞는 탭을 고르세요.

CheapTokens 모델 하나, 호출 방법 두 가지

Python SDK

python
import os
import litellm

response = litellm.completion(
    model="openai/deepseek-ai/DeepSeek-V4-Flash-0731",
    api_base="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
    messages=[{"role": "user", "content": "Explain what api_base does in one sentence."}],
    max_tokens=200,
)

print(response.choices[0].message.content)
print(response.usage)

키는 파일이 아니라 환경 변수에 두세요.

프록시 config.yaml

yaml
model_list:
  - model_name: cheap-chat
    litellm_params:
      model: openai/deepseek-ai/DeepSeek-V4-Flash-0731
      api_base: https://api.cheaptokens.dev/v1
      api_key: os.environ/CHEAPTOKENS_API_KEY

litellm --config /path/to/config.yaml로 시작하세요. 클라이언트는 프록시에 cheap-chat를 요청하며 실제 모델 id는 보지 못합니다.

프록시 호출

bash
curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "cheap-chat", "messages": [{"role": "user", "content": "Say hi"}]}'

프록시는 기본적으로 4000번 포트에서 수신합니다. 나중에 cheap-chat 뒤의 모델을 바꿔도 이 요청은 바뀌지 않습니다.

사람들이 자주 걸리는 부분이 모델 id입니다. CheapTokens가 받는 id는 전체 id인 deepseek-ai/DeepSeek-V4-Flash-0731이며, 그 앞에 openai/가 붙습니다. deepseek-v4-flash도 아니고, 접두사에 짧은 이름만 붙인 것도 아닙니다. 모델 이름이 확실하지 않다면 GET /v1/models로 모델 목록을 조회하고 응답에서 id를 복사하세요.

세 값을 바꾼 Python 호출
바뀌는 세 값: openai/ 접두사가 붙은 model, api_base, api_key.

확인해야 할 결과#

Python 탭을 실행하세요. 첫 번째 print는 모델의 텍스트를 보여 줍니다. 두 번째는 response.usage, 즉 해당 호출 한 번의 토큰 수를 보여 주는데, 보낸 것에 대해 prompt_tokens, 모델이 쓴 것에 대해 completion_tokens입니다. LiteLLM은 이를 OpenAI 형식으로 반환하므로 이미 usage를 읽는 코드는 그대로 동작합니다. 이 두 숫자를 누적 요금으로 바꾸고 싶다면 Python에서 에이전트 토큰 비용 추적하기를 참고하세요.

프록시에 모델 더 추가하기#

model_name의 핵심은 뒤에 있는 모델을 바꾸는 동안 클라이언트는 하나의 별칭을 유지한다는 점입니다. 하나의 CheapTokens 잔액이 모든 모델을 커버하므로 model_list에는 같은 api_base와 같은 키를 가리키는 여러 항목을 넣을 수 있습니다:

yaml
model_list:
  - model_name: cheap-chat
    litellm_params:
      model: openai/deepseek-ai/DeepSeek-V4-Flash-0731
      api_base: https://api.cheaptokens.dev/v1
      api_key: os.environ/CHEAPTOKENS_API_KEY
  - model_name: cheap-glm
    litellm_params:
      model: openai/zai-org/GLM-5.3-Flash
      api_base: https://api.cheaptokens.dev/v1
      api_key: os.environ/CHEAPTOKENS_API_KEY
  - model_name: cheap-minimax
    litellm_params:
      model: openai/MiniMaxAI/MiniMax-M2.7
      api_base: https://api.cheaptokens.dev/v1
      api_key: os.environ/CHEAPTOKENS_API_KEY

어떤 작업에 어떤 별칭을 쓸까요? 답변이 길어질 수 있는 채팅과 에이전트 호출에는 DeepSeek-V4-Flash로 시작하는 게 좋습니다. 380K 컨텍스트, 답변당 최대 32,768 출력 토큰, 피크 시간 없는 고정 가격입니다. GLM-5.3-Flash는 390K 컨텍스트와 최대 8,192 출력 토큰을 가집니다. MiniMax-M2.7은 180K 컨텍스트입니다. 자세한 내용은 DeepSeek 페이지에 있고, 가격에는 세 모델의 현재 요금이 나와 있습니다.

문제가 생길 때: Not Found와 401#

대부분의 첫 호출 실패는 두 가지 오류로 설명됩니다. LiteLLM 문서에 따르면 base URL에 아무것도 덧붙이지 말아야 하며, Not Found 오류가 나면 api_base이 /v1로 끝나는지 확인해야 합니다. 한 가지 주의할 점: 문서 자체의 로컬 프록시 예시는 /v1 없이 http://0.0.0.0:4000를 사용합니다. 그건 다른 서버입니다. CheapTokens에서는 /v1가 유지됩니다.

api_base에 /v1이 없을 때의 Not Found
404 Not Found는 보통 api_base에 /v1이 빠졌다는 뜻입니다.

사례 선택하기

오류가 어떻게 나오나요?

Not Found (404)

api_base를 확인하세요. 정확히 https://api.cheaptokens.dev/v1여야 하며, /v1가 있고 끝에 /chat/completions가 없어야 합니다. 나머지 경로는 LiteLLM이 직접 붙입니다.

401 Unauthorized

키가 없거나, 틀렸거나, LiteLLM이 빈 환경 변수를 읽은 경우입니다. 키 자체가 아니라 os.environ.get("CHEAPTOKENS_API_KEY")의 길이를 출력해 설정 여부를 확인하고, 습관적으로 OpenAI 키를 넘기지 않았는지 확인하세요.

모델이 거부됨

id를 /v1/models에서 가져온 것과 한 글자씩 비교하세요. openai/ 접두사는 LiteLLM 전용이며, 그 뒤에는 슬래시 앞의 개발자 부분을 포함한 전체 CheapTokens id가 옵니다.

상태 코드 전체 설명은 API 401 또는 404: 잘못된 키, base URL 또는 모델 id를 참고하세요. api_base의 개념부터 알고 싶다면 base_url이란 무엇이고 어떻게 전환하는가에서 쉬운 말로 설명합니다.

빠른 확인

api_base가 https://api.cheaptokens.dev인데 호출이 Not Found를 반환합니다. 무엇을 먼저 바꾸시겠습니까?

정답 보기

정답: /v1을 추가해 https://api.cheaptokens.dev/v1가 되도록

Not Found는 경로를 가리킵니다. 키 문제라면 401이 나왔을 것이고, 접두사는 LiteLLM에 OpenAI 방식 요청을 쓰라고 알려 주는 역할입니다.

1,000회 호출 비용#

프록시 뒤의 지원 봇이 하루 1,000건의 요청을 보내고, 각 요청은 입력 약 2,000 토큰(질문과 컨텍스트)과 출력 500 토큰이라고 가정해 봅시다. 실제 가격 기준으로 이 부하를 계산한 표이며, 비교를 위해 OpenRouter 열도 함께 두었습니다(총액, 입력과 출력 합산):

모델 요청당 1,000회 요청 OpenRouter, 1,000회 요청
GLM-5.3-Flash $0.00006 $0.06 $0.121
DeepSeek-V4-Flash $0.00008 $0.08 $0.173
MiniMax-M2.7 $0.00018 $0.175 $1.20

요청당 입력 2,000개 및 출력 500개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.

DeepSeek-V4-Flash의 경우 이 부하는 하루 $0.08이며, 표에서 총액이 OpenRouter보다 저렴함을 알 수 있습니다. 두 숫자를 자신의 평균 요청으로 바꾸면 예산이 나옵니다.

LiteLLM에 필요한 건 이게 전부입니다. 세 가지 값, 하나의 /v1, 그리고 전체 모델 id입니다. 대시보드에서 키를 추가하고 Python 탭을 실행하세요.