BazaarLinkBazaarLink
登入
← 所有文章
發布時間 2026-09-11 · · 作者:BazaarLink · LiteLLM · LiteLLM 教學 · LiteLLM 自架 · AI 閘道 · AI Gateway · LLM Proxy · BYOK · 自帶金鑰 · API 金鑰管理

LiteLLM 教學與自架成本全解:AI 閘道一定要自己跑嗎?想用自己的金鑰,有不用維運 proxy 的做法

LiteLLM 是什麼、怎麼用 Docker 十分鐘架起來、config.yaml 與虛擬金鑰怎麼設,以及自架 AI 閘道真正要付的持續成本。三種情況你應該繼續自架;如果只是想用自己的 API 金鑰走統一入口,BYOK(自帶金鑰)不用你跑伺服器——含它現在做不到的事。

查詢日:2026-09-14(台北時間)。 LiteLLM 的指令與設定格式取自其官方文件當日版本,開源專案更新頻繁,動手前請再對一次官方文件;BazaarLink 的產品行為以我們自己站上的實際設定為準。

會搜到這篇的人,多半在兩種狀態之一:還沒架,想知道 LiteLLM 到底是什麼、值不值得架;或者已經在 docker compose 跟 config.yaml 之間來回幾輪了,開始懷疑這台 proxy 是不是非跑不可。

這篇兩種人都照顧。前半段是一份能直接照做的 LiteLLM 安裝教學,後半段把「自架 AI 閘道」這件事真正的帳算給你看——包括我們自己的方案做不到的那幾格。

LiteLLM 是什麼?一句話講清楚

LiteLLM 是一個開源的 AI 閘道(AI Gateway)/LLM proxy。它自己不賣 token,做的是這件事:

把你自己的 OpenAI、Anthropic、Google 等各家 API 金鑰放進它的設定檔,它對外給出一個 OpenAI 相容的端點。你的程式只認這一個網址,換模型、換供應商都在設定檔裡改,程式碼不動。

順便它還做這幾件事:

  • 虛擬金鑰(Virtual Keys):不把真正的上游金鑰交給每個工程師或每個 agent,而是發一把「虛擬」的金鑰,可以設預算、設速率、隨時撤銷
  • 負載平衡與路由:同一個模型名稱掛好幾條上游,它幫你分流
  • 失敗退回(fallback):一條上游掛了,自動改打另一條
  • 用量與費用紀錄:哪把金鑰花了多少,存進資料庫

這四件事加起來,就是一個「AI 閘道」的核心能力。接下來的問題只有一個:這四件事,你要自己跑,還是讓別人跑? 先教你自己跑,再談這個問題。

LiteLLM 教學:十分鐘用 Docker 架起來

第一步:寫一份最小的 config.yaml

LiteLLM 的核心就是 model_list。每一條寫「對外叫什麼名字」和「實際打哪一家、用哪把金鑰」:

model_list:
  - model_name: gpt-5.6-terra
    litellm_params:
      model: openai/gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY

api_key: os.environ/OPENAI_API_KEY 的意思是從環境變數讀金鑰,不要把金鑰明碼寫進 yaml——這份檔案很容易不小心進版控。

第二步:啟動容器

最簡單的跑法,不接資料庫:

docker run \
  -v $(pwd)/litellm_config.yaml:/app/config.yaml \
  -e OPENAI_API_KEY=<你的 OpenAI 金鑰> \
  -e LITELLM_MASTER_KEY=sk-1234 \
  -p 4000:4000 \
  docker.litellm.ai/berriai/litellm:latest \
  --config /app/config.yaml

跑起來之後,proxy 在 http://localhost:4000。LITELLM_MASTER_KEY 是管理用的主金鑰,上線前一定要換掉 sk-1234 這種範例值。

第三步:把程式指過去

from openai import OpenAI

client = OpenAI(base_url="http://localhost:4000", api_key="sk-1234")
resp = client.chat.completions.create(
    model="gpt-5.6-terra",
    messages=[{"role": "user", "content": "你好"}],
)

model 填的是你在 model_list 裡取的 model_name,不是上游的原始名稱。到這裡就通了。

第四步(多數人會需要):接 Postgres,開虛擬金鑰

上面那個跑法有一個很多教學沒講清楚的限制:沒有資料庫,就沒有虛擬金鑰、沒有預算控制、沒有用量紀錄。 官方文件寫得很直接——沒接資料庫的話,帶虛擬金鑰的請求會直接失敗,花費上限只能回到各家上游自己的後台去設。

所以實務上你會用官方的 compose 檔,一次帶起 proxy 和 Postgres:

curl -sSL https://docs.litellm.ai/docker-compose.yml | docker compose -f - up -d

起來之後打開 http://localhost:4000/ui,在「Virtual Keys」建立金鑰、設預算與速率。這一步做完,你才真的擁有前面說的四件事。

第五步:上線前必做的兩件事

  1. 設定 LITELLM_SALT_KEY。 這是用來加密你存進去的各家上游金鑰的鹽值。官方標為上線前的必要項目——沒設的話,你的上游金鑰在資料庫裡的保護程度就不是你以為的那樣。
  2. 把 LITELLM_MASTER_KEY 換成長隨機值。 誰拿到主金鑰,誰就能開任何虛擬金鑰。

這兩把 key 一設下去,你就正式接下了「保管別人金鑰」的責任。後面會回來談這件事的重量。

進階設定:負載平衡與失敗退回怎麼寫

會搜「litellm 教學」的人,通常卡在這一段。官方文件的語法如下(取自 2026-09-14 版本)。

同一個名字掛多條上游 = 負載平衡

把兩條 model_list 的 model_name 取一樣,LiteLLM 就會在它們之間分流。可以各自設 rpm/tpm 做加權:

model_list:
  - model_name: my-flash
    litellm_params:
      model: openai/gpt-5.6-luna
      api_key: os.environ/OPENAI_API_KEY
      rpm: 60
  - model_name: my-flash
    litellm_params:
      model: gemini/gemini-3.8-flash
      api_key: os.environ/GEMINI_API_KEY
      rpm: 60

分流策略在 router_settings 的 routing_strategy 設,可選 simple-shuffle(預設)、least-busy、usage-based-routing、latency-based-routing。

失敗退回(fallbacks)

litellm_settings:
  fallbacks: [{"my-flash": ["gpt-5.6-terra"]}]
  context_window_fallbacks: [{"my-flash": ["gpt-5.6-terra"]}]

fallbacks 是一般錯誤時退到哪裡;context_window_fallbacks 是專門針對「上下文超長」錯誤的退回——這兩個要分開設,很多人只設第一個,遇到長文件照樣噴錯。

到這裡,一套能用的 LiteLLM 就架完了。

架好之後最常撞到的五個錯誤

這一段是給已經跑起來、但某個地方不通的人。每一條都是設定層的問題,不是 LiteLLM 的 bug。

你看到的多半是什麼怎麼處理
呼叫回 401程式端帶的 api_key 不是 LITELLM_MASTER_KEY,也不是一把有效的虛擬金鑰先用主金鑰打通,再換虛擬金鑰;虛擬金鑰需要資料庫
model not found程式端的 model 填了上游原始名稱(例如 openai/gpt-5.6-terra),但 LiteLLM 只認 model_list 裡的 model_name對外一律用你自己取的 model_name
虛擬金鑰一律失敗,主金鑰正常沒接 Postgres改用官方 compose 檔起 proxy+資料庫
長文件直接噴上下文超長,沒有退回只設了 fallbacks,沒設 context_window_fallbacks兩個都設;後者專門處理上下文錯誤
重啟後上游金鑰讀不到/解不開LITELLM_SALT_KEY 換過,或部署之間不一致鹽值一經設定就要固定並妥善備份,換了等於作廢已存的金鑰

如果這五條都對過還是不通,下一步是看 proxy 的容器 log,不要先懷疑上游——九成問題在你和 LiteLLM 之間,不在 LiteLLM 和上游之間。

接下來講的,是任何教學文都不會列在步驟裡的部分。

什麼情況你應該繼續自架

先講反面,因為這比較重要:下面三種情況,任何託管服務都不該說服你,包括我們。

  1. 請求內容不能離開你的機房。 這是自架最根本、也最無法替代的理由。金融、醫療、政府,或是內部規範寫死「不得經第三方轉送」的團隊,自架是唯一解。託管閘道無論怎麼加密、怎麼保證不留存,請求本身都會經過別人的機器。
  2. 你要改它的行為。 自訂路由邏輯、插自己的中介層、改計費公式、接內部的模型伺服器。開源的價值就在這裡。
  3. 你已經有 DevOps 能量,而且這台 proxy 是既有系統的一部分。 你本來就在跑 service mesh 和 API gateway,多一個容器的邊際成本接近零。

如果你屬於這三種,下面可以不用看了——繼續自架是對的決定,而且上面那份教學就是給你的。

自架真正要付的成本(不是「跑起來」那一次)

把 LiteLLM 跑起來確實不難,上面十分鐘的事。真正的成本在那之後,而且不會出現在任何比較表上。

你接下的東西為什麼它不是免費的
一個在關鍵路徑上的行程它在每一筆請求的路上。它掛,你所有 AI 功能一起掛。一台自架 proxy 沒有備援,半夜掛掉就是你自己起來看。
版本升級模型目錄一直在變。釘在某個版本的 proxy 會安靜地不認識新模型;跟著升級則每次都要重新驗一輪。跟或不跟都要有人決定。
別人的金鑰落地在你這裡你現在是各家上游金鑰的保管人。LITELLM_SALT_KEY 設了嗎?資料庫備份加密了嗎?誰能讀?這些問題從此都是你的。
可觀測性用量紀錄、費用歸戶、告警——LiteLLM 給你資料,報表和告警是你自己接。
重試與速率行為每一家上游的錯誤碼都不一樣。重試寫錯會燒真錢;不重試則使用者看到錯誤。
部署時的長串流一筆串流跑 20 分鐘,中途你 rolling update 了 proxy,那筆連線就斷。要規劃 graceful drain,不然每次部署都在賭。
金鑰輪替每次換上游金鑰都要進設定改一輪、重啟、驗證。

這些事情單獨看都不難。加起來是一個常設的維運職務,而且那個職務不會結束。

另一條路:把金鑰放上來,但不用自己跑

如果你自架的理由只有一個——「我已經有自己的 API 金鑰,想要一個統一入口去管它們」——那你要的是「自帶金鑰」這個能力,不是「自己跑一台伺服器」這件事。這兩件事在 LiteLLM 裡被綁在一起,但它們本來可以分開。

BYOK(Bring Your Own Key,自帶金鑰) 做的就是 LiteLLM 那一層,差別在伺服器不是你的。

你把自己的上游帳號接上來,之後那個供應商的請求就用你自己的金鑰打出去、帳算在你自己的上游帳戶上,平台不對這些請求收費。設定是三步:填名稱與 base URL、系統即時打一次驗證並比對回傳的模型清單、完成。

對照 LiteLLM 的每一項功能

LiteLLM 的能力對應到 BYOK 是什麼
model_list 統一端點自帶的供應商和平台代理的模型混用,同一個 base URL
負載平衡(同名多條上游)同一個模型接了不只一條上游路由,主路由與備援路由分開追蹤健康狀態
fallbacks兩種模式:無縫(你的金鑰失敗時,這一筆自動改走平台路由完成,照平台計費)或嚴格(關掉退回,只走你的帳號)
虛擬金鑰+速率限制每把 API 金鑰可設每分鐘請求數上限
用量紀錄內建,看得到哪些請求走了你的金鑰、有沒有發生重試、失敗代碼是什麼
內容過濾(LiteLLM 要自己接)內建,BYOK 請求也要過——違規請求在碰到你自己的上游帳號之前就被擋下

最後一列值得多講一句。你把自己的 OpenAI 金鑰接進來,團隊裡有人送了一個違規請求——那個請求是用你的帳號打到上游的。自架 LiteLLM 這一層要自己接審核;BYOK 這裡是平台的過濾層先擋。

呼叫方式

curl https://api.bazaarlink.ai/v1/chat/completions \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-terra",
    "messages": [{"role": "user", "content": "hello"}]
  }'

OpenAI 相容,既有 SDK 只改 base URL——跟上面把程式指向 LiteLLM 是同一個動作,差別只是網址。

誠實的對照表

這張表的重點是右邊那欄的「做不到」。 拿掉那幾格,下面的比較就沒有參考價值。

自架 LiteLLMBYOK(託管閘道)
用自己的上游金鑰✅✅
OpenAI 相容統一端點✅✅
多家上游混用✅✅
失敗退回策略自己寫 yaml兩種模式二選一
用量看得到接 Postgres+自己做報表內建
每分鐘請求數上限✅(需資料庫)✅
內容過濾自己接內建,BYOK 也要過
請求不離開你的機房✅❌ 做不到
改原始碼/自訂路由邏輯✅❌ 做不到
用金額上限管控自帶金鑰的花費✅(虛擬金鑰預算)❌ 做不到(見下)
維運責任你我們

⚠️ 一個你應該先知道的限制

自帶金鑰的請求,我們記錄的費用是 0——因為那筆錢是你直接付給你自己的上游,我們沒有經手。

這帶來一個實務後果:你不能用「每月上限 100 美元」這種金額上限去管控自帶金鑰的用量,因為那些請求不會累積到任何金額。已經設定的支出上限仍然會擋住請求(自帶金鑰不會繞過那道閘),但它不會因為你用了自帶金鑰而往上累加。

要限制自帶金鑰的用量,目前能用的是每分鐘請求數上限,以及到你自己上游後台去設該帳號的額度。如果「對每一把虛擬金鑰設定金額預算」是你自架的主要理由,那 BYOK 現在還取代不了 LiteLLM 的虛擬金鑰,這點我們不繞過去講。

另外,自帶金鑰的用量不計入平台的用量回饋——那是給走平台計費的請求的。

那什麼情況下這條路比較划算

把上面兩張表合起來,判斷其實很簡單:

  • 自架的理由是資料落地或要改程式 → 繼續自架,上面的教學拿去用
  • 自架的理由是要用自己的金鑰+一個統一入口 → 這件事不需要你跑伺服器
  • 自架的理由是要按金額卡住每個人的預算 → 目前自架仍然比較合適
  • 自架的理由是「別人都自架」 → 這不是理由。多一個元件就是多一份維運責任,而那份責任不會出現在任何比較表上,它會出現在某個週末

怎麼判斷你的 LiteLLM 已經從工具變成負擔

自架不是錯,沒察覺它已經開始吃人才是。下面五題,中三題以上就值得重新想:

  1. 過去三個月,有沒有哪次 AI 功能的故障,根因是 proxy 本身(掛掉、OOM、升級後行為變了),而不是上游?
  2. 新模型出來的時候,從「上游可用」到「你的團隊能用」中間隔了幾天?那幾天是在等誰?
  3. 團隊裡除了一個人以外,還有誰知道 LITELLM_SALT_KEY 存在哪裡、怎麼輪替?
  4. 上一次有人認真看 proxy 的用量報表是什麼時候?還是資料庫一直在長、沒人看?
  5. 如果明天架 proxy 的那位離職,這台東西還有人敢動嗎?

這五題沒有一題在問 LiteLLM 好不好用。它們在問的是:這台 proxy 現在是你系統的一部分,還是你系統裡的一個單點。

從 LiteLLM 搬到 BYOK 的實際步驟

如果上面那五題讓你決定不再自己跑,這是一條不用停機的搬法。核心原則:先並行,再切換,最後才拆。

第一步:把 model_list 攤開

打開你的 config.yaml,列出每一條 model_list 用的是哪一家上游、哪把金鑰。這份清單就是你要接進 BYOK 的供應商清單——通常比你以為的少,多數團隊實際只用兩三家。

第二步:逐家接進 BYOK

登入後到 /keys/byok,一家一家填:名稱、該供應商的 base URL、你自己的 API 金鑰。系統會即時打一次驗證並比對回傳的模型清單——通了才算接上,不是填完就算。

第三步:決定退回模式

LiteLLM 裡的 fallbacks 在這裡對應成一個開關。你原本的 fallback 是退到另一家你自己的金鑰,那就選嚴格模式並把兩家都接上;如果你原本是「盡量用我的 key,真的不行就算了」,選無縫——你的金鑰失敗時那一筆改走平台路由完成,照平台計費。

第四步:只改一個環境變數

把程式端的 OPENAI_BASE_URL 從 http://localhost:4000 改成 https://api.bazaarlink.ai/v1,OPENAI_API_KEY 換成 BazaarLink 的金鑰。model 的名稱對照一下即可——這一步跟你當初把程式指向 LiteLLM 是同一個動作。

第五步:並行一週,看兩邊的用量紀錄

先不要拆 LiteLLM。 讓一部分流量走新入口,比對兩邊的用量紀錄:哪些請求走了你自己的金鑰、有沒有發生退回、失敗代碼是什麼。確認一週沒有意外,再把剩下的流量切過去,最後才停容器。

搬完之後,第一節那份「自架要付的成本」表格裡的每一列,都不再是你的。唯一留下的是你自己的上游金鑰和它們的帳單——那本來就該是你的。

想先試

接上第一把自己的金鑰大約五分鐘,之後那個供應商的請求就走你自己的帳號。入口在 自帶金鑰(BYOK),登入後到 /keys/byok 設定。

還沒有帳號、只想先確認相容性的話,有免費層可以試:Qwen3.7 Flash 免費、每分鐘 10 次、每天 50 次、不用信用卡——足夠把 base URL 改過來、確認 SDK 能通。

延伸閱讀:AI API 閘道、路由器、中轉站差在哪、工程團隊的 AI 模型統一入口、怎麼判斷 AI API 中轉站靠不靠譜。

FAQ

LiteLLM 是什麼?

LiteLLM 是一個開源的 AI 閘道(LLM proxy)。它不賣 token,而是把你自己的 OpenAI、Anthropic、Google 等各家 API 金鑰集中管理,對外提供一個 OpenAI 相容端點;同時提供虛擬金鑰(可設預算與速率)、多條上游的負載平衡與失敗退回、以及用量紀錄。你的程式只認一個網址,換模型在設定檔改。

LiteLLM 怎麼安裝?最短的路徑是什麼?

寫一份 config.yaml(model_list 列出對外名稱、實際模型與環境變數裡的金鑰),用 docker run 掛載設定檔並設定 LITELLM_MASTER_KEY,開 4000 埠即可,程式把 base_url 指到 http://localhost:4000。若要用虛擬金鑰、預算與用量紀錄,必須接 Postgres,官方提供 docker-compose 一次帶起。上線前務必設定 LITELLM_SALT_KEY 並更換主金鑰。

LiteLLM 沒接資料庫可以用嗎?

可以,但只剩「統一端點」這一項。沒有資料庫就沒有虛擬金鑰(帶虛擬金鑰的請求會失敗)、沒有預算控制、沒有用量紀錄。花費上限只能回到各家上游自己的後台去設。多數團隊實際上都需要接 Postgres。

BYOK 跟自架 LiteLLM 最大的差別是什麼?

做的是同一層事——用你自己的上游金鑰、一個統一入口、失敗退回、用量紀錄——差別在伺服器不是你的。你不用維運 proxy、不用保管金鑰的加密、不用自己接報表。但有三件事 BYOK 做不到:請求不離開你的機房、改原始碼自訂路由、以及用金額上限管控自帶金鑰的花費。

用 BYOK 的話,你們會跟我收多少錢?

自帶金鑰的請求不收平台費用,那筆錢是你直接付給你自己的上游。只有當你的金鑰失敗、且你選的是「無縫」模式時,那一筆請求會改走平台路由完成並照平台一般計費;選「嚴格」模式則不會退回,失敗就是失敗。

我自己的金鑰失敗了會怎樣?

看你選哪種模式。無縫(預設):這一筆請求自動改走平台路由完成,照平台計費,好處是請求不會卡住。嚴格:關掉自動退回,請求只走你自己的帳號,失敗就回錯誤。想確定每一筆都走自己的 key 就選嚴格。

可以像 LiteLLM 的虛擬金鑰那樣,對每個人設金額預算嗎?

對自帶金鑰的用量目前做不到。因為自帶金鑰的請求我們記錄的費用是 0(錢是你付給上游的),金額上限不會累加。已設的支出上限仍會擋住請求,但不會因 BYOK 用量而增加。能用的是每分鐘請求數上限,以及在你自己的上游後台設額度。如果金額預算是你自架的主因,目前自架仍較合適。

自帶的金鑰和你們代購的模型可以混用嗎?

可以。自帶的供應商和平台代理的模型走同一個 base URL、同一把 BazaarLink API 金鑰,程式端看到的是同一個端點。哪些請求走了你自己的金鑰,在用量紀錄裡看得到。

立即體驗 BazaarLink

台幣計費・統一發票・主流 AI 模型・OpenAI 相容 API

免費註冊 / 登入企業採購洽詢
相關文章
Claude Code · Claude Code 更新 · changelog · mods · 權限規則
Claude Code 2.1.289 更新整理:27 項變更、權限規則修補與 mods 穩定性
Claude Code · Claude Code mods · plugin · TypeScript · AI 編程工具
Claude Code 開放 Mods:用 TypeScript 改行為、改介面、換功能
聯網搜尋 · AI agent · LLM · Hermes Agent
Hermes Agent 聯網搜尋:用 BazaarLink 模型加 :online
客服
您好!有什麼可以協助?
請留下訊息,我們會盡快回覆。