前言¶
在 DeepSeek Harness(DSH)裏走 OpenCode Go 訂閱時,常見做法是隻配一個 OPENCODE_API_KEY,額度用盡後整段會話都切到 DeepSeek 賬戶餘額。OpenCode 對每種模型單獨計量 5 小時、周、月窗口;某一型號(例如 DeepSeek V4 Pro)打滿後,不應把同計劃裏仍有額度的 DeepSeek V4.1 Flash 一併拖回賬戶扣費。多賬號場景下,一個賬號窗口耗盡也不應讓仍有 allowance 的賬號無法繼續服務。
下面介紹的 dsh-opencode-quota-router 是維護者 2869949486 發佈的 DSH 插件(分類:模型推理),在 agent/request 與 agent/request-error 瀑布流裏做路由:優先消耗當前活躍賬戶的 OpenCode Go 額度,按賬戶池順序 failover,並在單模型耗盡時只讓該模型回退到 DeepSeek 賬戶。
這是什麼¶
插件全名 dsh-opencode-quota-router,倉庫:https://github.com/2869949486/dsh-opencode-quota-router。社區目錄頁:https://www.skillhub.cn/plugins/2869949486/dsh-opencode-quota-router。
一句話定位:在多個 OpenCode Go 賬戶之間按配額自動切換,並對每個模型單獨決定是否回退到 DeepSeek 賬戶(DeepSeek account fallback),而不是一耗盡就全局切賬戶。
核心功能¶
路由優先級與賬戶池¶
- 每條被路由的請求優先走當前活躍賬戶上的 OpenCode Go 路線(
opencode-go)。 - 賬戶按配置順序嘗試。當活躍賬戶的 5 小時、周或月窗口用盡(或密鑰無法通過認證),路由器會將該賬戶暫掛至窗口重置,切換到下一個已啓用賬戶,並在同一 turn 內重試失敗步驟。
- 僅當所有賬戶都不可用時,才進入計劃級回退(plan-wide fallback),所有主路線模型統一走 DeepSeek 賬戶。
按模型隔離¶
OpenCode 對每個模型獨立計量(5 小時約爲月限的 20%,周約爲 50%,月爲 100%)。當只有某一個模型報告耗盡而計劃仍有空間時,僅該模型回退到 DeepSeek 賬戶對應模型;其餘模型繼續使用 OpenCode Go。
默認主路線與回退對應關係如下:
| Primary(OpenCode Go) | Fallback(DeepSeek 賬戶) |
|---|---|
opencode-go/deepseek-v4.1-flash |
deepseek-account/deepseek-flash |
opencode-go/deepseek-v4-pro |
deepseek-account/deepseek-v4-pro |
插件 bundle 還聲明 opencode-go 目錄路線(按線上 endpoint 裁剪)以及 opencode-free(含 beam-free、iceman-contributor-free 等免費模型)。
探測與無會話重載¶
賬戶被暫掛或處於回退期間,插件會以零 token 的 GET /inference/go/v1/usage 探測(默認每 30 分鐘,或在滾動窗口重置時),額度恢復後自動回到主路線。切換髮生在步驟邊界,不中斷進行中的流式請求與其他 agent。
密鑰如何生效¶
pi-ai 按 apiKeyEnv(默認 OPENCODE_API_KEY)在每次 stream 調用前解析一次憑證,沒有 per-request 覆蓋。路由器把各賬戶密鑰存在憑證庫 OPENCODE_API_KEY_<ID> 下,在 agent/request 改寫之後、resolveApiKey 之前,把活躍賬戶密鑰鏡像寫入 OPENCODE_API_KEY,無需改 DSH 核心。
兩個監聽器以 prepend: true 註冊,避免後掛載的 observer 覆蓋改寫結果。
賬戶管理與設置頁¶
賬戶 UI 在 sibling 插件 dsh-opencode-usage-settings 中:Settings → OpenCode 賬戶與用量 → 賬戶。狀態行(正常 / 全量回退 及原因、當前賬戶、下次探測、立即探測 / 清空隔離)與賬戶表(掩碼密鑰、官方 5 小時 / 周 / 月百分比、排序與啓停等)在同一頁,避免兩個 Settings 區塊維護同一賬戶池。
本插件擁有賬戶池,對外提供:
GET /opencode-quota-router.json:快照(賬戶、掩碼提示、狀態、用量、隔離)。POST /opencode-quota-router.json:{ action: add|update|remove|activate|move|probe|reset, ... }。
密鑰寫入憑證庫,響應中不回顯明文(僅類似 oc_sk_5…_cGU 的掩碼)。
安裝與啓用¶
在目標 profile 下執行官方安裝命令:
dsh plugin --profile <profile> add dsh-opencode-quota-router
安裝後在上述 Settings 頁添加賬戶。若環境中已有 OPENCODE_API_KEY,首次啓動會自動採納爲第一個賬戶(OPENCODE_API_KEY_A1),從舊版單密鑰升級無需重新錄入。
插件聲明依賴 DSH ^0.2.0-rc.1(見倉庫 package.json,當前版本 1.2.1),許可證 MIT。
配置¶
bundle patch 帶默認值;可在 profile patch 中覆蓋 opencode-quota-router 行:
- id: opencode-quota-router
config:
usageUrl: https://opencode.ai/inference/go/v1/usage
apiKeyRef: OPENCODE_API_KEY
path: /opencode-quota-router
probeIntervalMs: 1800000
modelQuarantineMs: 1800000
authCooldownMs: 1800000
routes:
- primary: { provider: opencode-go, model: deepseek-v4.1-flash }
fallback: { provider: deepseek-account, model: deepseek-flash }
可選字段包括:minProbeDelayMs、unconfirmedDelayMs、modelQuarantineMs、authCooldownMs、statePath。
狀態文件¶
運行時狀態位於 $DSH_HOME/opencode-quota-router.json,例如:
{
"version": 3,
"mode": "primary",
"active": "a1",
"accounts": [
{ "id": "a1", "label": "主賬號", "keyRef": "OPENCODE_API_KEY_A1", "enabled": true, "exhaustedUntil": 0, "usage": {} }
],
"quarantine": {},
"updatedAt": 0
}
mode: "fallback"表示無賬戶可用,所有主路線模型走回退。quarantine記錄單模型耗盡,僅該模型回退直至until。accounts[].exhaustedUntil爲賬戶窗口重置時刻,0表示可用。
下一步之前會讀取該文件,也可手動編輯作覆蓋(README 給出了 mode: "fallback" 等示例)。
典型用法與自測¶
日常用法:安裝插件 → 在 OpenCode 賬戶與用量 添加多個賬戶並調整順序 → 正常在 DSH 裏選用已聲明的 OpenCode Go 模型;路由器在步驟邊界自動切換賬戶或單模型回退。
倉庫內可用 Node 跑集成測試:
node test.mjs
測試覆蓋雙向路由、按模型隔離、隔離過期、賬戶 failover 與密鑰鏡像、Settings API、計劃級回退,以及「瞬時 rate limit 不進入隔離」等規則(假 Cordis 上下文、假憑證庫、本地 usage endpoint)。
適用場景與注意¶
適合:持有多個 OpenCode Go 訂閱、希望在 DSH 智能體開發中儘量先消耗計劃額度、且希望 V4 Pro 與 V4.1 Flash 等模型配額互不影響的用戶。
注意:
- DSH 生態是「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。安裝前請自行閱讀倉庫源碼與 MIT 許可證,插件以當前
dsh進程權限運行,會讀寫憑證庫與$DSH_HOME狀態。 - 完整賬戶管理 UI 依賴 dsh-opencode-usage-settings,僅裝本插件時需通過
GET|POST /opencode-quota-router.json或編輯狀態文件維護池子。 - 配置與行爲以 README 與
cordis.patch.yml爲準;勿假設未在文檔出現的 CLI 或安裝路徑。
結尾¶
dsh-opencode-quota-router 把 OpenCode Go 的多賬戶順序 failover、按模型 DeepSeek 回退和定時 usage 探測收進 DSH 插件,並與 OpenCode 用量設置頁共用同一賬戶池。需要細節時可直接查閱 GitHub 倉庫 與 SkillHub 目錄頁。