自架 LiteLLM 模型閘道:虛擬金鑰、預算控制,以及與 New API、Magpie 的選型比較
用 Zenavo 範本一鍵部署附 PostgreSQL 的 LiteLLM 模型代理,透過 /ui 管理後台設定多家大模型、發放有預算上限的虛擬金鑰,並比較 LiteLLM、New API 與 Magpie 三種開源閘道的適用場景。
本文亦提供 English、简体中文、日本語、Español 和 Bahasa Indonesia。
開發 AI 應用或帶團隊使用大型語言模型時,把上游服務商的主 API Key 直接放進各個用戶端或程式碼儲存庫裡,既無法限制單一專案能花多少錢,換金鑰時還要到處改設定。LiteLLM 是目前 Python 與 AI 工程生態裡最常使用的開源模型代理(LLM Proxy):它把 100 多家模型服務商統一成標準 OpenAI API,內建 /ui 管理後台、虛擬金鑰(Virtual Keys)、預算上限(Budgets)與每次呼叫的費用日誌。
本文用 Zenavo 的 LiteLLM 範本,把 LiteLLM 連同 PostgreSQL 資料庫一起部署到你自己的伺服器上,並比較它與 New API、Magpie 的選型差異。伺服器、Zenavo 平台與上游模型 API 分別計費。
1. 部署 LiteLLM 與 PostgreSQL
先在 Zenavo 中連接一台 Linux 伺服器(建議預留 1 GB 以上記憶體),再開啟 LiteLLM 範本,選擇伺服器並部署。
部署後專案裡有兩項服務,透過專案私有網路自動連通:
| 服務 / 變數 | 值或用途 |
|---|---|
litellm |
映像檔 ghcr.io/berriai/litellm:v1.109.1,HTTP 連接埠 4000 |
postgresql |
映像檔 postgres:16,資料庫 litellm,持久化磁碟區 /var/lib/postgresql/data |
LITELLM_MASTER_KEY |
自動產生的 sk-... 主金鑰,用於登入 /ui 後台與管理 API |
LITELLM_SALT_KEY |
自動產生的加密鹽值,用於加密存入資料庫的上游服務商 API Key |
STORE_MODEL_IN_DB |
True,允許直接在網頁後台增刪模型並持久化至 PostgreSQL |
切勿修改
LITELLM_SALT_KEY:在你往後台新增任何上游模型憑證之後,絕對不要改動LITELLM_SALT_KEY。LiteLLM 用它加密和解密資料庫裡的 API Key;一旦改動,已儲存的上游金鑰將全部無法解密。部署完請立刻把LITELLM_MASTER_KEY和LITELLM_SALT_KEY複製到密碼管理器(如自架的 Vaultwarden)中備份。
2. 綁定網域並登入 /ui 管理後台
- 在
litellm服務的 網路(Networking) 頁為4000連接埠綁定自訂網域,例如llm.example.com,並在 DNS 新增指向伺服器的A記錄。詳見網域與 HTTPS。 - 在
litellm服務的 變數(Variable) 頁查看並複製LITELLM_MASTER_KEY。 - 造訪
https://llm.example.com/ui,使用管理員使用者名稱(預設填admin)和LITELLM_MASTER_KEY登入管理面板。
postgresql 只走專案內網供 litellm 存取,不需要開啟公開存取。
3. 新增模型與發放虛擬金鑰
新增上游模型
範本已開啟 STORE_MODEL_IN_DB="True",無需手動修改 YAML 設定檔:
- 在
/ui後台開啟 Models → Add Model。 - 選擇服務商(如 OpenAI、Anthropic、DeepSeek、Gemini、Azure、Bedrock 等),填寫對外公開的模型別名(如
claude-sonnet或gpt-4o)與上游 API Key。 - 儲存後在 Test Key / Playground 發送一則測試請求,確認回傳正常。
發放有預算上限的虛擬金鑰(Virtual Keys)
日常呼叫不要直接使用 LITELLM_MASTER_KEY。開啟 Virtual Keys → Create New Key:
- 為每個應用、隊友或工具單獨建一把金鑰(如
nextjs-prod、open-webui、claude-code-alex); - 限制這把金鑰允許呼叫的模型清單;
- 設定預算上限(
Max Budget,例如$20)與重設週期(按日 / 按月),以及速率限制(TPM / RPM)。
4. 串接用戶端與程式碼
任何支援自訂 OpenAI Base URL 的 SDK 或工具都能直接連上 LiteLLM:
- 應用程式碼(OpenAI SDK / LangChain / Vercel AI SDK):Base URL 填
https://llm.example.com/v1,API Key 填虛擬金鑰。如果應用也部署在同一個 Zenavo 專案裡(例如 Next.js 全端應用),直接走內網http://litellm.zenavo.internal:4000/v1,延遲更低且不走公網。 - Claude Code 與 Codex CLI:LiteLLM 同樣支援
/v1/messages與/v1/responses路由,可依 New API 教學中的環境變數設定串接;如果想在 Claude Code 裡透過 MCP 管理 Zenavo 服務,可參考用 Claude Code 部署和除錯 Zenavo 專案。 - 聊天介面與智慧體:在自架的 Open WebUI、LobeHub 或 OpenClaw 中,把 OpenAI 代理位址設為
https://llm.example.com/v1(同專案內網為http://litellm.zenavo.internal:4000/v1)即可。
5. LiteLLM vs New API vs Magpie:三個閘道怎麼選?
Zenavo 範本庫提供了三款定位不同的開源模型閘道,你可以依使用場景挑選最合適的一款(甚至組合使用):
| 閘道範本 | 核心定位 | 持久層 | 最合適的場景 |
|---|---|---|---|
| LiteLLM | 面向工程與 SDK 的 OpenAI 代理,附虛擬金鑰、預算控制、護欄(Guardrails)與 Langfuse 等可觀測性串接 | PostgreSQL 16 | 自研 AI 應用後端、Python/TypeScript 工程團隊依專案/服務控管預算與呼叫日誌 |
| New API | 多租戶模型分發與記帳中心,內建使用者註冊/登入、令牌管理、渠道權重與額度面板 | 預設 SQLite(/data) |
給團隊多位成員依人發放帳號或令牌,統一串接 Open WebUI、LobeHub、Claude Code 與 Codex |
| Magpie | 輕量單容器多協定閘道,支援在 Anthropic Messages、OpenAI Responses/Chat 與 Gemini 之間互轉,支援 API Key 與訂閱帳號故障切換 | /config 磁碟區 |
個人開發者或小團隊用 Claude Code、Codex CLI 寫程式,想跨協定呼叫 DeepSeek/Gemini 並提供 /me 自助看板 |
6. 備份與升級
LiteLLM 的所有模型設定、虛擬金鑰和消費紀錄都保存在 postgresql 服務中:
- 開啟
postgresql服務的 備份與還原(Backup & Restore) 頁,建立資料庫備份並下載留存,還可以開啟排程自動備份。詳見備份與還原文件。 - 務必同時保管好
litellm服務變數裡的LITELLM_SALT_KEY——只有備份的資料庫加上原來的LITELLM_SALT_KEY,還原後才能解開裡面儲存的上游 API Key。 - 升級時先備份 PostgreSQL,再於
litellm服務的 設定 → 來源 中把映像檔標籤(預設v1.109.1)更新到新的穩定版本。
常見問題
為什麼剛部署完造訪 /ui 回報 502?
LiteLLM 啟動時需要連線 PostgreSQL 並執行 Prisma 資料庫遷移,範本設定了 40 秒的啟動健康檢查寬限期(start_period: 40)。等服務狀態變為 Running 後再開啟網頁即可;若啟動異常,可呼出控制台右側的 Zenavo Agent 一鍵診斷日誌。
在 /ui 裡新增模型時提示無法寫入資料庫?
確認 litellm 服務的環境變數中保留了 STORE_MODEL_IN_DB="True",且 postgresql 服務處於 Running 狀態。
虛擬金鑰回報 BudgetExceededError?
代表該虛擬金鑰的累計費用已達到你設定的 Max Budget。可以在 /ui 的 Virtual Keys 頁面調高預算、重設消費額度,或為它設定按月自動重設。
LiteLLM 可以和 New API 一起用嗎?
可以。不少團隊用 New API 管理上游渠道池,再把 LiteLLM 放在應用後端前面做依微服務的預算切分與可觀測性追蹤;兩者放在同一個 Zenavo 專案裡走 .zenavo.internal 內網呼叫即可。
開啟 LiteLLM 範本,幾分鐘就能在自己的伺服器上架好附 PostgreSQL 的模型代理,把散落在各處的 API Key 收攏到受預算保護的虛擬金鑰後面。
這是 coding agent 讀到的內容,網址是 https://zenavo.app/zh-TW/blog/self-host-litellm.md。
無法載入 Markdown,請直接開啟: https://zenavo.app/zh-TW/blog/self-host-litellm.md