前言¶
在 DSH(DeepSeek Harness)里接多个 LLM provider、再叠上若干插件动态注册的模型之后,输入框上方的模型选择器往往会变得很长。内置的「Models」设置页只能管在配置里声明过的 provider;像 dsh-our-free-model 这类插件带来的 our-free-model、our-free-model-region 等模型,在选择器里能看见,却在内置页面上找不到入口,也就没法关掉。
下面介绍社区插件 dsh-model-switchboard(维护者 DriverWangNB):在设置页增加「模型开关」分区,把运行时段全部 provider 与模型摊开,支持逐模型或按 provider 整组关闭;关掉的模型会从所有模型选择器里消失,且不必刷新页面。
这是什么¶
dsh-model-switchboard 是 DSH 的客户端侧插件,定位是「模型开关」:控制 DSH 会话界面里哪些模型对用户可见。关闭状态不写进任何 provider 配置,只影响运行时列表过滤,不会改动既有配置内容。
在 SkillHub 插件目录 中归类为「客户端」;源码与说明见 GitHub 仓库,许可证为 MIT。包当前版本为 0.1.1,要求 Node.js >= 22.0.0。
核心功能¶
根据 README 与 package.json 描述,插件提供以下能力:
- 设置页「模型开关」:列出运行时段全部 provider 与模型(含插件动态注册、内置 Models 页管不到的那批)。
- 逐模型开关与按 provider 整组开关;provider 开关有三种 UI 状态:显示中(蓝)、部分显示(橙)、已关闭。
- 即时生效:关闭后模型从输入框上方选择器、
/model弹窗、子代理模型设置等处消失,无需刷新页面。 - 工具:
list_models只读列出当前实际生效的模型;dmm_probe用于自检插件加载、adapter 包装与广播链路。 - HTTP API:
GET /api/dsh-model-switchboard/state,以及toggle、bulk、reset等 POST 接口,便于脚本或集成侧读写开关状态。
开关状态持久化在 ~/.dsh/dsh-model-switchboard/disabled.json,重启 DSH 后仍保留。
安装与启用¶
安装方式是在 DSH profile 的 package.json 里声明依赖,并把包名登记进 dsh.profile.bundles。README 给出三种依赖源,键名必须是 dsh-model-switchboard:
npm 版本号:
"dependencies": {
"dsh-model-switchboard": "^0.1.0"
}
GitHub:
"dependencies": {
"dsh-model-switchboard": "github:DriverWangNB/dsh-model-switchboard"
}
国内 Gitee 镜像(与 GitHub 内容同步,包名仍为 dsh-model-switchboard):
"dependencies": {
"dsh-model-switchboard": "git+https://gitee.com/link77/dsh-models-manager.git"
}
登记 bundle:
"dsh": {
"profile": {
"bundles": [
"dsh-model-switchboard"
]
}
}
然后执行 pnpm install,重启 DSH。
从旧包名
dsh-model-manager(≤0.3.3)升级时,状态目录已改名;旧的~/.dsh/dsh-model-manager/disabled.json不会被读取。若要保留原关闭项,请手动复制到新目录~/.dsh/dsh-model-switchboard/。
典型用法¶
进入 设置 → 模型开关,按 README 中的交互规则操作:
| 操作 | 结果 |
|---|---|
| 点 provider 开关(原本全开) | 整组关闭,组员一起显示关闭 |
| 点 provider 开关(原本整组关闭或部分显示) | 整组全部打开 |
| 点某个组员开关 | 只切换那一个 |
| 在整组关闭的状态下点某个组员 | 该组退出整组关闭,只有这个组员和组是开的 |
需要核对当前目录时,可调用插件提供的 list_models 工具,查看各 provider 实际生效的模型数及被隐藏项。
工作原理(简要)¶
Host 侧用 Proxy 包装 ctx.llm.adapters 里每个 registration 的 adapter,只替换 reg.adapter,在 listModels / listAllModels 返回前按开关状态过滤,不修改原 adapter 实现。这样可避免对已是 Proxy 的渠道 adapter 直接改方法而引发递归(例如 channel-pack 场景下的栈溢出)。
状态变更后插件会广播 llm/adapters-updated,客户端模型目录据此重拉;否则页面可能仍使用启动时的缓存,表现为「开关无效」。
适用场景与注意¶
适合谁:长期在 DSH 里挂多 provider、多插件模型,希望用一张表统一隐藏不用的模型、缩短选择器列表的开发者。
注意:
- 插件随当前 DSH 进程运行,安装前请自行查看仓库源码与 MIT 许可证,确认符合你的安全与合规要求。
- 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文介绍的是社区维护的独立包。
- peer 依赖包括
@deepseek-ai/cordis、@deepseek-ai/dsh-llm等,需与当前 DSH 版本匹配。
结尾¶
dsh-model-switchboard 补上内置 Models 页管不到的动态模型,用设置页「模型开关」和持久化的 disabled.json 统一控制可见性,并配合广播让各选择器即时同步。