dsh-opencode-routing:OpenCode 賬戶池、配額路由與用量看板合一

前言

在 DeepSeek Harness(DSH)裏走 OpenCode Go 等推理 provider 時,常見問題是:單個 API Key 額度用盡或鑑權失敗後,對話要手動換號;官方 /inference/go/v1/usage 只給賬戶級滾動/周/月百分比,不按模型拆分,而套餐本身對每個模型單獨計量。若再拆成「路由插件」和「用量插件」兩個包,Settings 裏也要維護兩處。下面介紹社區插件 dsh-opencode-routing(維護者 2869949486,GitHub:2869949486/dsh-opencode-routing),它把原先的 dsh-opencode-quota-router 與 dsh-opencode-usage-settings 合併爲一個 npm 包,在單一 Settings 頁「OpenCode 賬戶與用量」裏同時管理賬戶池、自動 failover、配額路由,以及按賬戶/按模型的用量展示。

這是什麼

dsh-opencode-routing 是 DSH 的模型推理類插件:OpenCode 多賬戶池、A→B 自動切換、配額路由,外加 per-account / per-model 用量看板,全部集中在一個 Settings 區塊。客戶端側是一個 settings.section,默認每 60 秒刷新;服務端暴露兩個 HTTP 端點:GET /opencode-usage.json(用量,?refresh=1 強制刷新)和 GET|POST /opencode-quota-router.json(賬戶池與路由)。插件自帶 cordis.patch.yml,聲明 opencode-go / opencode-free provider,並插入單一配置項 id: opencode-router。

賬戶池與自動 failover

賬戶池順序即使用順序;任意時刻只有一個「當前」賬戶,其密鑰會寫入 provider 讀取的憑證引用(默認 OPENCODE_API_KEY)。切換賬戶無需改 provider 配置:resolveApiKey 在 agent/request 鉤子之後、每次流式調用時執行。

  1. A 用盡、B 接管:在官方額度確認耗盡後遇到 QUOTA / ACCOUNT_QUOTA / 429,或遇到鑑權類錯誤(AUTH、INVALID_CREDENTIAL、MISSING_CREDENTIAL、ACCOUNT_SIGN_IN_REQUIRED、CLIENT_UPGRADE_REQUIRED)時,當前賬戶會被標記不可用(額度窗口重置前,或鑑權失敗默認 30 分鐘),路由切到下一個啓用賬戶並重試同一步,不會降級整輪對話。
  2. 單模型隔離:若僅某一個模型超 allowance 而池內仍有預算,默認只隔離該模型 30 分鐘,其它模型繼續走套餐。
  3. 整池用盡:才走路由裏配置的 fallback(示例默認爲 DeepSeek 賬戶);每 30 分鐘(或滾動窗口重置時)用零 token 的 GET /inference/go/v1/usage 探測,滿足條件後自動回到 OpenCode 套餐。
  4. 重置:Settings 中「重置封禁標記」會清除所有用盡/鑑權標記並立即回到賬戶池,不改動賬戶與密鑰本身。

用量看板

官方 usage 接口只返回四捨五入的 rolling / weekly / monthly 百分比,沒有按模型拆分;而 Go 套餐對每個模型單獨計量(5 小時約等於月 allowance 的 20%,周 50%,月 100%)。頁面因此呈現兩套數字:

  • 官方百分比:每個賬戶一行,直接來自 API,包含其它客戶端與其它機器上的真實用量。
  • 按模型金額:本地估算。掃描 $DSH_HOME/sessions 最近 40 天,只統計 provider 以 opencode 開頭的 assistant/message 事件,按公開價目(含 DeepSeek 峯時 2×)計價;其它工具產生的用量沒有本地記錄。

「查看用量」打開單賬戶對話框,展示三個窗口、重置時間與探測結果(只探測該賬戶,不切換模型)。峯時卡片並排展示官方 API 與 OpenCode 兩套日曆、當前時段及距切換的小時數(一位小數)。模型卡片有能力標籤與 tooltip;頁頭鏈到 OpenCode Console 訂閱頁。每個價格單元格展示 cached-input、uncached-input、output 三行,便於對比緩存命中(綠色行)與官方 API 同 token 計費。

DeepSeek 非峯時爲北京時間工作日 09:00–12:00、14:00–18:00 之外(含午休、夜間、週末及法定假日)半價;OpenCode 僅按 UTC 工作日 01–04、06–10 計峯,不遵循中國法定假日(維護者說明:Go 定價按 OpenCode 自身日程)。插件內置 2026–2031 中國法定假日表,僅在 usage.holidayAware: true 時用於官方側估算,默認關閉。訂閱價與 allowance 可用 usage.planPriceUsd / usage.planAllowanceUsd 覆蓋。

UI 文案在 client.js 的 DICT 中,支持 zh、zh-tw、en 及 es / fr / de / pt / ja / ko / ru 等,瀏覽器語言優先。

安裝與啓用

在 DSH 環境中安裝 npm 包(README 給出的命令如下,勿自行拼接 dsh plugin add github:...):

npm i dsh-opencode-routing

包內 cordis.patch.yml 示例片段如下。頂層鍵(如 usageUrl、apiKeyRef、probeIntervalMs)對兩半配置共用;usage: 與 router: 子對象各自有 path,不能共用一個扁平命名空間:

- insert:
    - id: opencode-router
      name: 'dsh-opencode-routing'
      config:
        usageUrl: https://opencode.ai/inference/go/v1/usage
        apiKeyRef: OPENCODE_API_KEY
        usage:
          path: /opencode-usage
          plan: go
        router:
          path: /opencode-quota-router
          routes:
            - primary: { provider: opencode-go, model: deepseek-v4.1-flash }
              fallback: { provider: deepseek-account, model: deepseek-flash }

package.json 聲明引擎要求 dsh: ^0.2.0-rc.1,許可證爲 MIT。

Settings API 與典型操作

通過 HTTP 可在不打開 UI 的情況下管理池子(路徑由配置中的 usage.path / router.path 決定,默認示例如上)。

GET /opencode-quota-router.json 返回 {mode, reason, active, accounts[], quarantine[], routes[], lastFailure},賬戶密鑰始終以 hint 掩碼展示。POST 同一路徑,body 爲 {action, ...}:

action 參數 效果
add label?, key 創建賬戶(key ≥ 8 字符),存儲並探測
update id, label? / enabled? / key? 重命名、啓停、輪換密鑰
remove id 刪除賬戶及密鑰(至少保留一個)
activate id 立即切換到該賬戶
move id, direction: up\|down 調整順序
probe id? 探測全部或單個賬戶
reset — 清除用盡/鑑權標記並回到池內

GET /opencode-usage.json 返回 {plan, configuredPlan, detectedPlan, holidayAware, peak, usage, accounts[], activeAccount, models[], totals};加 ?refresh=1 會先拉取最新官方快照。

Settings 裏可增刪改賬戶、拖拽排序、探測連通性;「編輯密鑰」通過 GET /opencode-quota-router.json?key=<account id> 預填當前密鑰(僅本地端點)。打開頁面只讀快照,不會自動觸發探測;「下次探測」默認可視化爲 30 分鐘倒計時。

適用場景與注意

適合:長期用 DSH 調用 OpenCode Go(或多賬戶輪換)、需要在額度/鑑權失敗時自動切號並重試、又希望在同一頁對照官方百分比與本地按模型估算成本的開發者。

注意:

  1. 插件以當前 dsh 進程權限運行,會讀寫會話目錄與路由狀態;安裝前請閱讀 倉庫源碼 與 MIT 許可證,自行評估密鑰存儲與本地 API 暴露範圍。
  2. 按模型金額僅爲本地估算,不能替代 OpenCode 賬單;其它客戶端產生的用量只體現在官方百分比行。
  3. 峯時/假日規則在 DeepSeek 官方與 OpenCode 之間不一致,對比價目時需理解插件文檔中的說明,並按需開啓 usage.holidayAware。
  4. DSH 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區收錄站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

經過上面的步驟,可以把 OpenCode 多賬戶 failover、配額路由和用量看板收攏到一個 Settings 頁,減少換 Key 與拆插件維護的成本。詳情與更新以 GitHub README 爲準:

  • 目錄頁:https://www.skillhub.cn/plugins/2869949486/dsh-opencode-routing
  • 倉庫:https://github.com/2869949486/dsh-opencode-routing
羽毛球分组比赛记分
小程序二维码

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

小夜