前言¶
在 DeepSeek Harness(DSH)里跑智能体或日常对话时,模型选择器往往会列出当前 profile 能看到的全部服务商与模型。若你只想让团队或自己只看到少数几个入口、或把常用模型顶到列表前面,单靠改 profile 默认模型并不能收窄菜单,也不方便按习惯排序。下面介绍社区插件 dsh-model-guard:在 Host 与 Web 客户端侧统一过滤目录并重排显示,被禁用的项既不会出现在选择器里,也无法被选中或提交。
这是什么¶
dsh-model-guard 由维护者 chen1880216 发布,分类为客户端插件(同时含 profile 层 bundle)。一句话定位:禁用单个模型或整家服务商,并自定义对话模型选择器里服务商与模型两级的显示顺序。项目采用 MIT License 开源;目录页见 SkillHub,源码见 GitHub。
核心功能¶
禁用¶
- 禁用单个模型:配置为
provider/model形式后,该项从模型选择器消失,Host 侧也会拒绝选中或提交该模型。 - 禁用整个服务商:填写 provider id 后,该服务商下全部模型隐藏,分组本身也不再出现。
两级排序¶
- 手工顺序:设置页里每个服务商、每个模型都支持置顶、上移、下移。
- 自动顺序:对尚未手工调整过的项,可选按名称排列(
providerSort/modelSort为natural或name)。 - 合并规则:恒为 显式顺序 > 回退策略 > 原顺序;未在配置里列出的新模型会自动排在后面,模型增减时不必整表重写配置。
全部设置改完后即时生效,无需重启 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 / 幻方无官方从属关系。
使用前请知悉:
- 插件以当前 DSH 进程权限运行;安装前应自行查看源码与 MIT 许可证,确认符合你的安全与合规要求。
deepseek-account与deepseek-official的顺序无法由本插件调整:客户端orderModelProviders()会无条件把二者排在最前,设置页说明中已写明。- 已在会话中选中的模型被禁用后不会自动回退:菜单里消失并显示 fallback 标签,发送消息时才报
session/model-unavailable,需手动另选模型。 - 只收窄人的选择面:subagent、compaction 等组件显式指定的模型仍可运行。
- 依赖带
internal前缀的internal/getwaterfall,非公开契约;DSH 大版本升级后若菜单不再跟随设置,可能是事件签名变化。 - 排序仅影响选择器展示,不影响默认模型(默认模型仍由 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