dsh-default-model:在设置里固定 DeepSeek Harness 默认模型

前言

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。

固定后为何不会被带跑

  1. 会话内切模型:DSH 后台仍会 saveSelection(),插件只覆写 currentSelection() 的返回值,新会话、modelCatalog.default、跟随默认的 SurfCore 工作区读到的仍是固定值。
  2. 组合条目热重载:写入可能让 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 齐全,一条命令即可。

重启后在 设置 → 默认模型 完成选择与保存。

典型用法

  1. 打开 设置 → 默认模型。
  2. 选择 provider,在列表中点选模型,或直接填写模型 id。
  3. 按需选择推理档位;不选表示「跟随模型默认」。
  4. 点击 保存为默认模型。卡片显示「已固定」,并展示当前原生默认值供对照。
  5. 需要恢复 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,并兼顾组合条目热重载下的自愈。若你受困于「点一次模型选择器就改了全局默认」,可以按上文命令安装、重启后在设置里保存为默认并固定。

羽毛球分组比赛记分
小程序二维码

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

小夜