← Back to home@fred-chen

dsh-subagent-model-director

DeepSeek Harness plugin: smart subagent model assignment - model profiles (intelligence/speed/tags), tag-first matching, load balancing

Stars
0
Language
JavaScript
Created
Oct 4, 2026
Updated
Oct 7, 2026
GitHub repo

Introduction

dsh-subagent-model-director

DeepSeek Harness 插件:按智能分级与并发数为每个 subagent 挑选模型。

产生 subagent 的那个会话(父会话)的当前模型负责判断任务复杂度;本插件把「模型档案表(智能分级 + 并发数)+ 复杂度判据 + 分配策略」注入父会话的系统提示词,并提供 subagent_assign_model 工具做批量、并发感知的分派。

安装

要求:DeepSeek Harness ≥ 0.1.7-rc.1(依赖宿主的 settings 桥、tools API 与 subagent 组合)。

方式一:DSH 插件管理器(推荐)

  1. 打开侧栏 插件 页 → 点击 安装(Install bundle);

  2. 输入仓库地址:

    github:fred-chen/dsh-subagent-model-director
    

    (或完整地址 https://github.com/fred-chen/dsh-subagent-model-director.git)

  3. 确认安装后插件默认启用;若宿主提示兼容性,按界面指引处理。

方式二:CLI

dsh plugin --profile <你的profile名> add github:fred-chen/dsh-subagent-model-director

方式三:手动 pnpm

cd ~/.dsh/profiles/<你的profile名>
pnpm add github:fred-chen/dsh-subagent-model-director

然后编辑该 profile 的 package.json,把包名加入 bundle 列表:

"dsh": {
  "profile": {
    "bundles": [
      "...",
      "dsh-subagent-model-director"
    ]
  }
}

安装后配置

  1. 重启 DSH(新 bundle 建议重启一次确认加载);
  2. 确认侧栏 插件 页出现 subagent-model-director 且已启用;
  3. 前置条件:先到 设置 → 插件 → Subagent → Model selection 启用并勾选允许子代理使用的模型——本插件的模型档案只能从这个全局允许列表中选择;
  4. 打开 插件 → subagent-model-director → Configure:
    • 添加模型档案:从下拉框选择 provider/model,标注智能程度(高/中/低)与并发数(该模型可同时运行的任务数),可选填 reasoning effort;
    • 可选:添加关键词规则(强信号:命中关键词优先指定该档案)、切换提示词注入模式(简洁/详细/关闭);
  5. 用页面底部的 分派测试 验证规则链(纯代码模拟,不调用大模型;一行一个任务,可加 high:/medium:/low: 复杂度前缀);
  6. 保存后,新会话即生效——父会话的系统提示词会出现档案表与分配策略,父模型据此为每次 subagent 委派填写路由。

从旧版(tag/速度/负载均衡)升级:旧的 tags/speed/requireTagMatch/loadBalancing/defaultProfileId 字段会被自动忽略,档案保留(并发数默认 1),在设置页点一次保存即可把过时字段从配置里清掉。

卸载 / 更新

  • 卸载:插件页删除该 bundle,或 pnpm remove dsh-subagent-model-director(profile 目录内);
  • 更新:pnpm add github:fred-chen/dsh-subagent-model-director#main 后重启;发布 npm 后可直接 pnpm add dsh-subagent-model-director@latest。

分派模型(v0.3.2)

模型只按智能程度分级(高 / 中 / 低),每个模型声明并发数(可同时运行的任务数):

  1. 高级优先:高级模型能做低级模型的任何任务——任务默认交给"仍有空位的最上级模型";
  2. 难者先占高级算力:批量并行任务时,会话主模型按复杂程度判断(高/中/低),难的先占高级空位、简单的顺延到下一级。任务多到把高级都占满时,简单任务自然落到低档;
  3. 满载顺延:某级模型并发数满 → 顺延下一级;
  4. 全部满载:任务数超过所有模型并发总数 → 按难度与各模型并发份额(负载/并发比例)分配剩余任务;
  5. 关键词规则(可选强信号):任务文本命中关键词 → 优先指定目标档案(该档案有空位时;多条命中按优先级)。

模型档案

属性说明
Provider / Model只能从全局允许列表中选择,保存与运行时都会校验
智能程度高(深度推理/计划/设计/创造)· 中(代码分析/审查/推断)· 低(检索/整理)
并发数该模型可同时运行的任务数量;满载后顺延下一级模型
Reasoning effort可选;留空 = 使用所选模型的默认档
启用关闭的档案不参与分配

复杂度判据(注入父会话)

  1. 需要深度推理 / 创造性 / 计划设计的任务(架构方案、复杂代码设计、创造性写作、跨源综合)→ 复杂度:高。
  2. 需要分析、审查与推断的任务(代码审查、根因排查、多源比对核验)→ 复杂度:中。
  3. 检索、事实核对、格式化、机械性整理等常规任务 → 复杂度:低。

分派是怎么决定的(三层)

层谁决策在哪里发生
1. 主路径大模型(父会话当前模型)会话内:模型读到注入的档案表(分级+并发)+ 复杂度判据 + 分配策略,自行判断复杂度并填写 provider/model/reasoning_effort
2. 会话内兜底大模型判断 + 代码分配会话内:模型先调用 subagent_assign_model 一次性传入全部计划委派(任务+复杂度),工具按"高级优先→难者先占→满载顺延→溢出按难度与并发份额"返回每个任务的路由,并更新并发计数;模型原则上采纳
3. 设置页"分派测试"纯代码(无模型)设置页:与第 2 层相同的分配内核做规则模拟,用于预览规则链效果(不计入并发统计)

统计口径(诚实说明):并发计数 = subagent_assign_model 的分配次数(30 分钟半衰,进程内存活,重启清零)。分配策略会指示父模型批量委派前先调用该工具,使工具成为记账点;未走工具的直接委派不会计入——计数不足只会削弱均衡效果,不会分错路由。实时并发数刻意不写入系统提示词(避免每次委派都打断 KV 前缀复用),由工具按需返回。

组成

  • 设置页(侧栏 插件 → subagent-model-director → Configure):档案/规则增删改、全局开关、提示词注入模式、批量分派测试;通过 /api/dsh-subagent-model-director/* 桥接读写,revision 乐观锁防覆盖。
  • 系统提示词段落(subagent-model-director:profiles):档案表(分级 + 并发)+ 复杂度判据 + 分配策略 + 关键词规则(按优先级排序;停用/失配目标的规则不渲染);guidanceMode 可选 简洁/详细/关闭。
  • subagent_assign_model 工具:批量分派——传入全部计划委派,返回每个任务的路由与理由,并更新并发计数。
  • lib/core.js:纯逻辑核心(无依赖),53 项场景单测覆盖。

注意

  • subagent_fork 不能选择子模型路由(继承父会话以复用 KV 前缀),分派只对 subagent(spawn 等支持 agentOptions 的后端)生效。
  • 全局允许列表变更后,失配档案会在设置页标黄并在运行时跳过。
  • 档案的 reasoning effort 会自动归一化为小写(如 Max → max):宿主各模型适配器对 effort 的校验是大小写敏感的。
  • 提示词段落是动态的:修改配置会改变父会话请求前缀(与 free-search 等动态段落同样的权衡)。

开发

git clone https://github.com/fred-chen/dsh-subagent-model-director.git
cd dsh-subagent-model-director
npm test        # 纯逻辑核心测试(无需 DSH 运行时)

零构建、零运行时依赖:lib/core.js 是纯函数核心,lib/index.js 是宿主插件(依赖宿主提供的 dsh-settings / dsh-tools / schemastery),lib/client.js 是浏览器端设置页。

License

MIT