dsh-model-guard:在 DSH 里禁用模型并调整模型选择器顺序

前言

在 DeepSeek Harness(DSH)里跑智能体或日常对话时,模型选择器往往会列出当前 profile 能看到的全部服务商与模型。若你只想让团队或自己只看到少数几个入口、或把常用模型顶到列表前面,单靠改 profile 默认模型并不能收窄菜单,也不方便按习惯排序。下面介绍社区插件 dsh-model-guard:在 Host 与 Web 客户端侧统一过滤目录并重排显示,被禁用的项既不会出现在选择器里,也无法被选中或提交。

这是什么

dsh-model-guard 由维护者 chen1880216 发布,分类为客户端插件(同时含 profile 层 bundle)。一句话定位:禁用单个模型或整家服务商,并自定义对话模型选择器里服务商与模型两级的显示顺序。项目采用 MIT License 开源;目录页见 SkillHub,源码见 GitHub。

核心功能

禁用

  1. 禁用单个模型:配置为 provider/model 形式后,该项从模型选择器消失,Host 侧也会拒绝选中或提交该模型。
  2. 禁用整个服务商:填写 provider id 后,该服务商下全部模型隐藏,分组本身也不再出现。

两级排序

  1. 手工顺序:设置页里每个服务商、每个模型都支持置顶、上移、下移。
  2. 自动顺序:对尚未手工调整过的项,可选按名称排列(providerSort / modelSort 为 natural 或 name)。
  3. 合并规则:恒为 显式顺序 > 回退策略 > 原顺序;未在配置里列出的新模型会自动排在后面,模型增减时不必整表重写配置。

全部设置改完后即时生效,无需重启 DSH。

使用位置

安装完成后,在 DSH 客户端打开 设置 → 模型禁用与排序(英文界面为 Settings → Models & ordering)即可图形化操作;也可直接编辑 profile 的 cordis.patch.yml(见下文配置)。

安装与启用

要求 DSH 0.2.x(包名 @deepseek-ai/dsh),Node >=22。

从本仓库目录安装到 web profile:

# 从本仓库目录安装到 web profile
dsh plugin --profile web add /path/to/dsh-model-guard

dsh plugin add 会把包写入 profile 的 dependencies 与 dsh.profile.bundles,随后 HMR 自动组合 bundle。

若使用 link: 本地链接,profile 的 package.json 需同时在 dependencies 与 dsh.profile.bundles 中声明,例如:

{
  "dependencies": { "@local/dsh-model-guard": "link:/path/to/dsh-model-guard" },
  "dsh": { "profile": { "bundles": [ /* … */, "@local/dsh-model-guard" ] } }
}

link: 安装时,插件包已声明 peerDependencies(@deepseek-ai/cordis、@deepseek-ai/schemastery);若 profile 未正确声明 peer,DSH 的模块解析可能退回 Node 原生行为,出现 ERR_MODULE_NOT_FOUND。README 对此有专门说明。

生效时机:dsh-hmr 监视 profile 的 cordis.patch.yml、$DSH_HOME/cordis.patch.yml 以及 profile package.json 的 bundles。前两者按内容比较,仅 touch 文件不会触发重组合,必须改内容。

配置示例

字段可在设置页编辑,也可写入 profile 的 cordis.patch.yml:

- id: model-guard
  config:
    disabledModels: []      # "provider/model",禁用单个模型
    disabledProviders: []   # provider id,禁用整个服务商
    providerOrder: []       # 服务商显示顺序(id 列表)
    modelOrder: []          # 模型显示顺序("provider/model" 列表)
    providerSort: natural   # natural | name
    modelSort: natural      # natural | name

这些字段均为 volatile(),改动即时生效。

实现要点(便于理解边界)

插件不修改 DSH 已发布的包,而作为 profile 层 bundle,在 internal/get waterfall 上拦截对 llm 服务的属性读取,返回带缓存的 Proxy,仅覆盖 listModels() 与 listProviders() 做过滤与重排;GUI 目录(buildModelCatalog)与提交校验(modelAvailable → selectModel / requireModel)都经这两个方法取目录,因此一处过滤同时挡住显示与选择/提交。核心路由仍走原始实例,属于纯减法 + 重排,不新增模型、不改 resolveCallConfig() / stream() 路径。

适用场景与注意

适合谁:需要在同一 DSH profile 下统一「谁能看到哪些模型、列表怎么排」的开发者或小团队;与 DSH「一切皆插件」的扩展方式一致,社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

使用前请知悉:

  1. 插件以当前 DSH 进程权限运行;安装前应自行查看源码与 MIT 许可证,确认符合你的安全与合规要求。
  2. deepseek-account 与 deepseek-official 的顺序无法由本插件调整:客户端 orderModelProviders() 会无条件把二者排在最前,设置页说明中已写明。
  3. 已在会话中选中的模型被禁用后不会自动回退:菜单里消失并显示 fallback 标签,发送消息时才报 session/model-unavailable,需手动另选模型。
  4. 只收窄人的选择面:subagent、compaction 等组件显式指定的模型仍可运行。
  5. 依赖带 internal 前缀的 internal/get waterfall,非公开契约;DSH 大版本升级后若菜单不再跟随设置,可能是事件签名变化。
  6. 排序仅影响选择器展示,不影响默认模型(默认模型仍由 profile 的 agent-default-model 等配置决定)。

结尾

dsh-model-guard 把「隐藏不该选的模型」和「把常用项排到前面」收进设置页与 cordis.patch.yml,改完即生效。若你要在 DSH 里收紧模型选择器,可先按 README 安装到 web profile,再在 设置 → 模型禁用与排序 中调整。

  • 目录页:https://www.skillhub.cn/plugins/chen1880216/dsh-model-guard
  • GitHub:https://github.com/chen1880216/dsh-model-guard
羽毛球分组比赛记分
小程序二维码

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

小夜