dsh-opencode-quota-router:多賬戶 OpenCode Go 配額路由與按模型回退

前言

在 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),而不是一耗盡就全局切賬戶。

核心功能

路由優先級與賬戶池

  1. 每條被路由的請求優先走當前活躍賬戶上的 OpenCode Go 路線(opencode-go)。
  2. 賬戶按配置順序嘗試。當活躍賬戶的 5 小時、周或月窗口用盡(或密鑰無法通過認證),路由器會將該賬戶暫掛至窗口重置,切換到下一個已啓用賬戶,並在同一 turn 內重試失敗步驟。
  3. 僅當所有賬戶都不可用時,才進入計劃級回退(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 等模型配額互不影響的用戶。

注意:

  1. DSH 生態是「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。安裝前請自行閱讀倉庫源碼與 MIT 許可證,插件以當前 dsh 進程權限運行,會讀寫憑證庫與 $DSH_HOME 狀態。
  2. 完整賬戶管理 UI 依賴 dsh-opencode-usage-settings,僅裝本插件時需通過 GET|POST /opencode-quota-router.json 或編輯狀態文件維護池子。
  3. 配置與行爲以 README 與 cordis.patch.yml 爲準;勿假設未在文檔出現的 CLI 或安裝路徑。

結尾

dsh-opencode-quota-router 把 OpenCode Go 的多賬戶順序 failover、按模型 DeepSeek 回退和定時 usage 探測收進 DSH 插件,並與 OpenCode 用量設置頁共用同一賬戶池。需要細節時可直接查閱 GitHub 倉庫 與 SkillHub 目錄頁。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜