前言¶
在 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 项。
重载与验证¶
- Settings → Plugins:找到 Minimal Router 一行,先关闭再打开。
- 让 Agent 调用
route_status。若返回含stages、tagCounts、modelGuard的 JSON,说明插件已生效。
不要在长会话中途安装或改插件配置;README 多次提醒 reload 会破坏缓存,可能触发全价上下文。
典型用法¶
- 安装并重载后,先
route_status确认 live。 - 需要固定工作模式时,用
route_stage切换到 README 中定义的阶段(例如测量数据里的core阶段)。 - 想基于本机工具集定制阶段表时,调用
route_init生成样例,再按需编辑~/.dsh/minimal-router/下的配置。 - 临时只开放若干工具组时,用
route_use(groups, turns?),无需改阶段表。 - 排查路由行为时,用
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