前言¶
DeepSeek Harness(DSH)里「默认模型」是一组配置:provider、model 和推理档位 reasoningEffort。新建对话、重启后恢复、以及 SurfCore 等桥接读到的,往往都依赖 Harness 内部的 agentDefaultModel.currentSelection()。
实际使用时常见三种改法都不顺手:手改 profile 的 cordis.patch.yml 容易写错且不清楚哪份 profile 生效;dsh-model-override 之类靠环境变量在启动前写死,UI 里改不了;输入框旁的模型选择器在切换会话模型时会顺带调用 agentDefaultModel.saveSelection(),等于把「最后一次在任意对话里点的模型」写进全局默认,你以为改好了默认,下一个新对话又跟着最后一次点击走。
下面介绍社区插件 dsh-default-model(维护者 LFELKEEA,分类:模型推理)。它在 设置 → 默认模型 里让你选 provider / model / 档位,并把选择固定下来:之后在新对话里换模型、重启 Harness、SurfCore QQ 工作区跟随默认时,都不会再把这份默认带跑。
这是什么¶
dsh-default-model 是 DSH 的 Host + 前端 bundle 插件(版本 0.1.0,MIT)。一句话:在设置页改默认,并把同一份选择写入 <DSH_HOME>/default-model.json,用只读方式覆盖 agentDefaultModel.currentSelection(),与「在对话里临时换模型」解耦。
- 改默认:设置页选择后走官方
agentDefaultModel.saveSelection(),并同步镜像到组合条目(镜像失败时固定仍生效,/state的mirrored会说明原因)。 - 固定默认:状态文件是唯一真相源;任意会话里
saveSelection()仍会写组合条目,但读口始终返回固定值。 - 解除固定:
POST /reset删状态文件并卸覆盖,恢复 Harness 原生行为。
目录页:https://www.skillhub.cn/plugins/LFELKEEA/dsh-default-model
源码:https://github.com/LFELKEEA/dsh-default-model
核心功能¶
设置页操作¶
Host 半边提供 /dsh-default-model/api/{state,save,reset};浏览器半边注册 settings.section 分页。有 llm 服务时可从目录选模型,没有时列表为空但仍可手填 provider / model。
固定后为何不会被带跑¶
- 会话内切模型:DSH 后台仍会
saveSelection(),插件只覆写currentSelection()的返回值,新会话、modelCatalog.default、跟随默认的 SurfCore 工作区读到的仍是固定值。 - 组合条目热重载:写入可能让
agent-default-model服务换实例,新实例上没有覆盖;插件约每 2 秒对账,读出的不是固定值就重装覆盖,避免「固定了聊一次又变」的半失效。
安装覆盖按三级回退并用行为验证(读一次 currentSelection()):own-assign → own-define → proto-assign;都失败时 /state 返回 attached:false 和 attachError,设置页不会假装成功。
与 SurfCore(QQ 等)¶
SurfCore 两个 QQ 工作区默认 config.json → dsh.followDefaultModel: true,读的是 session.modelCatalog.default(即这里的 currentSelection())。在本插件保存默认后,QQ 工作区下一轮会用同一套(桥接约 15 秒缓存)。在 SurfCore 控制台取消「跟随 DSH 默认模型」则改用 config.json 里写死的模型,与本插件无关。
安装与启用¶
安装命令(来自仓库 README,desktop profile):
dsh plugin --profile desktop add github:LFELKEEA/dsh-default-model
装完后必须重启 Harness(宿主插件不支持热重载;改代码后 plugin_manager toggle 也可能返回 application:"restart-required")。只带前端、缺少 bundle 时会报 dsh.bundle 缺失;本包 package.json 的 dsh.bundle.patch 与根目录 cordis.patch.yml 齐全,一条命令即可。
重启后在 设置 → 默认模型 完成选择与保存。
典型用法¶
- 打开 设置 → 默认模型。
- 选择 provider,在列表中点选模型,或直接填写模型 id。
- 按需选择推理档位;不选表示「跟随模型默认」。
- 点击 保存为默认模型。卡片显示「已固定」,并展示当前原生默认值供对照。
- 需要恢复 Harness 原行为时,点击 解除固定(对应
POST /reset)。
状态文件示例(支持 BOM,Windows 编辑器写入也可读):
{ "provider": "dfy", "model": "deepseek-v4.1-flash-1017", "reasoningEffort": "max" }
适用场景与注意¶
适合谁:经常在 DSH 里开新对话、用 SurfCore QQ 工作区,且希望「全局默认模型」与「某个对话里临时选的模型」分开的开发者或日常用户。
兼容性(README 说明):
- 需要 Harness 暴露
agentDefaultModel;没有时设置页只读并说明原因。 - 没有
configEditor时无法镜像组合条目(mirrored: "skipped"),固定仍生效。
安全与权限:插件以当前 DSH 进程权限运行;写 API 仅接受本机回环 Host,application/json,并对跨站来源做校验。安装前建议自行查看源码与 MIT 许可证。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
排查要点:
- 页面「读取失败:HTTP 404」→ 检查路由前缀是否只拼一次(
API_ROOT = 'dsh-default-model/api')。 - 「已固定,但没挂上」→ 查看
<DSH_HOME>/default-model.boot.json、default-model.debug.json。 - 行为未更新 → 重启 DSH,不要依赖热重载。
维护者在仓库提供 Host / 客户端 smoke 测试:node scripts/smoke.mjs、node scripts/client-smoke.mjs(npm test 串联两者)。
结尾¶
dsh-default-model 把「在设置里改默认」和「固定默认不被会话选择器带跑」做成同一页 UI,并兼顾组合条目热重载下的自愈。若你受困于「点一次模型选择器就改了全局默认」,可以按上文命令安装、重启后在设置里保存为默认并固定。