DeepSeek Harness Team · 2026-10-31 · 开源

DeepSeek Super-Agent
架构解析

2026 年 10 月 31 日晚,DeepSeek Harness 团队发表技术文章《Super-agent 设计探索:迈向更自主的 Agent 系统》, 并以 MIT 协议开源原型 dsh-superagent-prototype。这不是一个新模型,而是一套让 Agent 持续在线、自主找活干的系统架构——用经典计算机系统思想(事件驱动、双层调度、存算分离)重构 Agent 的工作方式。

发布物
架构文章 + 开源原型
文章与原型范围不同,部分设计尚未实现
开源仓库
dsh-superagent-prototype
MIT · 深度集成 DeepSeek Harness
社区热度
上线 1 天 4,300+ ★
截至 2026-11-03 约 12.7k ★ · 1.3k fork
原型形态
单仓库主动式编程 Agent
GitHub 为主 · 飞书可选 · Web 面板监督
01

核心命题:注意力是瓶颈,架构是答案

现有主流 Agent 以单一 Session 为基本单位、互相独立;一个人实际只能同时跟进约 3–5 个活跃会话。 Super-agent 的出发点是:约束多任务扩展的从来不是模型能力,而是人的注意力与系统架构。

“单任务的上限取决于模型能力,
多任务的上限取决于架构。”

—— 事件驱动与双层调度的立论基础

“尽可能少地占用人的注意力,
尽可能多地创造价值。”

—— 第一设计原则 · docs/000-philosophy.md
[∞]
连续 Continuous

跨会话、跨信道保持上下文,不再被“聊天窗口”切碎。

[⇉]
高效 Productive

多任务并行推进,响应快,长命令后台化不阻塞对话。

[◉]
主动 Proactive

观察环境事件自主“找活干”,无需介入时保持安静。

[↺]
持久 Persistent

常驻在线,状态持久化,异常自动检测与恢复。

一句点题:“Session 是系统实现细节,不应是用户认知负担”——手动管理会话被视为 LLM API 时代的设计惯性,Super-agent 把 Session 从用户面前拿走。

02

架构总览:一个 Router,多个 Worker

双层调度 + 事件驱动是整套设计的骨架:Router 只分派不执行(防止自身成为瓶颈),Worker 在隔离会话中并行干活; 同一话题(Thread)的后续消息经订阅直通直达 Worker,不再打扰 Router。底部为存算分离与 BYOM,右侧为 Watchdog 外部控制回路。

主链路 直通 / 控制回路 订阅直通 pass-through:同一 Thread 的后续消息直达 Worker,跳过 Router(多对多 · 可移交) SOURCES 事件源 GitHub Issues · PR · 评论 · 评审 通知轮询(默认 1 分钟) 飞书(可选) 群聊 · 私聊 · 话题 事件订阅 + 历史恢复 CI 结果 · 机器人 无发送者,走准入表 两级过滤 ① Fast Path · 代码过滤 来源 · 白名单 · 忽略规则 ② Slow Path · LLM 研判 策略即自然语言,可扩展 Router · 主会话 orchestrator · 全局唯一 · 只分派,不执行任务 · 可不配 shell · 轻量模型即可 · 候选卡排队 → 合批决策 · 不深入拆解单任务内部 · 全局序点 · 协调点 · 记忆 · 禁 sleep,回复 ≤100 词 Workers 执行层 worker-<ticket-id> Worker-1 · 独立会话+目录 Worker-2 · 互不共享上下文 Worker-N · 并行推进 · 最强模型 · 全套工具 · 可再开 subagent 5s 前台命令自动转后台 Channel 渠道 · 对外回复 GitHub 评论 / 评审回复 / PR 飞书话题回复 保序:ack → 结果 → 提问 IM 消息 ≤100 词 / 条 PR merge / close → Ticket 结束; 人的后续评论可恢复(resume) 目标消失才丢弃,否则等待重试 Watchdog 看门狗 · 独立 Agent 会话(外部回路) · 定时消息驱动 · 原型每小时 · 判断“实质进展”非进程存活 · 检测无效循环与跑偏 · 可用自然语言问故障 · 可在线改提示词与触发规则 脚本 status 退出码 0/1/2/3 Gate 准入 谁可发起? 名单·准入表·机器人 Assessment 研判 LLM 逐条规则判断 须有匹配规则+意图证据 Mandate 授权 不可变 · 版本化 范围 Scope + 强度 Ticket 工单 唯一授权工作单元 open→ended→可恢复 Assignment 派工 绑定 Executor 会话 pending→running→ended 启动执行 Eval 决定 Decision accept 接单 stop 停止 ignore 忽略 unavailable 未完成 只有“人的停止”能撤回 Mandate;策略变更通知而不撤销 存算分离 · BYOM —— 计算与状态分离,计算与执行环境分离 云端 · Agent Loop(无状态) Engine 唯一写者 · SQLite 单文件持久状态 Effects 持久副作用队列 · Outbox 回执保序 可重启 · 可替换 · 水平扩展,崩溃后接续 执行环境 · BYOM(开发机 / 个人电脑,可间歇在线) 轻量 daemon:只执行命令,不存会话状态 worker-bin 命令垫片 · 凭据隔离,不进模型上下文 设备下线任务排队,重新上线自动补跑 启动/输入 报告
蓝色 Router / 云端计算 绿色 Worker 执行 / 直通 白色 事件源 / 渠道 橙色 Watchdog / 本地执行环境 Router 与 Agent Team 的区别:Team Lead 是深入任务内部的“项目经理”,Router 只是任务间的“前台调度” 原型代码:Router = 主会话 orchestrator,Worker = 执行会话 worker(src/core/engine.ts 为唯一状态写者)
03

六大关键机制

文章把成熟系统的思想搬进 Agent:调度学操作系统,上下文学缓存,交互学全双工通信,部署学云原生。

MECHANISM 01

事件驱动:Trigger 取代 Prompt

  • 输入是环境中的半结构化 Trigger(群消息、邮件/日程、PR 评论、CI 结果),而非一次性 prompt。
  • Fast Path:确定性代码先筛(来源、白名单、忽略规则),成本≈0;Slow Path:LLM 语义研判,策略用自然语言书写。
  • 投机执行(借鉴 CPU):收到信号先在后台干——群里讨论 bug 时“静默复现”,确认有问题且有简单修复才交付,否则全程安静。
Trigger · Disposition 留痕 · Speculative Execution
MECHANISM 02

双层调度:Router / Worker

  • Router 承接全部人类交互,只分派不执行——可以连 shell 都不配,轻量模型即可,保持“薄”以防瓶颈。
  • Worker 上下文隔离、并行执行,用最强模型挂全工具;可再派 subagent。
  • 触发器在 Router 思考期间排队合批——拥堵被转化为批处理效率(见实验 ③)。
中断分发 · 线程池类比 · 只调度不拆解
MECHANISM 03

订阅直通:后续消息绕过 Router

  • 同一话题/PR 的事件流定义为 Thread;Router 只做“冷启动”判断,Worker 创建后订阅自己的 Thread。
  • 后续消息由程序直通(pass-through)送达 Worker——不再消耗 Router 的模型决策。
  • 订阅是多对多:多个 Worker 订阅同一 Thread 时可自行发现冲突、移交(handback)。
Fan-out 扇出 · handback · 省 token 而非省时间
MECHANISM 04

上下文当 Cache 管

  • “浪费上下文窗口,就是浪费模型的智能”——太多挤占注意力,太少迫使反复调工具。
  • Inline:近期大概率用到的直接入窗;Spill:完整内容留窗外,只留 ID/摘要,按需读取——即缓存局部性。
  • 每个对象有唯一 ID,内联引用形成引用图,支持 Chain of Recall 链式召回:消息→Thread→Worker 会话→评审 Thread,多跳按需展开。
Inline · Spill · Chain of Recall
MECHANISM 05

全双工交互 & 多信道

  • 同步 run() 改为异步 start()/stop():长命令立即返回“已启动”,结果作为新事件投递;输入在下一个推理边界处理。
  • 多信道分级:IM 低打扰(硬性 ≤100 词);GitHub/邮件/文档承载结构化高密度交付;推理过程隔离在 Worker 内。
  • 只在“人必须行动或能用上结果”时说话;一次确认、明确对象与预期结果。
start()/stop() · ≤100 词 · human_action
MECHANISM 06

存算分离 + Watchdog

  • 计算与状态分离:Agent Loop 跑云端无状态弹性容器;Session 状态存数据库,连续性由持久化保障。
  • 计算与环境分离(BYOM):重状态留在本地(未提交修改、私有凭据、内网依赖),端侧只放一个不存状态的轻量 daemon;设备离线任务排队、上线补跑。
  • Watchdog:系统外的独立 Agent 会话,定时驱动,判断 Worker 是否有“实质进展”并尝试修复,还能在线改提示词、调规则。
BYOM · 外部控制回路 · 受 Anthropic managed-agent 启发
04

授权链与工单生命周期(原型的核心领域模型)

原型把“谁能让 Agent 干活”做成一条由代码强制的流水线——消息只是数据,永远无法改变权限。每一步在代码中都有对应实体(src/core/)。

STEP 1
Gate 准入
deterministic

名单内的人 @ Agent = 明确请求(explicit);其余按准入表逐格判定;名单内机器人只能产生推断候选。

STEP 2
Assessment 研判
LLM · 逐条规则

主会话读取有界线程窗口(前 5 条 + 前后各 5 条),对每条启用规则恰好判断一次,必须给出方向与意图证据。

STEP 3
Decision 决定
accept/stop/ignore/unavailable

接单在一个事务里原子创建:Ticket + Mandate + Assignment + 订阅 + 对外确认(ack ≤100 词)。

STEP 4
Ticket 工单
授权工作单元

阶段自管理:待答复 / 待评审 / 受阻 / 排队 / 空闲 / 执行中;人的消息可恢复(resume)已结束工单——除非被人停止。

STEP 5
Assignment 派工
绑定 Executor

每个工单一个 worker-<id> 会话 + 一个独立目录(prepare 命令通常用 git worktree 建检出);人的消息可占用“插队槽”。

STEP 6
Report → Channel
progress…ready/blocked/failed/dropped

Worker 只向内汇报;回复经 Outbox 保序送达原会话。PR 全部关闭/合并则工单结束,人的后续评论可唤醒。

三种接单模式(Accept mode,策略的一部分)

off

关闭主动:一切推断候选不产生,只有明确请求能开工。

observe(默认)

推断候选照常研判,但积极评估结果只记录为 “would accept”——先观察它会做什么,不真做。

auto

研判通过即接单。官方建议路径:先 observe 审阅记录,再切 auto。

核心术语速查(原型 docs/001,代码与面板统一用语)

概念中文一句话解释
Source来源事件流(GitHub / 飞书…),持有读位点与 bot 身份,重启不重放事件
Trigger触发一条不可变事件,审计与幂等的单位(重复接收只建一张工单)
Thread线程按时间排序的触发序列;Eval 串行运行、订阅挂在其上
Eval评估把一批 Trigger 变成决定:Gate 准入(代码)+ Assessment 研判(模型)
Mandate授权接单授予的“为什么能干、能干到哪”:策略版本 + 范围 + 强度,不可变
Ticket工单授权工作单元,只有 Eval 能创建;定义自己的状态而非跟随 Executor
Assignment派工工单与一个 Executor 实例(会话+目录)的绑定
Subscription订阅工单↔线程的多对多关系;扇出只给上下文、不给新权限
Channel渠道线程的“写侧”:确认、回答、结果、提问都从这里发出
Attention待人工决定工单上等待人回答的问题(经 human_action 结构化上报)

值得注意的拒绝设计(docs/001 Rejected concepts):不做跨渠道身份映射(那是提示词的事)、不允许“向工单追加”这类决定(订阅扇出就够了)、Eval 永不等待(等待条件属于 Source)、禁止 Executor 自称“人让我停了”——停止与否只能由 Eval 决定。

05

实验数据:架构约束 > 提示词自觉

合成负载消融实验:每轮约 300 条消息(约 20 条真实工作请求,其余为闲聊、跟进、叫停、CI),用“只耗时的假工具”代替真实编码,四种方案各跑 5 次,时间按 1/4 缩放。它测的是调度能力,不是代码质量。

① 任务完成时长对比

分钟 · 越短越好 · 满刻度 30
p50 中位p95 长尾
Super-agent(双层架构)p50 快 39.2%
p50
12.4
p95
15.7
Super-agent · 无订阅直通
p50
12.6
p95
15.5
单会话 + subagent · 委派优先提示4/5 次才委派
p50
13.8
p95
29.0
单会话 + subagent · 中性提示5 次运行 0 次委派
p50
20.4
p95
29.5

关键洞察:中性提示下单会话 Agent 从不委派、被消息打断;改为“委派优先”提示后 5 次里仍有 1 次自判“活太小”亲自上手、长尾翻倍。Super-agent 取消了这个判断本身——Router 根本没有执行工具,想干也干不了。

② 缓存读取 Token(上下文经济学)

百万 tokens · 每轮 5 次合计 · 越少越好
缓存读取
单会话 · 中性提示
tok
6.1 M
单会话 · 委派优先
tok
10.8 M
Super-agent较无直通省 27%
tok
23.2 M
Super-agent · 无直通+37%
tok
31.8 M

直通的真相:去掉订阅直通后完成时间几乎不变(12.6 vs 12.4 分钟),但 Router 决策次数 +30%、缓存读取 23.2M→31.8M。直通省的是 token,不是时间。

③ Router 批处理压测

真实 Router + 模拟 Worker · 触发速率 1 → 40 条/分钟
平均批大小
1.0 → 2.8
单请求耗时
2.5 → 3.9 s
分摊推理 / 决策
6.4 → 1.6 s −75%
机制
长输入短输出 · Prefill 并行

结论:触发器风暴没有拖垮 Router——“拥堵”被转化为合批效率,单位决策成本降至 1/4。

06

开源原型实现细节(读码所得)

TypeScript · 深度集成 DeepSeek Harness(dsh)作为运行时;单 SQLite 状态库;文档-代码-测试三方互相引用(有测试强制文档索引完整、每个类必须有 JSDoc)。源码结构清晰:核心无 I/O、依赖单向、每类状态只有一个写者。

模型可见的工具面

角色工具数应用工具约束
Router 主会话14 orchestrator_readorchestrator_routeticket_retryticket_request_statusticket_notetrigger_requeueeval · eval_read · eval_decidereplythread_unsubscribesettings_save · policy_sync · prompts_save 禁 sleep;shell 超时 ≤30s、job 等待 ≤5s;路由注记 ≤30 词;一次 route 可带 1–20 个决策
Worker 执行会话6 orchestrator_readorchestrator_ackorchestrator_reportthread_unrelatedthread_followtrigger_handback 无“问人/展示 UI/改配置”类工具;工单结束后工具调用被拒;报告摘要 ≤600 字符(带续读指针)

关键数字速览

≤100 词 / ≤30 词
IM 回复硬上限 / 主会话路由注记上限(默认一句话)
5 s → 后台
router/worker 专属预设:前台命令超 5 秒自动转后台 job,完成即以事件唤醒
30 min
回合结束后台任务存活上限,超时杀掉并如实上报
200 行
默认 auto-merge 门槛:新增+删除少于 200 行才允许(且默认不由 agent 账户 merge)
2s→60s / 5s→300s
效果队列通用退避 / 发送与启动类退避;provider 瞬时失败(408/429/5xx)重试 3 次
3 次
同一效果连续失败 3 次才升级为面板“系统问题”;渠道消息 3 连败才允许后面的消息越过
2 周
工单结束后订阅 Thread 的继续轮询窗口;之后回归普通事件流
4000 / 8000 字符
资源文本页默认 / 上限;列表页 20 / 50 条;研判线程窗口 = 前 5 条 + 触发点前后各 5 条
1 个 SQLite
单文件 orchestrator.sqlite(schema 11)承载全部状态:触发、处置、工单、决定、效果、回执
每小时
Watchdog 检查:外部 profile 的 Agent 定时跑 scripts/dsh-superagent status,按退出码 0/1/2/3 决定静默 / 重启 / 上报
4,300+ / ~12.7k ★
上线 1 天 / 截至 2026-11-03 的 GitHub star

工程与安全要点

ARCH架构纪律(代码层面)
  • src/core 除 Node 哈希外零外部依赖、无 I/O;Engine 是触发/工单/决定的唯一写者。
  • Effects 持久副作用队列:中继、启动、投递、回复先入库后执行,崩溃可接续;每类状态只有一个写者。
  • Passes 每 2 秒驱动一次到期工作;域事件(ticket.created 等 12 种)驱动通知。
CREDS凭据与执行隔离
  • Setup 清除含 KEY/PASSWORD/SECRET/TOKEN 的环境变量;worker 通过 worker-bin 命令垫片用专属凭据,git 配置强制指向 agent 账户。
  • 阻断名单可禁命令(如个人 gh CLI);工单目录若被仓库 git 配置注入凭据则直接失败。
  • 变量不含凭据;个人 git 设置(如代理)不生效。
⚠ WARN官方明确的安全警告
  • 两个预设均以操作员 OS 用户 + danger-full-access 运行:目录不是沙箱,worker 可按路径执行任意程序、读家目录——官方建议使用只含 agent 凭据的专用 OS 账户。
  • 文章态度直白:云端 Loop 若被提示词注入攻破,所有连接的机器都会失守;“完全不接触凭据却能使用凭据”仍是开放问题。
  • 安全不解决,Super-agent 只能在小范围、高信任环境工作。
07

文章愿景 vs 开源原型:一张表看清边界

官方明确声明:原型是研究代码,文章中部分设计属于“未来方向、尚未实现”。两者的范围差异本身就传递了重要信息。

📄 文章《Super-agent 设计探索》

Vision · 通用架构愿景 · 2026-10-31
  • 跨多任务、多信道的通用超级智能体:聊天、评审、CI、邮件统一接单
  • 全双工交互(start/stop)、投机执行、Chain of Recall 链式召回
  • 存算分离 + BYOM:云端 Loop + 个人设备 daemon
  • Watchdog 独立会话:判断实质进展、在线改提示词
  • Router 可用轻量模型,甚至不配 shell
  • 实验为合成负载:假工具、约 20 个请求规模,验证调度而非质量

🐙 dsh-superagent-prototype

Prototype · 单仓库主动式编程 Agent · MIT
  • DeepSeek Harness bundle:3 个插件(主插件 + github-watch + feishu-watch 可选禁用)
  • 监听 GitHub 事件(+可选飞书):名单内的人 @ 即开工单 → 独立会话/目录干活 → 原线程回 PR
  • 已实现:Gate/准入表/mandate、订阅直通、handback、observe 模式、Web 面板(只显示需要人的事)
  • 哲学:只在被要求或书面规则允许时行动;未被请求的工作一律先“仅记录”
  • Agent 预设 danger-full-access(需专用 OS 账户);Watchdog 简化为每小时脚本检查
  • 内部实例已在 DeepSeek Harness 中日常运行(参与问题复现等),未来计划开放
08

四个开放问题(文章自述,语气最重的是安全)

OPEN-1
双层架构的扩展

单 Router Session 何时水平切分?Worker 间要不要直接通信?方向包括面向 Router 任务的“系统与模型协同设计”和跨月级长程记忆。

OPEN-2
脱离 Session 的人机协作

以聊天窗口为中心可能是路径依赖,交互或转向 Issue/PR 等领域特化界面;人类如何中途介入、接管一个“看不见的会话”待解。

OPEN-3
上下文边界与 A2A

多个隔离实例在互不共享底层模型、不同权限边界时如何安全协同?个人 Agent 与团队 Agent 的记忆边界在哪里?

OPEN-4 · 最重
安全与隐私

事件驱动放大不可信输入面;云端 Agent Loop 连着全部端侧设备,一旦被注入攻破即全端失守;凭据一旦进入模型上下文就有泄露风险。原文结论:安全不解决,Super-agent 只能在很小且可信的范围内工作。

Takeaway · 三句话带走(文章自己的总结)① 架构约束优于提示词自觉;② 上下文窗口当 Cache 管(Inline / Spill + 链式召回);③ Session 是实现细节,不是用户的认知负担。