在租用遠端 Mac上跑多組 OpenClaw 技能包,等於共享算力與供應商額度:單專案尖峰可餓死他人或一夜燒穿帳單。應對是閘道優先預算層:多租戶計數、熔斷與降級階梯、稽核日誌。前置可對照Docker 部署與加固、Ollama 路由、沙箱與出站白名單;本文聚焦支出、令牌邊界與故障隔離。
① 預算模型與計數維度
維度必須能在日誌中穩定歸因。租賃主機上,歸因就是對內「分帳發票」,也是對外解釋供應商帳單突增的依據。
- 租戶/成本中心 — 固定 id(例如 tenant=acme),由 CI 或閘道工作階段帶入;每一筆計數事件都應帶上。
- 專案或技能包 — 依儲存庫或封裝技能 bundle 分開計數(project=mobile-ci、pack=release-notes),避免 A 包吃光 B 包配額。
- 上游介面 — 對「對話完成」「向量嵌入」「網搜工具」「本機 loopback 模型」分桶;降級時可只掐貴的一路,而不關掉便宜步驟。
- 時間窗 — 突發窗(每分鐘或每 10 秒)搭配預算窗(每小時/每日)。突發控連線與熱度;日預算護財務紅線。
- 計數單位 — 每條路由選一種主單位:對供應商的 HTTP 次數、OpenClaw 記錄的工具呼叫、回應標頭估算美元,或供應商 token(提示+完成)。若同時要「次數+token」,用相同標籤維護兩條序列,勿混在同一計數器。
閘道 vs 技能:限額在代理/閘道/sidecar;技能用短效最小權限憑證。多 worker 用 Redis;單機實驗可暫用記憶體限流。
② 設定檔/環境變數範本
範本與 compose/launchd 同庫;密鑰勿進 git。變數名示意,請對應 Envoy、nginx+lua、Caddy 或 Go sidecar。
.env.budget.example(對外分享前記得脫敏):
# 計數後端
BUDGET_REDIS_URL=redis://127.0.0.1:6379/0
BUDGET_KEY_PREFIX=oc:gw:2026
# 客戶端未帶專案標頭時的預設
BUDGET_DEFAULT_TENANT=shared-lab
BUDGET_DEFAULT_PROJECT=misc
# 租戶/專案每日上限(美元估算,來自標頭或內部費率表)
BUDGET_TENANT_DAILY_USD_MAX=200
BUDGET_PROJECT_DAILY_USD_MAX=50
# 突發:每 (租戶, 專案) 每分鐘請求數
BUDGET_RPM_BURST=60
# 熔斷:錯誤率視窗
FUSE_WINDOW_SEC=60
FUSE_ERROR_RATIO_OPEN=0.5
FUSE_COOLDOWN_SEC=120
# 稽核
BUDGET_LOG_SAMPLE_RATE=1.0
BUDGET_LOG_REDACT_HEADERS=Authorization,X-Api-Key
最小權限令牌:供應商每租戶/每 CI 庫獨立金鑰,閘道映射 metadata 自動掛標。OpenClaw 埠(如 18789)的閘道 token僅傳輸鑑別,勿與廠商金鑰或帳單 LLM token 混淆;手冊分三欄:閘道鑑別、廠商金鑰、支出計量。
內部約定 X-Tenant-Id、X-Project-Id;正式環境缺標即拒,利於稽核。
③ 熔斷與降級策略表
熔斷在系統不健康或不經濟時開路;降級是開路期間的行為。若事先沒有表,值班人員只能在警報噪音下即興決策。
| 條件(熔斷觸發) | 偵測方式 | 降級行為 | 稽核日誌建議欄位 |
|---|---|---|---|
| 專案日美元 > 上限 | 依 usage 標頭或費率表滾動加總 | HTTP 429 + Retry-After;可選非同步重放佇列 | tenant、project、window、spent、cap |
| 突發 RPM 超標 | 每鍵滑動計數 | 卸載:先砍低優先路由(例如可選摘要) | route_class、rpm、limit |
| 上游 5xx/逾時連續 | FUSE_WINDOW_SEC 內錯誤比 | 開路:短路至快取答覆、本機模型或靜態「降級模式」回應 | error_ratio、upstream、fuse_state |
| 租戶總帽(跨多專案) | 同 tenant 下專案加總 | 該租戶硬停;其他租戶不受影響 | tenant_spend、projects_included |
| Mac 本機磁碟/佇列壓力 | 本機指標(scratch 卷、launchd 深度) | 降並發;暫停非 CI 流量等級 | host、metric、action |
熔斷關閉後以半開探針再放行全量;狀態轉移皆記錄。租賃機勿假設本機長歷史。
④ 與 CI 呼叫頻率協同
CI 是典型的預算殺手:多工作流 × 矩陣建置 ×「每次 push 都叫代理」會在同一整點對齊,集體打穿突發上限。
- CI 專用金鑰 — 將廠商金鑰(或閘道子金鑰)映射為 tenant=ci 與每儲存庫 project;若任務突發強,每日美元可壓得比互動開發更低。
- 抖動與錯開 — 避免代理掛鉤一律 cron 0 * * * *;用隨機偏移或 workflow 並發群組,讓租賃主機看到的到達率較平滑。
- 幕等 — 經閘道傳遞穩定 Idempotency-Key(或 commit SHA),429 重試時避免廠商已接受首請求卻被帳務重算三次。
- 重負載分節點 — 行動釋出建置與 LLM 批次若共用一台 Mac,宜拆兩台租賃或分時段;預算層能緩衝,但 CPU 與上行才是終極熔斷。
CI YAML 設 concurrency 與昂貴路徑手動觸發;閘道硬頂、CI 軟目標,減少警報噪音。
⑤ 常見超限 FAQ
問:計數看似正確,廠商帳單仍暴衝?
查是否有繞過閘道的流量(本機腳本直連 API、同主機另一容器、或筆電共用同一廠商組織)。輪替金鑰並強制生產支出走已計數路徑。
問:僅單一專案 429,其餘空閒?
若啟用每專案上限,屬預期。走工單調高上限,或為該 workload 發獨立專案金鑰與獨立計數序列。
問:嵌入與對話要同一桶嗎?
只有當您刻意讓兩者競爭時才合併。多數團隊分桶,避免檢索型批次在事故時擠掉對話支援。
問:合規向稽核行要寫什麼?
UTC 時間戳、tenant/project、路由或工具名、決策(allow/deny_budget/fuse_open)、估算成本或 token 增量、與 OpenClaw 工具日誌共用的關聯 id。脫敏密鑰;附政策版本 id。
問:Redis 掛了怎麼辦?
明定 fail-closed 或 fail-open;營業時段租賃機多選 closed 並告警。