到了 2026 年,個人開發者手上往往同時掛著 Cursor、OpenClaw、自建腳本和兩三個 CLI Agent——每個工具都想綁自己的 API Key,每家廠商的 Base URL 還不一樣。真正讓人頭痛的不是「模型夠不夠強」,而是缺少一層統一的 AI Gateway:金鑰散落各處、帳單對不起來、某個 Provider 掛了全家停工。本文給你一條可以照抄的路徑:VPSSpark 雲端 Mac 當控制面與執行面,OpenRouter 做上游模型聚合,LiteLLM 當自架 Gateway 外殼——半小時內搭出帶虛擬金鑰、預算熔斷和模型回退的「個人企業級」入口。
http://127.0.0.1:4000,對內路由到 OpenRouter;OpenClaw / Cursor / 腳本全部改指向本機 Gateway,主金鑰永遠不進客戶端。
圖 1 · Cloud Mac + OpenRouter 個人 AI Gateway 三層架構
為什麼選「雲端 Mac + OpenRouter」,而不是只買 OpenRouter?
OpenRouter 本身是託管型 Gateway:註冊就有 Key,官方文件寫明其 API 與 OpenAI Chat Completions 高度相容,適合快速接入。但它解決的是上游聚合,不是你的治理邊界:你沒辦法給 Cursor 和 OpenClaw 各發一把可獨立吊銷的 Key;也很難在 Provider 帳單之外再做團隊級 spend cap;更別說把 Gateway 跟 macOS 原生工具鏈(Xcode、AppleScript、本機 MCP)放在同一執行面。
雲端 Mac 的價值在於「控制面跟 Apple 生態執行面合一」。Gateway 行程用 launchd 常駐,金鑰只存在伺服器 .env;要跑 OpenClaw、調本機 Git、觸發 iOS 建置時,不必再把上下文搬回筆電。若你已在 Linux VPS 跑閘道,可以把 VPS 專做 IM/Webhook 入口,雲端 Mac 專做 Gateway + 建置——分工可參考 Linux VPS 上 OpenClaw 閘道與 CI/CD 決策矩陣;雲端 Mac 側 launchd 常駐差異見 雲端 Mac OpenClaw 部署與 launchd FAQ。
架構選型:三層各自幹什麼
先把職責劃清楚,後面設定才不會打結。
| 層級 | 元件 | 職責 | 不做什麼 |
|---|---|---|---|
| 上游 | OpenRouter | 多模型統一計費、Provider 回退、按 token 付費 | 不取代你的金鑰治理與內網隔離 |
| Gateway | LiteLLM Proxy(雲端 Mac) | 虛擬 Key、路由表、日誌、預算、OpenAI 相容出口 | 不長期託管聊天工作階段(交給 OpenClaw) |
| 執行 | 雲端 Mac + OpenClaw | 7×24 Agent、MCP、macOS 自動化、CI 觸發 | 不把主 API Key 下發到筆電 |
.env,客戶端永遠拿 Virtual Key。
開工前清單(15 分鐘自檢)
按順序打勾,能避開後面九成「連不上」類問題。
- 已開通 OpenRouter 帳號,建立 API Key 並設定月度 credit 上限。
- 雲端 Mac 可 SSH 登入,架構為
arm64(Apple Silicon),系統 macOS 14+。 - 已裝 Homebrew;Python 3.11+ 或 Docker Desktop(二選一,本文用 pip 路徑,最輕)。
- Gateway 只監聽
127.0.0.1:4000;若遠端呼叫,先接 Tailscale / SSH 隧道,別直接把 4000 暴露到公網。 - 筆電側 Cursor / OpenClaw 已能 SSH 到雲端 Mac(金鑰登入,停用密碼)。
雲端 Mac 基礎概念與選購可參考 Mac VPS 與雲端 macOS 選購指南(2026)。
第一步:設定 OpenRouter 上游
登入 OpenRouter 控制台,建立一把命名為 cloud-mac-gateway 的 Key,建議勾選 credit limit(例如 $20/月)當硬熔斷。記下 Key 後馬上寫入雲端 Mac,別進 Git。
用 curl 在雲端 Mac 上驗證上游可達(替換 $OPENROUTER_API_KEY):
export OPENROUTER_API_KEY="sk-or-v1-xxxxxxxx"
curl -s https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "ping"}]
}' | head -c 400
回傳 JSON 且含 choices 就表示上游 OK。模型 ID 格式為 provider/model,完整列表見 OpenRouter Models 頁;常用寫法如 anthropic/claude-sonnet-4、openai/gpt-4o、google/gemini-2.5-pro-preview。
第二步:在雲端 Mac 安裝 LiteLLM Gateway
LiteLLM 是開源 LLM Gateway,文件入口在 docs.litellm.ai。它把 OpenRouter 包成你自己的 OpenAI 相容端點,並支援虛擬金鑰與 spend tracking。
# 云 Mac SSH 会话内
brew install python@3.12
python3.12 -m venv ~/ai-gateway/.venv
source ~/ai-gateway/.venv/bin/activate
pip install 'litellm[proxy]'
mkdir -p ~/ai-gateway && cd ~/ai-gateway
建立 config.yaml——這是 Gateway 的路由心臟。下面範例把預設模型設為 Claude Sonnet,失敗時回退到 GPT-4o mini(OpenRouter 的 models 陣列觸發回退):
model_list:
- model_name: smart
litellm_params:
model: openrouter/anthropic/claude-sonnet-4
api_key: os.environ/OPENROUTER_API_KEY
models:
- openrouter/anthropic/claude-sonnet-4
- openrouter/openai/gpt-4o-mini
- model_name: fast
litellm_params:
model: openrouter/openai/gpt-4o-mini
api_key: os.environ/OPENROUTER_API_KEY
litellm_settings:
drop_params: true
set_verbose: false
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: "sqlite:///./litellm.db"
同目錄建立 .env(權限 chmod 600):
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxx
LITELLM_MASTER_KEY=sk-local-master-xxxxxxxx
啟動 Proxy(先前景試跑):
cd ~/ai-gateway
source .venv/bin/activate
set -a && source .env && set +a
litellm --config config.yaml --host 127.0.0.1 --port 4000
另開終端機,用 Master Key 做迴圈測試:
curl -s http://127.0.0.1:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "smart",
"messages": [{"role": "user", "content": "gateway ok?"}]
}'
litellm --config config.yaml --detailed_debug 啟動後造訪文件中的 /ui 路徑)為 Cursor、OpenClaw 各建一把 Virtual Key,分別設 $5/$10 月預算。這樣某個客戶端外洩時,只吊銷對應 Virtual Key,不動 OpenRouter 主 Key。
第三步:launchd 常駐(雲端 Mac 7×24)
驗證通過後,把 Gateway 交給 launchd,避免 SSH 斷線就停。建立 ~/Library/LaunchAgents/com.vpsspark.litellm.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.vpsspark.litellm</string>
<key>ProgramArguments</key>
<array>
<string>/Users/YOUR_USER/ai-gateway/.venv/bin/litellm</string>
<string>--config</string>
<string>/Users/YOUR_USER/ai-gateway/config.yaml</string>
<string>--host</string><string>127.0.0.1</string>
<string>--port</string><string>4000</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OPENROUTER_API_KEY</key><string>sk-or-v1-xxx</string>
<key>LITELLM_MASTER_KEY</key><string>sk-local-master-xxx</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key>
<string>/Users/YOUR_USER/ai-gateway/litellm.log</string>
<key>StandardErrorPath</key>
<string>/Users/YOUR_USER/ai-gateway/litellm.err</string>
</dict>
</plist>
載入並檢查:
launchctl load ~/Library/LaunchAgents/com.vpsspark.litellm.plist
launchctl list | grep litellm
curl -fsS http://127.0.0.1:4000/health || echo "check logs"
更完整的雲端 Mac 常駐與排障步驟,建議對照 launchd 環境驗證 FAQ 裡的「登入工作階段 vs 背景常駐」章節——Gateway 與 OpenClaw 可以各用獨立 plist,互不影響重啟。
第四步:接入 Cursor、OpenClaw 與腳本
所有客戶端統一改兩處:Base URL 指向你的 Gateway,API Key 用 Virtual Key(或 Master Key 僅用於管理)。
Cursor:Settings → Models → Override OpenAI Base URL → http://127.0.0.1:4000/v1(若 Cursor 跑在筆電、Gateway 在雲端 Mac,先用 ssh -L 4000:127.0.0.1:4000 user@cloud-mac 做本機轉發,或 Tailscale 內網位址)。模型名填 smart / fast,與 config.yaml 的 model_name 一致。
OpenClaw:在 Gateway 設定文件 指定的環境變數或設定檔中,把 LLM Provider 設為 OpenAI 相容,OPENAI_API_BASE=http://127.0.0.1:4000/v1,OPENAI_API_KEY=<virtual-key>。OpenClaw 跑在雲端 Mac 本機時無需隧道;跑在 Linux VPS 時,要嘛把 LiteLLM 遷到 VPS,要嘛用內網穿透——別把 Master Key 寫進 VPS 的公開 compose 儲存庫。
通用腳本:任何支援 OpenAI SDK 的程式只需改 base_url:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:4000/v1",
api_key="sk-virtual-cursor-xxxxxxxx",
)
resp = client.chat.completions.create(
model="smart",
messages=[{"role": "user", "content": "总结今日 commit"}],
)
print(resp.choices[0].message.content)
模型路由與成本控制
企業級 Gateway 的核心不是「能調模型」,而是「知道什麼時候該用貴模型」。建議在個人堆疊裡固定三條路由策略:
- 預設走 fast:程式碼補全、格式化、簡單問答用
gpt-4o-mini級模型,成本通常是 Sonnet 的 1/10 量級。 - 明確升級 smart:架構設計、複雜重構、多檔案推理時,客戶端或 OpenClaw 路由規則切換到
smart(帶 OpenRouter fallback 鏈)。 - 雙層預算:OpenRouter 控制台設總 credit cap;LiteLLM Virtual Key 設 per-client cap——兩層同時觸發才真正「斷電」。
OpenRouter 支援在請求裡傳 models 陣列做 Provider 級回退;LiteLLM 的 model_list 則可把「業務別名」(smart/fast)與真實模型 ID 解耦,日後換模型只改 YAML,客戶端零改動。
安全基線(必做,不是可選項)
個人 Gateway 最常見事故是金鑰進 Git 或 Gateway 裸奔公網。最低限度遵守下面五條:
.env、plist 裡的金鑰不進版本庫;.gitignore寫死.env、*.db、litellm.log。- LiteLLM 只綁
127.0.0.1;遠端存取走 SSH -L 或 Tailscale,前面再加 Nginx + mTLS 若有多人共用。 - OpenRouter Key 外洩時,控制台立刻 Rotate;OpenRouter 已與 GitHub Secret Scanning 合作,但仍以主動輪換為準。
- 定期
sqlite3 litellm.db匯出 spend 日誌,對照 OpenRouter Dashboard,發現異常流量立刻吊銷 Virtual Key。 - 雲端 Mac 開啟 FileVault,SSH 僅金鑰登入;與 Linux 閘道交付 一樣,把「變更」和「金鑰」分開稽核。
FAQ
能不能跳過 LiteLLM,客戶端直連 OpenRouter?可以,適合單人極簡場景。但你失去虛擬金鑰、統一日誌和本機路由別名;客戶端一多,遲早還要補 Gateway 層。
Gateway 放雲端 Mac 還是 Linux VPS?只有 LLM 轉發、沒有 macOS 工具需求時,VPS 更省;只要涉及 OpenClaw + MCP + Xcode 自動化,雲端 Mac 一台搞定執行面 + Gateway 更省心。
OpenRouter 掛了怎麼辦?在 LiteLLM model_list 裡加第二上游(例如直連 Anthropic Key 當 emergency route),或暫時把 fast 指到 OpenRouter 標註的 free tier 模型做降級。
延遲會變高嗎?多一跳 Proxy 通常增加個位數毫秒到幾十毫秒;相對 LLM 推理時間可忽略。瓶頸更多在模型選擇與區域路由,而非 LiteLLM 本身。
在雲端 Mac mini 上,Gateway 與 Agent 同機更順
個人 AI Gateway 最怕「控制面在筆電、執行面在雲上、金鑰在聊天紀錄裡」——三台機器三個真相來源。把 LiteLLM Gateway 與 OpenClaw 一起放在 VPSSpark 雲端 Mac mini M4 上,Apple Silicon 統一記憶體讓並行 Agent + 輕量 Proxy 更從容;macOS 原生 Unix 環境讓 Homebrew、Python venv、launchd 常駐與本機 MCP 工具鏈開箱即用,不必在 Linux 上複刻一套 macOS 能力。
M 系列 Mac mini 待機功耗常在個位數瓦,適合 7×24 跑 Gateway 而不心疼電費;Gatekeeper、SIP、FileVault 疊加的安全機制,也讓長期託管 API 金鑰的風險面小於一般 Windows 工作站。與其在筆電休眠後 Agent 斷線,不如把「模型入口 + 執行面」收斂到一台穩定的雲端 Mac。
如果你正在搭 OpenRouter 驅動的個人 AI Gateway,VPSSpark 雲端 Mac mini M4 是一站式的控制面起點——立即了解方案,讓金鑰、路由與 Agent 終於住在同一間「機房」。