前言¶
在 DeepSeek Harness 中,主代理可以把任务委派给 subagent。如果不同任务适合不同的 LLM 供应商或模型,逐次手工指定会比较重复;如果只继承主代理的设置,又缺少按“翻译”“代码审查”等角色规划分工的手段。
SeverusZh/dsh-plugin-subagent-director 用于为 DSH 的 subagent 指定 LLM 供应商与模型,并用「角色模板」规划主代理与子代理的分工。下面介绍它的定位、安装、配置和常用调用方式。
这是什么¶
这是由 SeverusZh 维护的 DeepSeek Harness 插件,许可证为 MIT。package.json 中显示的版本为 0.2.1。
插件的核心目标有两个:
- 让不同 subagent 可以使用不同的 LLM 供应商(route)与模型。
- 用角色模板描述子代理的职责、persona 与可选模型绑定,让主代理更容易判断把任务委派给谁。
核心功能¶
- 供应商与模型选择:为 subagent 配置默认 LLM 供应商(route)与模型;单次委派也可以由模型显式指定。
- 默认模型兜底:配置
defaultProvider/defaultModel后,未显式指定模型的子代理会使用该默认模型;applyDefaultRoute默认开启,未配置默认模型时为零侵入空操作。 - 配置热更新:
settings.yaml或设置面板的改动即时生效,无需重启。 - 角色模板:定义角色,包括
displayName、职责描述、persona,以及可选的模型绑定。 - 角色按显示名引用:
role参数未命中 id 时,会按displayName精确匹配;多个同名角色取定义顺序第一个并提示。 - 四级回退链:单次调用参数 > 角色绑定 > 插件默认 > 继承主代理;未配置时零侵入。
- 主代理指引:系统提示会自动注入角色清单,主代理可以看到可用的委派角色。
- 设置界面:可在 DSH 设置面板内配置默认模型,并对角色卡片进行增删改。
- continuable 后台:返回可续聊子代理 id,可配合
send_message持续委派。 - 可观测性:打开子代理会话时,composer 下方显示其实际运行的供应商/模型;资料中标注该功能暂不可用,正在开发中。
安装与启用¶
安装¶
使用插件命令安装:
dsh plugin --profile <name> add dsh-plugin-subagent-director
本地开发时也可以挂载本地 checkout:
dsh plugin --profile <name> add link:<绝对路径>
注意:不要再用 - insert: 手动添加 subagent-director / subagent-director-bridge 条目,否则启动时可能报 duplicate loader entry id。
可选配置¶
如需覆盖插件默认配置,可以在 cordis.patch.yml 中按 id 覆盖 subagent-director 的 config。示例如下:
- id: subagent-director
name: dsh-plugin-subagent-director
config:
subagentProvider: spawn
toolName: subagent_role
enableRunInBackground: true
backgroundMode: one-shot
maxDepth: 3
applyDefaultRoute: true
这里主要涉及三类配置:
subagentProvider:传输相关配置。provider:LLM route 相关配置。toolName:模型可见的工具名,例如subagent_role。
subagentProvider(传输)与 provider(LLM route)是两套命名空间,配置时不要混淆。
本地开发注意事项¶
本地以 link: 方式挂载前,需要先安装依赖并构建:
npm install
npm run build
本地 checkout 需要位于 $DSH_HOME/profiles/ 下,或者仓库自带 node_modules。否则 @deepseek-ai/* peer 依赖可能报 ERR_MODULE_NOT_FOUND。
设置页会订阅供应商与设置变更事件。在 Models 页新增供应商或 API key 后,相关下拉列表会自动刷新,无需重启。
典型用法¶
配置角色模板¶
角色模板配置在 settings.yaml 的 subagent-director 命名空间下。示例:
subagent-director:
defaultProvider: opencode-go
defaultModel: minimax-m2.7
defaultReasoningEffort: low
roles:
translator:
displayName: 翻译员
description: 中英互译技术文档、代码注释与沟通内容,保留术语准确性与语气
persona: 你是专业翻译。术语统一、句式自然、保留原文意图;专有名词与技术缩写保持原文,拿不准的术语标注出来。
角色可以不绑定 provider/model,继承全局默认模型;也可以按角色单独绑定模型。
委派调用¶
在对话或模型工具调用中,可以使用 subagent_role 委派任务:
subagent_role({ role: "translator", prompt: "把 README.md 翻译成英文" })
subagent_role({ role: "code-reviewer", model: "deepseek-chat", prompt: "..." })
第二个示例中的 model 字段用于临时覆盖当前调用的模型。
role 参数支持使用角色 id 或 displayName。未命中 id 时,会按 displayName 精确匹配;多个同名角色取定义顺序第一个并提示。建议始终使用 id。
适用场景与注意¶
- 适合需要让不同 subagent 使用不同 LLM 供应商或模型的 DSH 使用者。
- 适合希望把“翻译”“代码审查”“架构设计”等职责拆成角色模板,让主代理按角色委派的任务。
- 未配置任何角色且未配置默认模型时,行为与未安装本插件一致。
- 配置了
defaultProvider/defaultModel,且未关闭applyDefaultRoute时,所有未显式指定模型的子代理(含内置工具发起的)都会使用该默认模型。 subagentProvider与provider分属不同命名空间,配置时需要区分。- 可观测性相关展示能力在资料中标注为暂不可用、正在开发中。
- 插件以当前 dsh 进程权限运行。安装前应检查源码与许可证。
小结¶
SeverusZh/dsh-plugin-subagent-director 把“哪个子代理用哪个模型”和“主代理把任务交给哪类角色”整理成可配置项:默认模型、角色模板、设置面板和 subagent_role 调用都围绕这条链路展开。
仓库地址:https://github.com/SeverusZh/dsh-plugin-subagent-director