前言¶
在 DeepSeek Harness(DSH)里 spawn 子代理时,默认会继承父会话正在用的模型。若本机通过多个 provider 接入了大量模型,就会出现两类浪费:调研类子代理用高价倍率模型回答一行问题,编码类子代理却落在明确不擅长代码的免费档上。手动为每次 spawn 点选模型,在目录长到几十、上百条时几乎不可行。
下面介绍社区插件 dsh-subagent-switch(维护者 wld12314,GitHub:wld12314/dsh-subagent-switch)。它在子代理激活时拦截 spawn,按任务类型在本机候选模型里做一次路由,并把选择理由写进结果;同时提供独立控制面板,不改动 DSH 原有的会话模型选择栏。插件分类为「模型推理」,当前 GitHub 星标为 0,版本 0.1.1,许可证 MIT。
这是什么¶
dsh-subagent-switch 是给 DSH 的子代理自动挑模型的桌面插件:每次 spawn 子代理时,先汇总本机已接入的模型,再按「便宜优先 + 能力匹配 + 额度是否可用」为本次任务选一个,并把结果写入子代理的会话配置。默认尽量只使用订阅里已付过钱的档位;只有在便宜档里没有任何模型真正声明擅长该任务域时,才条件允许升到付费档。
DSH 生态里能力以插件形式扩展;社区目录页在 skillhub.cn,与 DeepSeek / 幻方无官方从属关系,安装前请自行查看源码与许可证。
核心功能¶
按任务域与能力打分,不是只看价格¶
任务归到 coding、research、writing、summarize、analysis 等域。每个模型可有 goodAt / badAt 标签;命中 required 域 +10、optional +2,不擅长 −10/−2。free 与 free_quota 合成一个档带后仍按能力分排序——明确标了不擅长编码的免费模型,不会压过倍率略高但真擅长编码的模型。
免费优先与条件升级付费¶
只有便宜档里没有任何模型真正声明擅长该域,且配置允许时,才往付费档升,且只升到「真匹配」的模型。面板会标「升级付费」,日志说明被跳过的候选与分数;不为 0 分猜测多花数倍 token。
路由门禁与额度¶
默认只让「账号接入、能读余额、相对稳定」的模型进入自动路由;例如 README 中 our-free-model 类 provider 可列在面板但不参与自动选择,也可通过「放行」手动纳入。插件会调用各 provider 插件自带的 HTTP 端点读取余额,余额为 0 时该 provider 下模型整体退出选择。
可审计的选择理由¶
路由预览与 select() 返回体包含 reason、tier、score、matched、escalated 等字段,区分能力匹配、钉死指定、兜底按目录顺序等情况。能力标签来源分三层:手写 config、内置系列预设、无标签;面板上标「手写 / 推测 / 无标签」。中英文标签均支持,内部统一为英文 canonical id。
控制面板与手动优先级¶
左侧栏「子代理模型切换」入口打开独立面板:档位与 provider 策略、六类任务的「本次路由预览」、本地模型目录(优先级 ↑↓、黑名单、放行/收回)。手动优先级 >0 时压过能力分与档带顺序,且不再触发升级付费。实现为零依赖 Node 内置模块,除读本机 provider 额度端点外不发外部请求;README 称含 143 个单测(node:test)。
安装与启用¶
从 GitHub 安装(README 推荐)¶
先进入你的 profile 目录(官方 profile 一般在 ~/.dsh/profiles/desktop),执行:
cd <你的 profile 目录>
pnpm add "git+https://github.com/wld12314/dsh-subagent-switch#v0.1.1"
在 <profile>/cordis.patch.yml 中插入:
- insert:
- id: '@local/subagent-switch'
name: '@local/subagent-switch'
重启 DSH 后,左侧栏会出现「子代理模型切换」。使用 tag v0.1.1 是为了安装版本不随仓库 main 漂移;若要跟最新提交,可将 URL 后缀改为 #main。
通过插件市场发现¶
DSH 的「发现」页读取 format-1 市场索引,无中央注册表,需自行添加索引 URL。在插件页「发现」的索引源中填写:
https://raw.githubusercontent.com/wld12314/dsh-subagent-switch/main/market-index.json
或在 <profile>/cordis.patch.yml 里为 plugin-market 配置 indexes 包含上述地址。搜「子代理」「模型路由」「quota」等关键词可命中并安装。
源码 link 开发¶
按 README 在 profile 的 package.json 里用 link:<插件目录> 依赖并加入 dsh.profile.bundles,再在 node_modules 下建立指向源码的软链接(或 Windows junction),最后重启 DSH。修改宿主侧 lib/*.js 需重启;浏览器侧 lib/ui/client.js 刷新页面即可。
典型用法¶
装上之后默认即可用:免费优先 + 能力匹配 + 门禁,无需先改配置。打开面板后建议按 README 顺序查看:
- 顶部说明区:档带顺序、忽略的 provider、参与路由的 provider、是否允许升级付费、手动 pin 数量、overrides 文件路径。
- 本次路由预览:六类任务当前会选中的模型、档位、是匹配还是兜底(例如「兜底 0 分 · 8 个并列」表示按目录顺序而非能力匹配)。
- 模型表:档位、状态、擅长/不擅长、优先级;可对被门禁挡住的模型点「放行」。
- 任务类型指定:对某类任务钉死模型时使用
routingTable。
路由决策顺序(摘要):routingTable 指定 → 全局 pin(优先级 >0)→ 便宜档内按优先级与能力分 → 命中则返回 → 条件允许则升级付费档 → 最后 defaultModel 或任意可用模型兜底。
手动优先级与放行可写入 ~/.dsh/subagent-switch-overrides.json(或通过 overridesPath 指定),例如:
{
"priority": { "workbuddy/glm-5.3": 2 },
"routable": { "our-free-model/big-pickle": true }
}
更细的键名见 README「配置」表:enabled、modelTiers、cheapBand、escalateOnMiss、escalateMinScore、excludedProviders(内置含 cline)、requireQuotaAware、autoRouteSubagents、forceOverride 等;可在 cordis.patch.yml 对本插件写扁平 config:,或参考仓库内 config.example.json 嵌套写法,二者会合并为扁平对象交给路由器。
适用场景与注意¶
适合:本机接多个 provider、模型目录很长,且希望子代理按编码/调研/写作等任务自动落到合适档位,同时需要看见每次选择的理由与是否升级付费。
注意:
- 插件在当前 DSH 进程权限下运行,安装前应阅读仓库源码与 MIT 许可证,确认 provider 排除名单、门禁与
forceOverride等行为符合你的安全与成本预期。 autoRouteSubagents为 true 时会拦截子代理的startActivation改模型;若调用方已显式指定模型,默认不会覆盖,除非开启forceOverride。- 数组型配置项为替换而非追加;写
[]即清空。 - 需要 Node >= 20(见
package.jsonengines)。
结尾¶
dsh-subagent-switch 把「子代理用哪条本地模型」从继承父会话,改成按任务、按能力、按额度与档带策略自动路由,并在面板里预览与微调。目录页:https://www.skillhub.cn/plugins/wld12314/dsh-subagent-switch;源码与完整说明:https://github.com/wld12314/dsh-subagent-switch。