dsh-agent-teams-model-override:为 Agent Teams 补上模型选择与嵌套编排

前言

在 DeepSeek Harness(DSH)里用官方 Agent Teams 做多智能体协作时,常见限制是:队友创建时只能沿用委派方的模型路由,名册里显示的也常是 Profile 默认值而非会话真实模型;Lead 之下很难再建一层「经理—工人」结构并在各自区域内派任务、打断子节点;运行中的队友若要换模型,往往只能新建成员、丢掉上下文。

dsh-agent-teams-model-override 是 maintainer funk80rus 维护的工作流类插件(社区目录分类:工作流)。它在不另起一套编排器、不复制看板状态机的前提下,对官方 Agent Teams bundle 做薄扩展,补上创建时选模型、真嵌套 manager/worker、以及运行中切换模型三类能力。当前包版本 1.6.0,针对 DSH Desktop 0.2.1-rc.2 跑过 201 项测试;README 注明 manager 打断与嵌套 transcript 的 UI 实机验证仍待完成,这两块宜按 release-candidate 行为理解。

这是什么

一句话:面向 DeepSeek Harness Agent Teams 的小型、fail-closed 扩展,提供模型选择、模型切换与真实的嵌套 manager/worker 团队。

插件在安装前会检查 DSH 私有 runtime 接缝;若与编写时契约不匹配,相关组件拒绝安装并在 Host 日志写明原因,而不是在回合中途失败。

核心功能

下面三项对应 README 中列出的能力,且各自映射到 Plugin Manager 里的一条 Component 开关。

1. 创建队友时指定模型

工具 spawn_teammate_with_model 接受 provider、model 以及可选的 reasoning_effort。队友在后续回合与 cold resume 中保持该路由;名册报告会话真实模型,而非 Profile 默认项。

  • provider 与 model 必须成对传入;三者全省略则与官方 spawn_teammate 一样继承委派方路由。
  • 未知路由或不在 Profile 子智能体模型 allowlist 内的路由会被明确拒绝,不会静默回退到父模型。
  • 选模型不增加委派权限;深度、成员槽位、工具权限等限制不变。

2. 真实的嵌套团队

经理可通过 spawn_team_worker 创建工人;工人的 durable parent 为经理(Session.header.parentSession = manager),与 Lead 共享任务看板,可在自身区域内委派、并打断自己的工人。Team 面板可打开嵌套 transcript。

Lead 也可用 spawn_teammate_with_model 并指定 manager: "mg-1" 显式设定父节点。任务相关调用包括 team_task_assign、team_task_list、team_task_update、team_hierarchy。经理只能在其实际后代区域内改任务(由 durable parentSession 计算,而非标签);越界时任务调用失败并返回 TEAM_TASK_OUT_OF_ZONE。

经理可用 interrupt_agent 打断自己的后代;Lead 可打断任何人。官方 interrupt 语义保留:当前回合停止,inbox/activation 保留,下一条消息再启工人。

3. 运行中切换队友模型

switch_teammate_model 在下一次请求改路由,不新建成员、不丢历史。会话控制器追加 durable model/selection 事件,cold resume 后仍有效。响应中的 via 可为 session-controller(立即生效)或 pending(队友已卸载,下次启动再应用)。target: "lead" 可改 Lead 自身路由;无区域的叶子队友没有该工具。

官方 spawn_teammate 若将来原生支持相同参数,README 说明本包可以退役——本插件刻意不实现第二套 orchestrator 或替换原生 continuable-subagent 生命周期。

环境与依赖

项 要求
DeepSeek Harness Desktop 0.2.1-rc.2(已测),0.2.0-rc.2 亦支持
官方 bundle Agent Teams 已安装并启用
Node.js 22+(仅开发;已安装的 Host 自带 runtime)
Profile 任意;作为普通 DSH bundle 安装

安装与启用

先做前提:官方 Agent Teams bundle 已安装并启用。

通过 Plugin Manager(推荐)

  1. 在 Creator Mode 打开 Plugin Manager,选择 Install bundle。
  2. 填入 GitHub 规格:
github:funk80rus/dsh-agent-teams-model-override
  1. 启用 dsh-agent-teams-model-override。Components 会出现三行,各行可单独开关:
Component 作用
agent-teams-model-override spawn_teammate_with_model、准确的名册模型
agent-teams-manager spawn_team_worker、区域内任务、interrupt_agent、嵌套 transcript
agent-teams-teammate-model 运行中 switch_teammate_model

仓库已提交 runtime/<hash>/ 图,GitHub 安装不需要本地 build。

命令行(profile 目录内 pnpm)

将 <profile> 换成实际 profile 名(例如 desktop):

DSH_HOME="${DSH_HOME:-$HOME/.dsh}"
PROFILE="$DSH_HOME/profiles/<profile>"
cd "$PROFILE"

pnpm add github:funk80rus/dsh-agent-teams-model-override

随后在 Plugin Manager UI 启用 bundle,或在 DSH 会话中:

plugin_manager { action: "set_bundle", target: "dsh-agent-teams-model-override", enabled: true }

若 pnpm 因 release-age 策略拒绝 git 依赖,可改用 Plugin Manager,或对该次命令传入 --config.minimumReleaseAge=0。

典型用法

为新队友选模型

先查当前 Profile 下可用路由:

list_subagent_models({})
list_subagent_models({ provider: "opencode-go" })
list_subagent_models({ provider: "opencode-go", model: "glm-5.3-flash" })

再创建队友(示例来自 README):

spawn_teammate_with_model({
  name: "reviewer",
  description: "Independent review of the implementation",
  prompt: "Review the implementation and report concrete defects.",
  context: "fresh",
  provider: "opencode-go",
  model: "glm-5.3-flash"
})

建 manager / worker 并派任务

Lead 创建经理后,经理在自己的 scope 内 spawn 工人:

spawn_teammate({ name: "mg-1", description: "Release manager", prompt: "..." })

spawn_team_worker({ name: "w-1", description: "Worker", prompt: "..." })

分配与跟踪:

team_task_assign({ subject: "Fix the parser", description: "...", owner: "w-1" })
team_task_list({})
team_task_update({ task_id: "task-7", expected_revision: 2, action: "complete" })
team_hierarchy({})

打断工人:

interrupt_agent({ target: "w-1" })

切换运行中队友的模型

switch_teammate_model({
  target: "w-1",
  provider: "opencode-go",
  model: "qwen3.8-flash"
})

组件配置(可选)

三行 Component 经 cordis.patch.yml 插入,指向同一 immutable 图 runtime/<hash>/,版本不会漂移。README 摘录的默认 config:

- insert:
    - id: agent-teams-model-override
      name: './runtime/<hash>/plugin.js'
      config: { force: false, rosterModel: true }
    - id: agent-teams-manager
      name: './runtime/<hash>/manager-component.js'
      config: { nestedTeams: true }
    - id: agent-teams-teammate-model
      name: './runtime/<hash>/teammate-model.js'
      config: { switchModel: true }
  • force:在路由接缝缺失时仍安装(不推荐,组件无法交付路由)。
  • rosterModel:仅把名册行的 model 换成会话有效模型。
  • nestedTeams:启用真嵌套与区域内任务/打断权限。
  • switchModel:注册 switch_teammate_model。

按需调整前建议对照仓库内完整 cordis.patch.yml。

适用场景与注意

适合谁: 已在 DSH 启用 Agent Teams、需要按任务给不同队友指定模型、或需要 Lead → Manager → Worker 层级并在子树内派活/打断的多智能体工作流开发者。

务必注意:

  • 插件以当前 DSH 进程权限运行;安装前请自行审阅 GitHub 源码 与 MIT 许可证。
  • DSH 生态是「一切皆插件」;skillhub.cn 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
  • 1.6.0 中嵌套 transcript 与 manager-interrupt 的 live UI 验证尚未完成,生产环境使用前建议在目标 DSH 版本上自行走一遍关键路径。

结尾

经过上面的步骤,你可以在官方 Agent Teams 之上获得可审计的模型路由、嵌套编排与热切换,而无需 fork 一套并行 orchestrator。细节与变更以仓库 README、CHANGELOG 为准。

  • 目录页:https://www.skillhub.cn/plugins/funk80rus/dsh-agent-teams-model-override
  • GitHub:https://github.com/funk80rus/dsh-agent-teams-model-override
羽毛球分组比赛记分
小程序二维码

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

Xiaoye