Super-Agent 架构演进(下):解耦设计与 NestJS 工程落地

下篇承接上篇: 上篇已阐述核心思想、三大架构转变、事件驱动、Task/Thread 管理、生命周期管理与可靠执行机制。上篇链接:https://blog.csdn.net/weixin_45284808/article/details/169941429

下篇目录

  1. Compute / State / Environment 解耦
  2. 完整架构与案例流程
  3. NestJS 工程实现建议
  4. 队列设计与边界场景
  5. 实施路线图
  6. 总结与参考资料

本文为系列下篇(第八~十三章),承接上篇《Super-Agent 架构演进(上):从 Prompt-driven 到 Event-driven》(背景、三大架构转变、事件驱动、Task/Thread 管理、生命周期、可靠执行与人工审批)。


八、Compute / State / Environment 解耦

8.1 三个组成部分

组成 职责


Compute Agent Loop、模型推理、任务调度

State Task、Session、执行记录、事件等持久化状态

Environment 文件系统、终端、代码仓库、执行工具

传统本地 Agent 将

Runtime、Session、文件系统和终端放在同一台电脑。电脑关机,Agent

也无法继续工作。

解耦后:
#mermaid-svg-UBeGdoutH1irw9En{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UBeGdoutH1irw9En .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UBeGdoutH1irw9En .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UBeGdoutH1irw9En .error-icon{fill:#552222;}#mermaid-svg-UBeGdoutH1irw9En .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UBeGdoutH1irw9En .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UBeGdoutH1irw9En .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UBeGdoutH1irw9En .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UBeGdoutH1irw9En .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UBeGdoutH1irw9En .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UBeGdoutH1irw9En .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UBeGdoutH1irw9En .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UBeGdoutH1irw9En .marker.cross{stroke:#333333;}#mermaid-svg-UBeGdoutH1irw9En svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UBeGdoutH1irw9En p{margin:0;}#mermaid-svg-UBeGdoutH1irw9En .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UBeGdoutH1irw9En .cluster-label text{fill:#333;}#mermaid-svg-UBeGdoutH1irw9En .cluster-label span{color:#333;}#mermaid-svg-UBeGdoutH1irw9En .cluster-label span p{background-color:transparent;}#mermaid-svg-UBeGdoutH1irw9En .label text,#mermaid-svg-UBeGdoutH1irw9En span{fill:#333;color:#333;}#mermaid-svg-UBeGdoutH1irw9En .node rect,#mermaid-svg-UBeGdoutH1irw9En .node circle,#mermaid-svg-UBeGdoutH1irw9En .node ellipse,#mermaid-svg-UBeGdoutH1irw9En .node polygon,#mermaid-svg-UBeGdoutH1irw9En .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UBeGdoutH1irw9En .rough-node .label text,#mermaid-svg-UBeGdoutH1irw9En .node .label text,#mermaid-svg-UBeGdoutH1irw9En .image-shape .label,#mermaid-svg-UBeGdoutH1irw9En .icon-shape .label{text-anchor:middle;}#mermaid-svg-UBeGdoutH1irw9En .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UBeGdoutH1irw9En .rough-node .label,#mermaid-svg-UBeGdoutH1irw9En .node .label,#mermaid-svg-UBeGdoutH1irw9En .image-shape .label,#mermaid-svg-UBeGdoutH1irw9En .icon-shape .label{text-align:center;}#mermaid-svg-UBeGdoutH1irw9En .node.clickable{cursor:pointer;}#mermaid-svg-UBeGdoutH1irw9En .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UBeGdoutH1irw9En .arrowheadPath{fill:#333333;}#mermaid-svg-UBeGdoutH1irw9En .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UBeGdoutH1irw9En .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UBeGdoutH1irw9En .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UBeGdoutH1irw9En .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UBeGdoutH1irw9En .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UBeGdoutH1irw9En .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UBeGdoutH1irw9En .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UBeGdoutH1irw9En .cluster text{fill:#333;}#mermaid-svg-UBeGdoutH1irw9En .cluster span{color:#333;}#mermaid-svg-UBeGdoutH1irw9En div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UBeGdoutH1irw9En .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UBeGdoutH1irw9En rect.text{fill:none;stroke-width:0;}#mermaid-svg-UBeGdoutH1irw9En .icon-shape,#mermaid-svg-UBeGdoutH1irw9En .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UBeGdoutH1irw9En .icon-shape p,#mermaid-svg-UBeGdoutH1irw9En .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UBeGdoutH1irw9En .icon-shape rect,#mermaid-svg-UBeGdoutH1irw9En .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UBeGdoutH1irw9En .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UBeGdoutH1irw9En .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UBeGdoutH1irw9En :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Cloud
Compute
State Store
Environment Gateway
Cloud VM
Local Daemon
云端文件系统 / Terminal
本地文件系统 / Terminal

8.2 解耦的价值

  1. 用户电脑关闭后,云端调度服务仍然存在。
  2. 可以在不同机器上运行 Worker。
  3. 同一个任务可以迁移执行环境。
  4. 任务状态不再依赖本地进程。
  5. 可以扩展多租户和资源调度。

本地 Daemon 不能简单暴露无限制远程

Shell,必须增加身份认证、环境级授权、命令执行策略、文件访问范围、网络访问策略、执行超时、操作审计和连接失效处理。


九、完整架构与案例流程

9.1 整体架构

#mermaid-svg-P3wuxHbnVLlcmtyp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-P3wuxHbnVLlcmtyp .error-icon{fill:#552222;}#mermaid-svg-P3wuxHbnVLlcmtyp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-P3wuxHbnVLlcmtyp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-P3wuxHbnVLlcmtyp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-P3wuxHbnVLlcmtyp .marker.cross{stroke:#333333;}#mermaid-svg-P3wuxHbnVLlcmtyp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-P3wuxHbnVLlcmtyp p{margin:0;}#mermaid-svg-P3wuxHbnVLlcmtyp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster-label text{fill:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster-label span{color:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster-label span p{background-color:transparent;}#mermaid-svg-P3wuxHbnVLlcmtyp .label text,#mermaid-svg-P3wuxHbnVLlcmtyp span{fill:#333;color:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp .node rect,#mermaid-svg-P3wuxHbnVLlcmtyp .node circle,#mermaid-svg-P3wuxHbnVLlcmtyp .node ellipse,#mermaid-svg-P3wuxHbnVLlcmtyp .node polygon,#mermaid-svg-P3wuxHbnVLlcmtyp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-P3wuxHbnVLlcmtyp .rough-node .label text,#mermaid-svg-P3wuxHbnVLlcmtyp .node .label text,#mermaid-svg-P3wuxHbnVLlcmtyp .image-shape .label,#mermaid-svg-P3wuxHbnVLlcmtyp .icon-shape .label{text-anchor:middle;}#mermaid-svg-P3wuxHbnVLlcmtyp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-P3wuxHbnVLlcmtyp .rough-node .label,#mermaid-svg-P3wuxHbnVLlcmtyp .node .label,#mermaid-svg-P3wuxHbnVLlcmtyp .image-shape .label,#mermaid-svg-P3wuxHbnVLlcmtyp .icon-shape .label{text-align:center;}#mermaid-svg-P3wuxHbnVLlcmtyp .node.clickable{cursor:pointer;}#mermaid-svg-P3wuxHbnVLlcmtyp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-P3wuxHbnVLlcmtyp .arrowheadPath{fill:#333333;}#mermaid-svg-P3wuxHbnVLlcmtyp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-P3wuxHbnVLlcmtyp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-P3wuxHbnVLlcmtyp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-P3wuxHbnVLlcmtyp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-P3wuxHbnVLlcmtyp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-P3wuxHbnVLlcmtyp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster text{fill:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp .cluster span{color:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-P3wuxHbnVLlcmtyp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-P3wuxHbnVLlcmtyp rect.text{fill:none;stroke-width:0;}#mermaid-svg-P3wuxHbnVLlcmtyp .icon-shape,#mermaid-svg-P3wuxHbnVLlcmtyp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-P3wuxHbnVLlcmtyp .icon-shape p,#mermaid-svg-P3wuxHbnVLlcmtyp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-P3wuxHbnVLlcmtyp .icon-shape rect,#mermaid-svg-P3wuxHbnVLlcmtyp .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-P3wuxHbnVLlcmtyp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-P3wuxHbnVLlcmtyp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-P3wuxHbnVLlcmtyp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Persistence Layer
Supervision Layer
Execution Layer
Task Domain
Event Layer
交互与事件入口
用户
GitHub
飞书 / IM
CI / CD
定时与监控
Source Adapters
Event Inbox
规则过滤 / 去重
身份与权限检查
Router / Eval
Thread Manager
Task / Ticket Manager
Subscription Manager
Task Queue
Assignment / Dispatcher
Worker Pool
OpenCode
Codex
Claude Code
Pi
Watchdog
Review / Evaluator
Human Approval
Task / Thread / Execution DB
Event / Audit Log
Artifacts / Checkpoints

9.2 案例:Vue 3 项目 CI 失败

阶段一:事件发现
text 复制代码
GitHub Actions 检测到 CI 失败
        |
        v
GitHub Webhook
        |
        v
Event Adapter
        |
        v
Event Inbox
        |
        v
持久化事件
        |
        v
规则过滤与权限检查
阶段二:任务识别
text 复制代码
Event Trigger
      |
      v
Thread Resolver
      |
      v
是否已经存在相关 Task?
      |
      +--------+
      |        |
      v        v
     是        否
      |        |
      v        v
  关联任务    Eval
      |        |
      |        v
      |     创建 Task
      |        |
      +--------+
           |
           v
       Task Queue
阶段三:任务执行
text 复制代码
Task #1024
      |
      v
Assignment
      |
      v
OpenCode Worker
      |
      v
创建 Execution
      |
      v
绑定 Session
      |
      v
读取项目上下文
      |
      v
修复登录模块
      |
      v
执行测试
      |
      v
生成 Report
阶段四:独立审查

OpenCode 提交开发结果,Codex 获取任务上下文并独立 Review。Review

不通过时,反馈问题给开发 Worker;通过后继续验收和 CI 检查。

阶段五:监督与恢复

Watchdog 检查 Worker

心跳、Lease、Session、执行进度、任务预算和执行证据。发现异常后进入恢复流程,而不是直接重新发送任务。

阶段六:最终交付
text 复制代码
代码修改完成
      |
      v
测试通过
      |
      v
Review 通过
      |
      v
CI 成功
      |
      v
人工审批(如需要)
      |
      v
PR 合并 / 交付
      |
      v
Task Completed
      |
      v
保存执行历史与审计记录

十、NestJS 工程实现建议

10.1 推荐模块结构

text 复制代码
src/
|-- modules/
|   |-- event/
|   |   |-- adapters/
|   |   |-- event-inbox/
|   |   |-- event-policy/
|   |   `-- event-processor/
|   |-- thread/
|   |   |-- thread.service.ts
|   |   `-- subscription.service.ts
|   |-- task/
|   |   |-- task.service.ts
|   |   |-- task-state-machine.ts
|   |   `-- task-resolver.ts
|   |-- assignment/
|   |-- execution/
|   |-- session/
|   |-- scheduler/
|   |-- worker/
|   |   |-- worker.interface.ts
|   |   |-- opencode/
|   |   |-- codex/
|   |   |-- claude-code/
|   |   `-- pi/
|   |-- watchdog/
|   |-- approval/
|   |-- artifact/
|   |-- audit/
|   `-- notification/
`-- app.module.ts

各模块通过接口和领域事件通信。Task Service 不应该直接依赖 OpenCode

的具体实现,而应通过统一 Worker Adapter 屏蔽执行器差异。

10.2 Worker Adapter 接口

typescript 复制代码
interface AgentWorker {
  provider: string;

  createSession(
    input: CreateSessionInput
  ): Promise<SessionInfo>;

  sendTask(
    input: SendTaskInput
  ): Promise<DispatchResult>;

  getExecutionStatus(
    input: GetExecutionStatusInput
  ): Promise<ExecutionStatus>;

  cancelExecution(
    input: CancelExecutionInput
  ): Promise<void>;

  getExecutionResult(
    input: GetExecutionResultInput
  ): Promise<ExecutionResult>;

  resumeSession(
    input: ResumeSessionInput
  ): Promise<SessionInfo>;
}

每种 Agent 实现自己的 Adapter:

text 复制代码
AgentWorker
  |-- OpenCodeWorker
  |-- CodexWorker
  |-- ClaudeCodeWorker
  `-- PiWorker

不同 Agent 的 API

能力不完全相同。不能假设每个执行器都支持相同的取消、恢复、状态查询和幂等能力。Adapter

应明确声明能力,不支持的功能不能伪装成已经支持。

10.3 核心数据库表

tasks

字段 类型 说明


id VARCHAR 任务 ID

title VARCHAR 任务标题

description TEXT 任务描述

mandate JSON 任务意图和权限约束

acceptance_criteria JSON 验收标准

status VARCHAR 任务状态

priority VARCHAR 优先级

created_at DATETIME 创建时间

updated_at DATETIME 更新时间

events

字段 类型 说明


id VARCHAR 内部事件 ID

source_id VARCHAR 来源实例

external_event_id VARCHAR 外部事件 ID

event_type VARCHAR 事件类型

payload JSON 事件内容

status VARCHAR 处理状态

received_at DATETIME 接收时间

对 (source_id, external_event_id) 建立唯一约束。

threads

字段 类型 说明


id VARCHAR Thread ID

source_type VARCHAR 来源类型

external_id VARCHAR 外部 Thread ID

metadata JSON 附加信息

status VARCHAR 状态

唯一约束应考虑租户隔离范围。

task_threads

字段 类型 说明


id VARCHAR 关联 ID

task_id VARCHAR Task ID

thread_id VARCHAR Thread ID

subscription_status VARCHAR 订阅状态

created_at DATETIME 创建时间

assignments

字段 类型 说明


id VARCHAR Assignment ID

task_id VARCHAR Task ID

agent_provider VARCHAR 执行器类型

role VARCHAR 执行角色

status VARCHAR 分配状态

created_at DATETIME 创建时间

executions

字段 类型 说明


id VARCHAR Execution ID

assignment_id VARCHAR Assignment ID

session_id VARCHAR Session ID

attempt INT 执行次数

status VARCHAR 执行状态

lease_owner VARCHAR 租约持有者

lease_expires_at DATETIME 租约过期时间

fencing_token BIGINT 防过期写入令牌

started_at DATETIME 开始时间

finished_at DATETIME 结束时间

execution_events

字段 类型 说明


id VARCHAR 事件 ID

execution_id VARCHAR Execution ID

event_type VARCHAR 执行事件类型

payload JSON 事件数据

created_at DATETIME 创建时间

建议另外增加

sessions、artifacts、approvals、outbox_events、audit_logs 和

task_dependencies。具体可按业务规模拆分,但不要牺牲核心实体之间的职责边界。


十一、队列设计与边界场景

11.1 不要把所有队列混在一起

队列 作用 处理对象


Event Inbox 接收外部事件 Event

Task Queue 等待执行的业务任务 Task

Wake Queue 向已有 Session 投递消息 Session / Message

Execution Queue 调度具体执行尝试 Execution

Recovery Queue 处理异常执行 Recovery Job

Notification Queue 发送用户通知 Notification

它们可以使用同一套 Redis、BullMQ

或数据库基础设施,但不能混用状态和业务含义。
#mermaid-svg-PbLGygM30VqjSvXv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PbLGygM30VqjSvXv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PbLGygM30VqjSvXv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PbLGygM30VqjSvXv .error-icon{fill:#552222;}#mermaid-svg-PbLGygM30VqjSvXv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PbLGygM30VqjSvXv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PbLGygM30VqjSvXv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PbLGygM30VqjSvXv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PbLGygM30VqjSvXv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PbLGygM30VqjSvXv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PbLGygM30VqjSvXv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PbLGygM30VqjSvXv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PbLGygM30VqjSvXv .marker.cross{stroke:#333333;}#mermaid-svg-PbLGygM30VqjSvXv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PbLGygM30VqjSvXv p{margin:0;}#mermaid-svg-PbLGygM30VqjSvXv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PbLGygM30VqjSvXv .cluster-label text{fill:#333;}#mermaid-svg-PbLGygM30VqjSvXv .cluster-label span{color:#333;}#mermaid-svg-PbLGygM30VqjSvXv .cluster-label span p{background-color:transparent;}#mermaid-svg-PbLGygM30VqjSvXv .label text,#mermaid-svg-PbLGygM30VqjSvXv span{fill:#333;color:#333;}#mermaid-svg-PbLGygM30VqjSvXv .node rect,#mermaid-svg-PbLGygM30VqjSvXv .node circle,#mermaid-svg-PbLGygM30VqjSvXv .node ellipse,#mermaid-svg-PbLGygM30VqjSvXv .node polygon,#mermaid-svg-PbLGygM30VqjSvXv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PbLGygM30VqjSvXv .rough-node .label text,#mermaid-svg-PbLGygM30VqjSvXv .node .label text,#mermaid-svg-PbLGygM30VqjSvXv .image-shape .label,#mermaid-svg-PbLGygM30VqjSvXv .icon-shape .label{text-anchor:middle;}#mermaid-svg-PbLGygM30VqjSvXv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PbLGygM30VqjSvXv .rough-node .label,#mermaid-svg-PbLGygM30VqjSvXv .node .label,#mermaid-svg-PbLGygM30VqjSvXv .image-shape .label,#mermaid-svg-PbLGygM30VqjSvXv .icon-shape .label{text-align:center;}#mermaid-svg-PbLGygM30VqjSvXv .node.clickable{cursor:pointer;}#mermaid-svg-PbLGygM30VqjSvXv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PbLGygM30VqjSvXv .arrowheadPath{fill:#333333;}#mermaid-svg-PbLGygM30VqjSvXv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PbLGygM30VqjSvXv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PbLGygM30VqjSvXv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PbLGygM30VqjSvXv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PbLGygM30VqjSvXv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PbLGygM30VqjSvXv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PbLGygM30VqjSvXv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PbLGygM30VqjSvXv .cluster text{fill:#333;}#mermaid-svg-PbLGygM30VqjSvXv .cluster span{color:#333;}#mermaid-svg-PbLGygM30VqjSvXv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PbLGygM30VqjSvXv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PbLGygM30VqjSvXv rect.text{fill:none;stroke-width:0;}#mermaid-svg-PbLGygM30VqjSvXv .icon-shape,#mermaid-svg-PbLGygM30VqjSvXv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PbLGygM30VqjSvXv .icon-shape p,#mermaid-svg-PbLGygM30VqjSvXv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PbLGygM30VqjSvXv .icon-shape rect,#mermaid-svg-PbLGygM30VqjSvXv .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PbLGygM30VqjSvXv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PbLGygM30VqjSvXv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PbLGygM30VqjSvXv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 外部事件
Event Inbox
事件处理
创建新 Task
关联已有 Task
Task Queue
Wake Queue
Execution Scheduler
Execution Queue
Worker
Execution Events
Task 更新
Watchdog

  • Wake Queue 负责唤醒或投递。
  • Task Queue 负责业务任务调度。
  • Execution Queue 负责具体执行资源调度。

任务被唤醒不等于任务已经获得执行权。

11.2 必须考虑的边界场景

场景 风险 处理策略


Webhook 重复发送 重复创建任务 Event ID 幂等

事件乱序到达 状态错误 事件时间与版本核对

同一 Thread 多个任务订阅 重复处理 Subscription 策略

评论超出任务范围 错误执行 重新评估 Mandate

Worker 突然退出 任务中断 Lease + Reconciliation

Session 仍在运行但连接断开 重复执行 UNKNOWN_DELIVERY

两个 Worker 同时获得任务 并发冲突 Lease + Fencing

Worker 重复提交结果 状态覆盖 Execution ID + 幂等

用户取消任务 副作用未停止 Cancel Request + 确认

任务依赖未完成 提前执行 Dependency Graph

Review 不通过 无法闭环 返回开发阶段

CI 反复失败 无限修复 Retry Budget

Agent 陷入循环 消耗资源 Watchdog + 预算

模型输出错误 错误调度 Schema 校验 + Policy

用户权限被撤销 越权执行 执行前再次检查授权

本地执行环境离线 无法继续执行 暂停、等待或迁移

系统服务重启 状态丢失 数据库恢复 + Reconciliation

人工审批超时 任务长期挂起 审批超时策略


十二、实施路线图

不建议一次性实现所有能力,应该从基础事件与任务模型开始,逐步升级。

Phase 1:Event-driven 基础设施

目标: 可靠接入和关联事件。

实施内容:

  • 统一 Event 数据结构。
  • Event Inbox 持久化。
  • Webhook 验签。
  • Event ID 幂等。
  • 规则过滤。
  • 用户权限检查。
  • Thread Resolver。
  • Task Resolver。
  • 基础 Eval。
  • 事件处理失败重试。

验收标准:

  • 重复事件不会重复创建任务。
  • 无效事件可以被过滤。
  • 事件能够关联已有任务。
  • 事件处理过程可以追踪。
  • 服务重启不会丢失未处理事件。

Phase 2:Task / Thread 数据模型

目标: 从 Session 中解耦业务任务。

实施内容:

  • Task 独立持久化。
  • Thread 独立持久化。
  • Task / Thread 多对多关联。
  • Assignment 记录。
  • Execution 历史。
  • Session 独立管理。
  • Artifact 和 Checkpoint。
  • Mandate 和验收标准。
  • 统一任务上下文构建。

验收标准:

  • 一个 Task 可以经过多个 Agent 执行。
  • 一个 Task 可以关联多个 Thread。
  • Session 关闭不会导致 Task 丢失。
  • 能够通过 Execution History 追踪任务。
  • 更换执行器时能够重建任务上下文。

Phase 3:可靠执行与生命周期

目标: 确保任务能够持续运行和恢复。

实施内容:

  • Task 状态机。
  • Execution 状态机。
  • Session 状态机。
  • 异步执行。
  • Lease。
  • Fencing Token。
  • Idempotency Key。
  • UNKNOWN_DELIVERY。
  • Reconciliation。
  • Cancel / Resume。
  • Transactional Outbox。

验收标准:

  • 系统重启后可以恢复任务状态。
  • 过期 Worker 无法覆盖新执行结果。
  • 不确定送达时不会盲目重复执行。
  • 同一个任务不会被多个 Worker 无保护地并发执行。
  • 可以安全取消和恢复任务。

Phase 4:Watchdog 与自动恢复

目标: 监督 Agent 的真实进展。

实施内容:

  • Worker 心跳。
  • Session 健康检查。
  • Lease 检查。
  • 执行进度检查。
  • 超时与预算控制。
  • 重复操作检测。
  • 语义进度评估。
  • 自动恢复策略。
  • 异常通知。

验收标准:

  • 能够识别执行器断开。
  • 能够识别任务停滞。
  • 能够识别重复执行。
  • 能够区分执行失败和送达未知。
  • 自动恢复有重试上限和审计记录。

Phase 5:自主协作与长期运行

目标: 实现持续自主的 Agent 协作系统。

实施内容:

  • GitHub / CI / IM 等多来源接入。
  • Thread Subscription。
  • 多 Agent 动态调度。
  • 任务依赖图。
  • 自动 Review。
  • 自动测试。
  • 人工审批。
  • 云端 Compute。
  • 本地 Environment Daemon。
  • 多租户资源隔离。
  • 成本和质量评估。

验收标准:

  • 外部事件可以自动触发任务。
  • 多 Agent 可以完成不同阶段的协作。
  • 任务可以跨 Session 持续推进。
  • 异常情况下能够恢复或请求人工介入。
  • 任务交付具有可验证证据。
  • 整个过程可以审计和追踪。

十三、总结与参考资料

13.1 三个转变的本质

维度 传统模式 Super-Agent 模式


触发方式 用户 Prompt Event + Prompt

工作入口 单次请求 多来源事件

核心实体 Session Task / Thread

上下文 聊天历史 持久化任务上下文

执行 同步或单次执行 异步、多阶段执行

调度 人工管理 Router / Scheduler

监督 用户检查 Watchdog

恢复 人工重新启动 Reconciliation

验收 Agent 自我声明 验收标准与执行证据

人类参与 持续跟进 关键决策和审批

13.2 最重要的十条架构原则

  1. 事件与执行解耦: 外部事件接入不能直接依赖 Agent 执行过程。
  2. Task 独立于 Session: 任务必须拥有自己的持久化生命周期。
  3. Thread 独立于 Session: Thread 是业务上下文关联,不是聊天窗口。
  4. Assignment 与 Execution 分离:
    分配关系和实际执行过程不能混为一谈。
  5. 先持久化,再执行: 外部副作用发生前必须记录调度意图。
  6. 不确定送达不能盲目重试: 必须通过 Reconciliation 核对真实状态。
  7. Lease 必须配合 Fencing: 防止过期执行者继续提交结果。
  8. 执行成功不等于任务完成: 任务必须经过验收。
  9. Watchdog 独立监督: 不能只依赖 Worker 自己报告运行状态。
  10. 自主执行必须受授权约束: 减少人工参与,不代表取消安全边界。

13.3 最终理解

Super-Agent 并不是一个拥有更多工具、更大模型或者更多子 Agent 的普通

Agent。它代表一种系统架构演进:
#mermaid-svg-ByyOHxbh7Ypjnvz3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .error-icon{fill:#552222;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .marker.cross{stroke:#333333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 p{margin:0;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster-label text{fill:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster-label span{color:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster-label span p{background-color:transparent;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .label text,#mermaid-svg-ByyOHxbh7Ypjnvz3 span{fill:#333;color:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .node rect,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node circle,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node ellipse,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node polygon,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .rough-node .label text,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node .label text,#mermaid-svg-ByyOHxbh7Ypjnvz3 .image-shape .label,#mermaid-svg-ByyOHxbh7Ypjnvz3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .rough-node .label,#mermaid-svg-ByyOHxbh7Ypjnvz3 .node .label,#mermaid-svg-ByyOHxbh7Ypjnvz3 .image-shape .label,#mermaid-svg-ByyOHxbh7Ypjnvz3 .icon-shape .label{text-align:center;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .node.clickable{cursor:pointer;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .arrowheadPath{fill:#333333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ByyOHxbh7Ypjnvz3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ByyOHxbh7Ypjnvz3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster text{fill:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .cluster span{color:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ByyOHxbh7Ypjnvz3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .icon-shape,#mermaid-svg-ByyOHxbh7Ypjnvz3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .icon-shape p,#mermaid-svg-ByyOHxbh7Ypjnvz3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .icon-shape rect,#mermaid-svg-ByyOHxbh7Ypjnvz3 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ByyOHxbh7Ypjnvz3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ByyOHxbh7Ypjnvz3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ByyOHxbh7Ypjnvz3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Prompt-driven Agent
Event-driven Agent
Task-centric Multi-Agent
Lifecycle-managed Agent System
持续运行的 Super-Agent

三个问题可以概括全部设计:

  • Event-driven: 系统如何知道什么时候应该工作?
  • Task / Thread-driven:
    系统如何知道正在处理哪件事,以及应该使用什么上下文?
  • Lifecycle Management: 系统如何确保这件事能够可靠地完成?

最终目标是:

让人类负责目标、约束和关键决策,让系统负责事件感知、任务组织、Agent
调度、执行监督、异常恢复和结果交付。

这才是从传统 AI 编程助手走向企业级自主 Agent 系统的关键一步。

13.4 官方参考资料

以下资料用于研究 DeepSeek

的原始设计。需要区分官方原型已经实现的内容与本文进一步提出的企业级扩展设计。


文档 研究重点


000 Philosophy Super-Agent 核心理念

001 Domain Model Source、Trigger、Thread、Ticket、Assignment

002 权限和自主执行边界
Authorization

003 Execution 执行机制与任务生命周期

004 Prompts Agent 提示词设计

005 Panel 管理面板

006 Deployment 部署与配置

007 内部架构实现
Architecture

008 Cookbook 扩展 Source

官方项目: https://github.com/deepseek-ai/dsh-superagent-prototype


文档结论: Super-Agent 的价值不在于让某个 Agent

变得更强,而在于构建一套能够持续接收事件、组织任务、调度多个执行器、监督执行过程并可靠交付结果的系统。

相关推荐
lucas_AI2 小时前
你只是打开了 Postman,Claude Code 和 Codex 却多了个插件
agent
lucas_AI2 小时前
Retrieval as Traversal:Agent 的记忆该按「价值」排地址,而不是按「相似度」
agent
Decay__2 小时前
17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战
运维·数据库·sql·mysql·架构
阿文和她的Key2 小时前
算力零售化的四层架构:从 0.01 元月卡看 AI 服务的计量、履约与复购
人工智能·架构·零售
天远数科2 小时前
零信任架构实战:基于天远全能家政风险报告构建自动化即时到家保洁与短工抢单安全核验网关
运维·人工智能·架构·自动化
hpoenixf2 小时前
同一个 Agent,怎样确保每个人只看到自己的研究?
agent
hpoenixf2 小时前
报告已经生成,为什么还不能直接分享?
agent
hpoenixf2 小时前
Agent 什么时候该继续查,什么时候该开始回答?
agent
hpoenixf2 小时前
精确数字并不等于正确投资:单位、舍入与残差的数值核设计
agent