dsh-subagent-role-router:为 DSH 子代理按角色选模型、做多路由与 fork 切片

前言

在 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。

请注意:

  1. 权限:插件在当前 DSH 进程中运行,与宿主相同权限;安装前应在 GitHub 阅读源码与 MIT LICENSE,确认接受许可与二次开发署名(原作 Copyright (c) 2026 LaoDing,本项目修改 Copyright (c) 2026 643048695)。
  2. 生态:DSH 强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不构成官方背书。
  3. 版本: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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye