DeepSeek Harness 收尾:主编带仨研究员组队
生命不息,折腾不止。前面六篇攒下的钩子、事件流、压缩、目标、后台任务、子代理,今天全串成一支会自己分工干活的队伍。
进阶系列写了六篇,从写钩子插件拦截 Agent,到监听事件流出日报,再到上下文压缩、目标续跑、后台任务,最后是 subagent 招「手下」。眼尖的朋友可能发现了:subagent 那一套是父子关系——你派一个子代理出去,它干完汇报,仅此而已,子代理之间互不搭话,也没有一块共享的记工板。
今天收尾,我们把牌桌上最后一副牌翻开:Agent Teams。这是 DeepSeek Harness 官方仓库 packages/experimental/ 里一个实验性多智能体协作模块——一个会话变成一个「主编」,它能招几个有名字的「研究员」队友,互相发消息、共用一块任务板,还能崩溃重启后接着干。前面六件套,在这里各就各位。
一、前六篇攒下的六块积木
先回头看我们攒了什么,不然组队就是空中楼阁:
| 积木 | 文章 | 在队伍里干什么 |
|---|---|---|
| 钩子插件 | 第 1 篇 | 主编/研究员动手前统一拦截、审批 |
| 事件流 | 第 2 篇 | 干活全程留痕,收工时自动出日报 |
| 上下文压缩 | 第 3 篇 | 长任务跑久了不崩,上下文涨满就压 |
| 目标(goal) | 第 4 篇 | 给主编立个总目标,自动续跑 |
| 后台任务 | 第 5 篇 | 好几天的大活丢后台,按进度回收 |
| 子代理 | 第 6 篇 | 单个研究员的后端(spawn/fork) |
前六篇都在解决「单打独斗」的问题,而团队解决的是「如何让好几个 Agent 并肩、互相通气、共享本子」。它和 subagent 最大的区别就一句话:subagent 是家长里短的父子,team 是平级协作的同事——每个队友都有独立会话、独立上下文,互相靠消息和任务板沟通,而不是往同一个越来越长的对话里塞。
二、官方实验包:一个会话就是一支队伍
Agent Teams 在官方仓库里的定位是「实验性」——能把一个 coding 会话变成一支小队:会话本身的 Agent 自动当 Lead(主编),它可以创建带名字的 teammate(研究员),互相发持久消息,在一块共享任务板上记任务。消息和任务状态能扛住崩溃、重载、中断,研究员「掉线」后再醒来还会收到之前排队的消息。
它由三个包组成,最小装配长这样(这是 SDK/自定义组合的写法):
1 | # 最小团队装配:持久会话存储 + 两个 Team 包 |
注意三点:agent-team 包只负责领域模型(身份、花名册、邮箱、任务板),不带任何工具;真正给模型派活的是配对的 tool-agent-team 包;而必须要持久会话存储,团队功能才会激活(这就是为什么第 3 篇的落盘能力在这里是地基)。
不过你大概率用不到上面这种手工装配。官方其实发了一个一键 profile 层 @deepseek-ai/dsh-experimental-agent-team-profile,装完就把上面的组合、配置、工具全铺好了(还会顺手把容易混淆的旧 subagent 委派控件关掉)。三条命令就能装/卸:
1 | # 前置:profile 里得有 @deepseek-ai/dsh-base |
或者在 Web 侧边栏的 Plugins 页面直接开关——它是 dsh 安装时自带的可选 bundle,默认不启用,开关一下重启即可(具体开关项名以你装的那版 UI 为准)。
装好后,会话就会多出一组 Team 工具:spawn_teammate、send_message、list_agents、interrupt_agent、wait_agent,以及一组 team_task_* 任务板工具。
三、上手三步:装 → 派活 → 看花名册
第一步:装完重启。 上面装/卸完,重启 dsh web 进程并刷新浏览器。
第二步:给主编派活。 不用教它「请用 Agent Teams」这类咒语,直接自然语言下总目标,让主编自己去拆:
1 | 写一份《DeepSeek Harness 多智能体选型对照》:先查 subagent、Agent Teams、 |
主编收到后,会先规划,再自己调用 spawn_teammate 招人。它实际调用的入参形状大概是这样的(供你理解,不用手敲):
1 | { |
name 是小写 kebab-case 的唯一名字;prompt 一定写完整——因为这个队友要么 fresh(不继承主编对话的任何记忆),要么 fork(继承主编已完成的轮次)。fresh 就意味着它的 prompt 里必须自带全部前情,别指望它知道你们前面聊了啥。
第三步:拿 list_agents({}) 看花名册。 返回每个成员的名字、角色(lead/teammate)、状态(running/idle/inactive/provisioning/failed)。主编自己始终在列,是那个 role: "lead" 的伪行。
四、主编带仨研究员:一个落地项目
回到上一步那个写作任务,主编最自然的打法是一次招三个研究员,各干一摊,最后自己验收:
| 研究员名字 | 分工 | context |
|---|---|---|
researcher-data |
查三套机制的官方文档、差异点 | fresh |
researcher-report |
按查回来的要点写带结论的报告 | fresh |
coder-demo |
写一份能跑的最小演示代码 | fork |
他们会共享同一个工作目录,谁改了文件其他人都立刻看得见——这正是团队和子代理的关键差异之一。所以主编要做的就是把任务拆开、分配、等结果、验收:
- 派活:
spawn_teammate创建三人,再下任务到共享任务板(team_task_*那套:建任务 → get 读 → claim 认领 → 干完 complete)。 - 催进度/补充要求:
send_message({ target: "researcher-data", message: "..." })。它会在目标最近的步骤边界把消息塞进去;目标要是inactive,这一发还会顺带把它唤醒开跑。 - 等结论:
wait_agent等某个队友。⚠️ 它只观察调用之后发生的变化,从不主动唤醒;如果此刻没有别人在跑,它会立刻返回noProgress。所以等待前先用list_agents确认还有人 running/provisioning,需要谁上线就先send_message叫醒再等。 - 中途叫停:
interrupt_agent把某个研究员暂停(不是销毁),回头还能继续。 - 收尾验收:主编合并三个人的产出,自己最后 review 一遍 diff、跑一遍测试再给你终稿——所以要给主编一个强一点的模型,把「判断和验收」这一层的上下文留给它。
五、工具速查 + 六个必躲的坑
一套工具一句话说清:
| 工具 | 干什么 |
|---|---|
spawn_teammate |
创建带名字的持久研究员;只有主编能调 |
send_message |
给主编/某研究员发消息,能唤醒 inactive 目标 |
list_agents |
看花名册(名、角色、状态) |
interrupt_agent |
暂停某研究员,不销毁、可继续 |
wait_agent |
等待,只观察新变化、不唤醒 |
team_task_* |
共享任务板:建/取/认领/完成 |
六个坑,全是社区实测出来的,务必背下来:
- 名字永久不复用。哪怕创建失败,那个名字也被占着,不能再用——所以别拿临时名乱试。
- 只有主编能创建/中断研究员,研究员之间只能靠
send_message传话。 - fresh 不带任何前情。想让研究员知道你聊到哪了,要么
prompt写全,要么用fork。 wait_agent不唤醒人。没人在跑会立刻noProgress,别傻等,先send_message叫醒。- 共享目录不是锁。多人改同一块文件没有强制锁,一旦报
FS_STALE_VERSION,读最新内容、把你改的 rebase 上去再重试;写作用read/edit/write套路,Bash/格式化脚本不受版本守卫保护,最后让主编 review 总 diff。 - 别用
subagent组队(Web/Desktop 上尤其要注意)。开启 Team 后旧的subagent/subagent_fork控件在 preset 层可能还活着,但用它们派出去的子代理不在 Team 花名册里——list_agents看不到、send_message报「找不到这个 teammate」。组队就老老实实用spawn_teammate,否则容易白转圈。
六、给研究员换便宜模型,省下主编的强模型
组队的最大甜头其实是成本。前面说过 Harness 是「一切皆插件」,Provider 可以随便加,而 Team 里每个研究员都能各用各的模型——这正是 DeepSeek Harness 作为国产框架的卖点:多模型对接 + 价格便宜。
合理分工是:主编用强模型(判断、拆任务、验收,上下文都花在刀刃上),查资料/出代码这类研究员换成便宜的小模型。要省钱,就把研究员的 Provider 指向便宜模型按量付费——比如上一路的中转站(ai.aklibk.com 那种 OpenAI 兼容接口)接个低价小模型,查资料、写初稿用便宜货,主编拿强模型收尾。团队框架 + 便宜模型的组合,才是把「多智能体」真正跑进日常的正解。
如果还想玩点更花的,社区还有 @limuyang2/dsh-agent-team(独立 Agent、共享工作区,每个成员独立模型/技能/MCP 工具)、@nanmicoder/dsh-agent-teams(带 /agent-teams 命令和实时面板)这类选手,思路一致、包装更厚,感兴趣的按需去 DSH 插件库翻了试。
生命不息,折腾不止。进阶系列到此收尾,六件套变成一个能自己招人、分工、验收的团队。下篇开新坑——Claude Code 实战系列,第一课从 0 讲清怎么装、怎么接中转站、怎么在终端里把它当个顺手的小工。