dsh-time-router:按北京時間在峯谷上游之間切換模型路由

前言

在 DeepSeek Harness(DSH)裏接多條 LLM 上游時,常見做法是手動換 provider,或在配置裏寫死一條默認路由。高峯時段若要走另一套端點(例如對齊官方加價窗口的第三方推理通道),低峯再回到官方路由,既要記住時段,又要避免同一輪對話中途換路導致上下文或計費語義混亂。

dsh-time-router 是維護者 AnkoCD 發佈的 DSH bundle,分類屬於模型推理:它註冊虛擬 provider time-router(虛擬模型 auto-flash / auto-pro),在 Harness 的 llm/stream waterfall 上按北京時間、工作日窗口與中國節假日日曆,把每一輪請求鎖定到 peak 或 offPeak 中的一條真實路由,並在首 token 之前支持重試與回退。下面介紹其定位、能力與在 Desktop / Web profile 下的啓用方式。

這是什麼

dsh-time-router(npm 包名同倉庫名,當前版本 0.1.0,MIT 許可證)面向 DSH 0.2.2-rc.1。插件不引入 @deepseek-ai/* 運行時依賴,以 Cordis patch 形式注入路由邏輯與 Web 客戶端 UI(composer 停靠區狀態 chip)。

默認語義(Asia/Shanghai):工作日 09:00–12:00、14:00–18:00(半開區間)走 peak;週末、法定節假日及其餘時刻走 offPeak。國務院調休補班日按工作日處理,仍按窗口判定。社區目錄頁見 SkillHub;源碼與文檔在 GitHub。

核心功能

時間與日曆

  • 判定順序(Scheduler.evaluate()):未過期的 manual.mode 強制路由 → enabled: false 固定 offPeak → 工作日且落在 peakWindows 爲 peak → 否則 offPeak(原因含 statutory-holiday、weekend 等)。
  • 內置 data/holidays-2025.json 至 holidays-2027.json;可選在線刷新(NateScarlet/holiday-cn、timor.tech),不阻塞請求。

路由形態

  • direct:配置 baseURL 時由插件按 OpenAI Chat Completions 協議直連;需配置 models.chat / models.reasoner 與密鑰解析鏈。
  • delegated:僅配置 provider: 時改寫到 Harness 已註冊路由,由既有 adapter 流式轉發。
  • 默認組合爲 peak 直連 OpenCode Go、offPeak 委託 deepseek-official(README 2026-11-09 實測說明與 DeepSeek 加價窗口對齊)。

穩定性與可觀測性

  • 按輪鎖定(以該輪最後一條持久用戶消息 id 爲鍵);工具續寫與會話標題等帶 purpose 的請求繼承鎖;首 token 前可同路由重試一次再回退,之後不再切換。
  • 認證與配額類失敗觸發熔斷;回退通知說明路線、原因、目的地及本輪計價後果。
  • 內存狀態環、按日按路由 token 用量、JSONL 事件日誌(默認 5 MB × 3 輪轉);命令 /time-router [probe|sync|reset];HTTP GET /api/time-router/status、POST /api/time-router/state。

安裝與啓用

插件以本地目錄安裝(link: 依賴),需先在本機準備好倉庫目錄(公開地址:https://github.com/AnkoCD/dsh-time-router)。前置條件:DSH 0.2.2-rc.1;Node ≥ 22 僅用於倉庫內測試,安裝 bundle 本身不需要 node_modules。

1、安裝 bundle(三選一)

  • Harness Plugins 頁面:「從本地目錄安裝」,指向倉庫絕對路徑。
  • Agent 工具 plugin_manager:以該絕對目錄爲安裝目標。
  • CLI(dsh 將參數轉發給 profile 下的 pnpm):
dsh plugin --profile desktop add /path/to/dsh-time-router

README 示例使用 Windows 路徑 C:\path\to\dsh-time-router,實際替換爲本機目錄即可。

2、配置 peak 密鑰與路由(可選)

默認即可用:peak 直連 OpenCode Go,offPeak 委託 deepseek-official。直連密鑰按順序解析:peak.apiKey(不推薦明文)→ peak.apiKeyEnv(默認 OPENCODE_API_KEY)→ peak.apiKeyFile → %DSH_HOME%/plugins/time-router/keys/peak.key(面板保存)。

在 profile 的 cordis.patch.yml 用 id: time-router 覆蓋 config(patch 爲整塊替換,插件再與內置默認值合併):

# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: time-router
  name: dsh-time-router
  config:
    enabled: true
    timezone: Asia/Shanghai
    peakWindows:
      - ['09:00', '12:00']
      - ['14:00', '18:00']
    peak:
      label: OpenCode Go
      baseURL: https://opencode.ai/inference/go/openai/v1
      apiKeyEnv: OPENCODE_API_KEY
      models:
        chat: deepseek-v4.1-flash
        reasoner: deepseek-v4-pro
    offPeak:
      provider: deepseek-official
      models:
        chat: deepseek-flash
        reasoner: deepseek-v4-pro

3、把默認模型指到虛擬路由

未選用 time-router 時插件不參與路由。可在 Settings → Models 選擇 time-router / auto-flash,或在 patch 中設置:

- id: agent-default-model
  name: "@deepseek-ai/dsh-agent-default-model"
  config:
    provider: time-router
    model: auto-flash
    reasoningEffort: high

4、卸載注意

移除 bundle 前先把默認模型切回真實 provider,再執行:

dsh plugin --profile desktop remove dsh-time-router

或在 Plugins 頁面移除;否則默認模型仍指向已消失的虛擬路由。

典型用法

配置完成後,在會話中執行探測命令,確認當前時刻被判到哪條路由:

/time-router probe

該命令經虛擬路由發送一條約 16 token 的短請求(提示爲 “Reply with the single word: pong”),並回報本輪路由、原因與模型回覆。也可查看 /time-router 狀態輸出,或請求 GET /api/time-router/status。

節假日數據過期時可執行 /time-router sync;熔斷或手動覆蓋狀態可用 /time-router reset(詳見 README「命令與面板」)。事件與緩存默認寫在 %DSH_HOME%/plugins/time-router/(如 events.jsonl、holidays.cache.json)。

若兩條路線都希望委託已有 Harness provider,可參考 README 中「只有委託路由的配置」示例,併爲 peak / offPeak 顯式寫出 models,避免默認模型 id 與 gateway 不一致。

適用場景與注意

適合誰

  • 已在 DSH 中註冊官方路由,並希望在高峯窗口自動切到另一條直連或網關路由、低峯自動回到官方鏈路的開發者。
  • 需要按中國工作日/節假日自動判定、且要求「一輪內不換路」的長對話或 Agent 場景。

使用注意

  • 插件隨 當前 DSH 進程權限運行,可讀寫 profile、%DSH_HOME%/plugins/time-router/ 下的密鑰與日誌;安裝前應閱讀倉庫源碼與 MIT 許可證,自行評估上游端點與密鑰存放方式。
  • DSH 生態奉行「一切皆插件」;SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。
  • 插件重載會丟失內存中的按輪鎖,下一輪將按當時時刻重新判定,這是文檔中唯一接受的中途換路情形。
  • 完整配置字段、告警與示例見倉庫 docs/CONFIGURATION.md。

結尾

dsh-time-router 把峯谷時段、節假日與熔斷回退收攏到穩定的虛擬模型 time-router / auto-flash 背後,減少手工切路與同一輪中途換路的成本。目錄介紹見 SkillHub:AnkoCD/dsh-time-router,安裝與排障以 GitHub 倉庫 README(含 README.zh.md)爲準。

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

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

小夜