前言¶
在 DeepSeek Harness(DSH)里用队友或子代理并行干活时,模型往往只能在子代理启动那一刻定下来。DSH 原生的头部模型切换器对 origin === "subagent" 的会话是硬禁用的:子代理会话拿不到模型目录,按下也没有反应。想换模型只能重开子代理,上下文和进行中的 turn 都会被打断。
社区插件 dsh-subagent-model-switch(维护者 YuMo-233)针对这一格空白:在子代理会话头部渲染与原生同款的下拉菜单,选完后当场生效——不重开会话、不丢上文,切换在下一 turn 的请求上生效,并且跨重启记住选择。
这是什么¶
dsh-subagent-model-switch 是 DSH 社区目录中分类为「模型推理」的插件,仓库地址为 YuMo-233/dsh-subagent-model-switch,当前 package 版本为 0.1.0,许可证 MIT。
一句话定位:给 DSH 的队友 / 子代理会话装一个只长在它们头上的模型切换器;主会话仍使用 DSH 原生切换器,本插件不介入。
生效范围¶
| 会话 | 头部模型切换器 |
|---|---|
| 主会话(你亲手开的) | 原生切换器(本插件不介入) |
队友 / subagent / subagent_fork 等子代理会话 |
本插件的切换器 |
核心功能¶
三级菜单¶
点会话头部按钮,依次可选:
- 模型 —— 按 provider 分组的全部可用模型(免费模型会带
· x0.00之类的价格标记); - 推理强度 —— 该 provider 支持的 reasoning effort,含「提供商默认」;
- 继承父会话 —— 清除覆写,回到继承父会话的模型。
切换在下一次模型请求时生效:已经发出去的请求不打断,当前 turn 之后的调用即用新模型。
持久化¶
选择写入 DSH_HOME/storages/dsh-subagent-model-switch/overrides.json,DSH 重启后自动恢复。覆写按会话 id 记账,会话结束后条目不会自动清理;要彻底清干净可删掉该文件,或在头部选「继承父会话」。
能力边界(README 明确说明)¶
- 只覆盖
provider/model/reasoningEffort;上下文、工具、权限都不动。 - 只对子代理会话显示 UI。
- 不改会话日志(避免自定义事件类型导致日志读取失败),也不依赖原生 model selection。
工作原理(简述)¶
插件监听 agent/created,仅对 header.origin === "subagent" 的 agent 挂两个钩子,并用 prepend 注册,使覆写在 waterfall 回程的最后一步生效:
agent/request—— waterfall 跑完后改写provider/model,并清掉从父会话继承来的reasoningEffort(除非本次选择显式指定);system-prompt/assemble—— 同步改写系统提示词里的provider/model变量,与真实请求一致。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前建议在 GitHub 上浏览源码与 MIT 许可证,确认符合你的环境策略。
方式一:DSH 官方插件管理器(推荐)¶
在 DSH Desktop 的「插件」面板里填写下列其一,装完重启 DSH 即可:
github:YuMo-233/dsh-subagent-model-switch
或直接填仓库地址:
https://github.com/YuMo-233/dsh-subagent-model-switch
方式二:开发安装(link)¶
适合改插件代码并即时验证。README 要求 Node >= 22.5.0。步骤概要:clone 仓库后,用 junction(Windows)或等价方式链入 %DSH_HOME%\profiles\desktop\node_modules,在 profile 的 package.json 登记 link: 依赖与 dsh.profile.bundles,在 cordis.patch.yml 注册插件 id,再重启 DSH Desktop。完整命令与路径见 仓库 README。
典型用法¶
- 通过 DSH 正常拉起队友或子代理会话(
subagent/subagent_fork等)。 - 在该子代理会话头部打开模型切换下拉,选 provider、模型,必要时再选推理强度。
- 继续对话;从下一 turn 起,新模型用于后续请求,无需重开子代理。
- 若想恢复父会话继承的模型,在菜单中选 继承父会话。
其他插件或脚本如需读写覆写,可调用宿主注册的 subagentModelSwitch 服务(typert RPC):getModel(sessionId)、setModel(sessionId, provider, model, reasoningEffort?)、unsetModel(sessionId)。首参须叫 sessionId 而非 session,以免网关参数劫持与会话查找冲突。错误码包括 subagentModelSwitch/invalid-request、/session-not-found、/not-subagent、/invalid-model。
适用场景与注意¶
适合谁: 经常在 DSH 里开多个子代理/队友、又需要在同一会话内按任务切换模型或 reasoning effort 的开发者;主会话请继续用 DSH 自带切换器。
生态说明: DSH 理念是「一切皆插件」;SkillHub 插件目录 是社区站点,与 DeepSeek / 幻方无官方从属关系,不要当作官方应用商店。
依赖: 插件依赖 @deepseek-ai/cordis、@deepseek-ai/dsh-llm、@deepseek-ai/dsh-typert-protocol 等,由 DSH profile 解析安装。