前言¶
DeepSeek Harness 允许在代理之间进行协作,通常通过调用子代理来分担任务。默认情况下,这些子代理会继承父级会话的模型配置。dsh-submodel-change 插件允许用户在 AI 决定调用子代理时,选择该子代理由哪个模型驱动。这解决了在处理复杂任务时,需要子代理使用不同模型(例如用推理模型处理逻辑,用普通模型处理总结)的需求。
插件简介¶
这是由 Anna-la 维护的一个 DeepSeek Harness 插件,属于“模型推理”类别。它通过利用 agent/request waterfall 的“替换 LlmCallConfig”能力,在子代理发起请求前拦截模型路由,实现模型选择。
核心功能¶
- 弹窗选择:在 GUI 中,当 AI 判断需要派发子代理时,会话里会弹出一张卡片供用户选择模型。
- 零依赖:不依赖任何
@deepseek-ai/*包,纯 JavaScript (ESM),无需构建。 - 仅对 in-process 生效:只对
provider: spawn生效。其他 provider 的 child 事件带不到本进程,自然跳过,不影响原有功能。 - 复用与继承:
- 默认同一父会话的后续子代理复用第一次的选择。
- 嵌套子代理自动继承父路由,不会连环弹窗。
安装与启用¶
安装插件后必须完全重启 DSH Desktop 才能生效。
方式 A:自动安装脚本(推荐)¶
将整个 dsh-submodel-change 文件夹放到一个稳定的位置,例如:
C:\Users\Jason\Desktop\dsh-better\dsh-submodel-change\
在该目录下执行安装脚本:
node tools/install.mjs
脚本会自动处理 junction 建立和 cordis.patch.yml 的配置。如果补丁文件被别的工具重写过,再次执行该命令即可恢复。
注意:不要在
cordis.patch.yml里用name: 'file:///...'挂载。Desktop 会把这种行判定为“未安装”,插件虽然加载了,但拿不到userQuestions/llm/agents服务,导致插件无法工作。
方式 B:作为 bundle 安装¶
在 dsh-submodel-change 的上一级目录执行:
dsh plugin --profile web add ./dsh-submodel-change
卸载命令为:
dsh plugin --profile web remove dsh-submodel-change
配置项¶
在补丁文件的插件行下添加 config: 即可覆盖默认值:
- insert:
- id: submodel-change
name: '@jason666not/dsh-submodel-change'
config:
enabled: true # 总开关
askOncePerParent: true # 同一父会话的后续子代理复用第一次的选择;
# 设为 false 则每个子代理都重新弹窗
allowDefault: true # 选项里包含「使用默认模型(跟随父级,不修改)」
extraModels: [] # 手动追加适配器目录未列出的模型路由,
# 格式 ['provider/model', ...]
工作原理¶
- 识别子代理:拦截带有
origin: 'subagent'与parentSessionheader 的请求。 - 提问位置:在
agent/requestwaterfall 中触发,向实时根 agent(通过userQuestions.ask)弹窗。提问总发生在根会话,UI 卡片也渲染在根会话。 - 注入模型:用户选中的
{ provider, model }被写回该次LlmCallConfig,子代理随后使用该路由发起请求。 - 清理:在
subagent/end/agent/disposed事件中释放选择与提问标记。
注意事项¶
- 需要完全重启 DSH Desktop 才能加载服务。
- 仅对
provider: spawn生效。 - 需要依赖
userQuestions/llm/agents服务。
结语¶
该插件通过官方扩展点提供了子代理模型选择的灵活性,适合需要在多模型策略下精细控制子任务执行的智能体开发者。