Tools

LiteLLM: an in-house AI gateway with virtual keys and budgets

TL;DR

LiteLLM ships a unified SDK and a self-hosted proxy. The proxy issues budgeted sub-keys, tracks spend per team and lets you swap models without code changes, at the cost of a central component you must run well.

Khi công ty có từ 3 team trở lên cùng dùng LLM, các vấn đề sau xuất hiện gần như chắc chắn: API key gốc bị dán khắp các repo, không ai biết team nào tiêu bao nhiêu, mỗi team viết một kiểu retry/fallback, và đổi nhà cung cấp là phải sửa code ở mười chỗ. LiteLLM (repo BerriAI/litellm) là lời giải phổ biến: một AI Gateway mã nguồn mở, tự host, cho phép gọi hơn 100 nhà cung cấp LLM (Anthropic, OpenAI, Gemini, Bedrock, Azure…) qua một định dạng chung theo kiểu OpenAI.

Hai cách dùng

Thành phầnLà gìHợp với
Python SDKThư viện completion() thống nhất; Router có retry/fallback, cân bằng tải, tính chi phí, callback observabilityMột ứng dụng, một team
Proxy (AI Gateway)Dịch vụ trung tâm: virtual key, theo dõi chi tiêu theo user/team, guardrail, logging, dashboard quản trịNhiều team, cần quản trị tập trung

SDK: một hàm cho mọi provider

from litellm import completion

resp = completion(
    model="anthropic/claude-sonnet-5-5",   # đổi provider = đổi chuỗi này
    messages=[{"role": "user", "content": "Tóm tắt ticket sau..."}],
)
print(resp.choices[0].message.content)

Response trả về theo format OpenAI, nên code phía sau không cần biết đang gọi model nào.

Proxy: cấu hình tối thiểu

# config.yaml
model_list:
  - model_name: claude-main
    litellm_params:
      model: anthropic/claude-sonnet-5-5
      api_key: os.environ/ANTHROPIC_API_KEY

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY
  database_url: os.environ/DATABASE_URL   # Postgres, cần cho virtual key
litellm --config config.yaml     # mặc định lắng nghe cổng 4000

Ứng dụng chỉ cần trỏ OpenAI client tới http://<gateway>:4000 và dùng tên claude-main. Khi muốn đổi model, chỉ sửa config.yaml, không sửa code ứng dụng.

Virtual key: cấp key riêng có ngân sách

Thay vì phát API key gốc, admin dùng master key để sinh key con cho từng team/ứng dụng:

curl http://gateway:4000/key/generate \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "models": ["claude-main"],
    "max_budget": 50,
    "duration": "30d",
    "rpm_limit": 60,
    "tpm_limit": 100000,
    "metadata": {"team": "support-bot"}
  }'
  • max_budget (USD), rpm_limit/tpm_limit, duration đặt trực tiếp trên key.
  • Gắn key với user_id hoặc team_id để theo dõi chi tiêu; xem qua /key/info, /user/info, /team/info.
  • Khoá/mở key tức thì bằng /key/block, /key/unblock. Có alias model để nâng/hạ model mà client không biết.

Lợi ích thực tế

  • Không lộ key gốc: key provider chỉ nằm ở gateway; key con lộ thì khoá riêng key đó.
  • Chargeback rõ ràng: biết chính xác team/tính năng nào tiêu bao nhiêu.
  • Fallback và cân bằng tải: một provider quá tải hoặc lỗi thì chuyển sang deployment khác.
  • Observability tập trung: gửi log sang Langfuse, MLflow… từ một chỗ.

Rủi ro và lưu ý

  • Điểm lỗi tập trung: gateway sập là mọi ứng dụng AI sập. Chạy nhiều replica, dùng image tag -stable (README nói đã qua load test 12 giờ), có health check.
  • Gateway giữ toàn bộ key và nhìn thấy mọi prompt: bảo vệ nó như một hệ thống chứa bí mật: network nội bộ, giới hạn quyền vào dashboard, cập nhật bản vá thường xuyên.
  • Tính năng nâng cao có thể thuộc bản thương mại: SSO và một số tính năng như xoay vòng key có grace period thuộc gói Enterprise. Kiểm tra trước khi đưa vào thiết kế.
  • Mất tính năng riêng của provider: chuẩn hoá về format OpenAI tiện nhưng có thể che một số tham số đặc thù (thinking, cache…). Kiểm tra endpoint /messages hoặc pass-through khi cần tính năng riêng của Claude.
  • Cài đặt: chỉ cài một trong hai gói litellm hoặc litellm-core trong một môi trường, vì chúng ghi đè file của nhau.

Áp dụng thế nào?

  • Dev: Dùng SDK nếu chỉ một ứng dụng cần đổi qua lại vài model. Đừng dựng proxy khi chưa cần.
  • Tech Lead / Platform: Khi có từ 3 team dùng LLM, dựng proxy làm cổng duy nhất: virtual key theo team, budget theo tháng, log tập trung, thu hồi key gốc khỏi repo.
  • PM: Gateway cho số liệu chi phí theo tính năng: căn cứ để quyết định tính năng nào đáng giữ model đắt.

Sources & references

  1. LiteLLM — GitHub repository — BerriAI
  2. Virtual Keys — LiteLLM docs