dsh-minimal-router: Per Stage, Expose Only the Tools Currently Needed by the LLM

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye