前言¶
在 DeepSeek Harness (DSH) 里,主代理经常通过 subagent、subagent_fork 等工具把任务派给子代理。若不在调用时显式写 model,子代理往往沿用父会话的路由:探索、规划、改代码共用同一条模型,要么浪费额度,要么在需要精确改代码时能力不足。多供应商并存时,限流、配额或密钥失效还会让整次派发直接失败。
社区里已有针对「默认子代理模型」的插件思路;维护者 643048695 在 dingminhua/dsh-subagent-default-model(MIT)基础上做了二次开发,发布 dsh-subagent-role-router(当前 package 版本 4.0.0,MIT)。下面介绍它如何在派发阶段注入路由,以及和原作相比多出来的能力。
这是什么¶
dsh-subagent-role-router 是 DSH 的工作流类插件:在创建子代理且未显式指定 model 时,按配置决定 provider / model(及推理强度);所有 subagent、subagent_fork 以及省略 agentOptions 的派发都会经过它。调用方显式传入的 agentOptions 始终优先;配置缺失或不完整时,行为与未装插件时一致(子代理继承父会话路由)。
插件目录页:SkillHub - dsh-subagent-role-router。源码与说明以 GitHub README 为准。
核心功能¶
相对原作,本项目在默认模型注入、多模型分配、跨供应商故障转移、路由可见性之外,新增四项能力:按角色路由、角色候补池、fork 活跃窗口切片、agent-teams 豁免。以下只概括 README 中已写明的行为。
按角色路由(explore / plan / patch)¶
开启 roleMode 后,派发时根据子代理「要干什么」选角色,再落到该角色配置的路由上:
| 角色 | 典型用途 |
|---|---|
| explore | 只读调查、搜索、解释、审查 |
| plan | 方案、设计、拆任务 |
| patch | 改代码、实现、修 bug |
角色判定顺序为:提示词或标签中的显式标记(如 [explore]、【探索】、规划: 等)→ 来源标签(如旁问 michengai-btw: 视为 explore)→ 关键词 → 默认 patch(拿不准时按「可能要改代码」处理)。某角色未单独配置时,回落到 models 列表与功能二、三的分配/故障转移逻辑。
多模型分配与跨供应商故障转移¶
- 分配:
models不少于 2 项时,用strategy在派发时分配——round-robin顺序轮换,或random随机;只影响「下一个子代理用哪条路由」,不在单个子代理运行中因策略换模型。 - 故障转移:
failoverEnabled默认开启;子代理遇到连接类、认证类等 README 列出的失败码时,在models(或角色候补池内)换路由重试,跨 provider;切换后同一次运行内粘在新路由上,候选耗尽则抛出真实错误。主代理循环不受影响。
路由可见性¶
轨迹视图与对话视图可显示当前 provider/model(故障转移后会更新)。injectRouteContext 默认开启时,向子代理上下文注入一行系统说明其真实运行路由(含 provider),便于子代理回答「跑在哪个模型上」;与宿主 {{model}} 变量互补。
fork 活跃窗口切片¶
forkWindowSlicing 默认开启:对 subagent_fork 在 prepareContinuable 返回的 seed 上只保留最近 forkWindowTurns 轮(默认 3),缓解长会话 fork 因复制全量原始事件导致的卡顿。映射不完整或异常时放弃切片、回退宿主原生行为;带 agent-teams: 的团队成员派发不切片。
角色候补池(4.0.0)¶
每个角色可配置 exploreModels / planModels / patchModels 队列:行数表示该角色可同时运行的子代理数;忙则顺延到下一候补,全忙则按占用最少共享;失败可进入 roleSlotCooldownSeconds(默认 15 秒)冷却。显式指定模型的派发与 agent-teams 成员不占工位。
安装与启用¶
通过 DSH 插件命令从 GitHub 安装(README 原文):
dsh plugin --profile desktop add github:643048695/dsh-subagent-role-router
本地开发可将仓库路径作为 add 参数,改代码后重启 DSH Desktop 生效。插件声明的 @deepseek-ai/* peer 区间为 0.1.7 / 0.2.0 / 0.2.1 线,0.3.0 起未声明支持;README 写明当前已验证宿主为 DSH 0.2.1-rc.2。宿主与 bundle 不兼容时,启动会跳过该 bundle,插件与设置卡片均不会加载。
安装后可在 设置 → 插件 → dsh-subagent-role-router 使用 Web 设置卡片,或编辑 profile 下 cordis.patch.yml 中 id: dsh-subagent-role-router 的 config 段。
典型用法¶
1、用标签引导角色(无需改工具参数)
派发时在标签或提示词中写明角色,例如 [explore] 搜代码、[plan] 做架构方案、[patch] 实现修改;未写且无语义关键词时按 patch 路由。
2、单模型或全局多模型
最简只需 provider + model;多条路由时配置 models 与 strategy、failoverEnabled,例如:
config:
models:
- model: deepseek-v4-pro
reasoningEffort: high
- provider: other-provider
model: gpt-5.6
reasoningEffort: max
strategy: round-robin
failoverEnabled: true
3、按角色分开模型并开候补池
config:
roleMode: true
exploreProvider: magpie
exploreModel: antigravity/gemini-3.8-flash
planProvider: deepseek-official
planModel: deepseek-v4-pro
patchModels:
- provider: workbuddy
model: deepseek-v4.1-flash
reasoningEffort: high
- provider: magpie
model: sensenova/kimi-k3
roleSlotCooldownSeconds: 15
forkWindowSlicing: true
forkWindowTurns: 3
完整字段表见 GitHub README「配置字段」。设置变更对下一次派发生效;卸载时 README 说明会还原被包装的服务方法。
适用场景与注意¶
适合已经在 DSH Desktop 上频繁使用子代理、且配置了多个 provider 或希望「探索用快模型、改代码用强模型」的开发者。需要长会话 fork(旁问、不理解等)且曾遇到超时的人,可保留默认的 fork 窗口切片并视情况调整 forkWindowTurns。
请注意:
- 权限:插件在当前 DSH 进程中运行,与宿主相同权限;安装前应在 GitHub 阅读源码与 MIT LICENSE,确认接受许可与二次开发署名(原作 Copyright (c) 2026 LaoDing,本项目修改 Copyright (c) 2026 643048695)。
- 生态:DSH 强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不构成官方背书。
- 版本:npm 包版本 4.0.0 引入角色候补池;旧版三元组字段(如
patchProvider)仍可作为单行候补兼容。
结尾¶
dsh-subagent-role-router 把子代理派发从「继承父会话一条路由」变成可配置的按角色分流、候补并发、多模型轮换与故障转移,并默认缓解 fork 种子过大问题;显式 model 与 agent-teams 等路径仍按宿主原有语义绕过插件。
- 目录页:https://www.skillhub.cn/plugins/643048695/dsh-subagent-role-router
- 仓库:https://github.com/643048695/dsh-subagent-role-router