dsh-minimal-router:按階段只暴露模型當前需要的工具

前言

在 DeepSeek Harness(DSH)裏,每裝一批插件,宿主往往會在每一次請求裏帶上全部已安裝插件的工具 schema。插件一多,工具聲明體積和 promptTokens 會明顯上漲,模型在選工具時也要面對一長串無關聲明。社區插件 dsh-minimal-router(維護者 qwq1223211,分類:工作流)把「階段路由、連續錯誤熔斷、緩存探測」打在一個包裏,用固定前綴 + 可變尾部的方式,儘量只把當前任務相關的工具交給模型,並把路由提示放在上下文尾部,以利於前綴緩存。

這是什麼

dsh-minimal-router 是 DSH 宿主插件(當前資料版本 v1.19.5,MIT 許可證)。package.json 描述爲:基於階段的工具路由(自動分類、尾部 hint、物理裁剪)、連續錯誤熔斷,以及測量真實賬單的 cache probe;一次安裝、一次重載、一套配置。

README 用一句話概括設計目標:Give the model only the tools it needs right now. Fixed prefix, variable tail.

運行期數據(探測歷史、custom_stages.json 等)寫在 ~/.dsh/minimal-router/,不在包目錄內;包本身通過 profile 依賴安裝,升級時目錄會被替換。

對 DSH 版本的要求在 package.json 中爲 engines.dsh: ">=0.2.1-rc.4"(semver 範圍,含 prerelease)。

核心功能

階段路由(stage router)

插件按工具名分組,判斷當前任務需要哪一組,並可選擇從請求中物理移除其餘工具;路由說明放在上下文尾部而非頭部,以便前綴保持穩定、利於緩存。

提供的 route_* 工具(資料摘錄):

工具 作用
route_stage(stage, force?) 切換階段
route_status() 當前階段、標籤統計、guard 狀態、未認領分組
route_reset() 回到 auto,解除限制
route_init() 根據你機器上真實工具生成 custom_stages.sample.json
route_use(groups, turns?) 不依賴階段表的臨時收窄
route_hint(enabled?) 本會話開關尾部 hint(便於 A/B)
route_activity(limit?, kind?) 查看實際發生的切換、限制、拒絕、攔截

README 寫明:route_* 與 guard_* 不會被攔截,作爲硬性逃生通道。

熔斷與 cache probe

同一安裝包內還包含連續錯誤熔斷(circuit breaker)和 dsh-cache-probe,用於在相同機器、相同模型下測量工具數、聲明字節、promptTokens 與緩存命中率等。README 強調:設計裏的 contextGuardThreshold、switchConfirmations、switchCooldownMs 以及成本門控,都是爲了避免在長會話中因切換階段導致整段上下文按全價重算——資料中曾記錄 hitRate: 0.97% 的探測樣例,對應「幾乎整段上下文全價計費」。

unionEnabled(多域 union)在文檔中標註爲 @experimental,默認關閉,細節見倉庫 docs/LIMITS.md。

安裝與啓用

下面介紹 README 給出的兩種常用方式;任選其一後,必須在 DSH 裏對插件行做一次關再開,否則鏈接安裝不會熱重載,界面像已安裝但仍在跑舊邏輯。

方式一:讓 Agent 安裝(最簡單)

在 DSH 中對 AI 說:

Install this plugin for me: https://github.com/qwq1223211/dsh-minimal-router

方式二:終端

在 profile 爲 desktop 時,資料給出的命令爲:

dsh plugin --profile desktop add github:qwq1223211/dsh-minimal-router

該命令會把參數轉發到 profile 目錄內的 pnpm,並把包寫入該 profile 的 dsh.profile.bundles;在 v1.12.0 全新 profile 上驗證過:包會落在 node_modules/@local/dsh-minimal-router(實體目錄,非 symlink),package.json 會同時出現依賴與 bundle 項。

重載與驗證

  1. Settings → Plugins:找到 Minimal Router 一行,先關閉再打開。
  2. 讓 Agent 調用 route_status。若返回含 stages、tagCounts、modelGuard 的 JSON,說明插件已生效。

不要在長會話中途安裝或改插件配置;README 多次提醒 reload 會破壞緩存,可能觸發全價上下文。

典型用法

  1. 安裝並重載後,先 route_status 確認 live。
  2. 需要固定工作模式時,用 route_stage 切換到 README 中定義的階段(例如測量數據裏的 core 階段)。
  3. 想基於本機工具集定製階段表時,調用 route_init 生成樣例,再按需編輯 ~/.dsh/minimal-router/ 下的配置。
  4. 臨時只開放若干工具組時,用 route_use(groups, turns?),無需改階段表。
  5. 排查路由行爲時,用 route_activity 看切換與拒絕記錄;要回到默認寬路由時用 route_reset。

效果與邊界(README 實測,新會話)

在同一機器、同一模型、用 cache probe 測得的新會話對比(auto → core 階段):

指標 安裝前 安裝後
每請求工具數 165 66
工具聲明體積 131,694 B 43,238 B
每輪 promptTokens 47,885 25,688
緩存命中率 — 99.16%

README 同時說明:省下的 token 很多已是 cache 價,賬單變動可能小於字節數暗示;它不縮小 system prompt(那是更大槓桿),不能與另一個 tool router 並存,長會話切換階段的一次性成本可能極高(資料舉例:約 50 萬 token 會話下切換約 512,000 tokens 全價)。新開一個乾淨會話有時比單靠本插件省得更多——兩者可一起用。

插件以當前 DSH 進程權限運行;安裝前請自行查看 GitHub 倉庫 源碼與 MIT 許可證。社區目錄 SkillHub 插件頁 爲獨立站點信息,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-minimal-router 適合工具插件較多、希望按任務階段收窄工具面並關注緩存與切換成本的 DSH 用戶。目錄與源碼:

  • 目錄頁:https://www.skillhub.cn/plugins/qwq1223211/dsh-minimal-router
  • GitHub:https://github.com/qwq1223211/dsh-minimal-router
羽毛球分组比赛记分
小程序二维码

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

小夜