前言¶
在 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 团队。
- 仓库:funk80rus/dsh-agent-teams-model-override
- 社区目录:skillhub.cn 插件页
- 许可证:MIT(以仓库为准)
- 分发:未发布到 npm,
package.json标记"private": true,经 GitHub 安装
插件在安装前会检查 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(推荐)¶
- 在 Creator Mode 打开 Plugin Manager,选择 Install bundle。
- 填入 GitHub 规格:
github:funk80rus/dsh-agent-teams-model-override
- 启用
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