Skip to content

任务系统与依赖图 ​

任务系统设计 ​

任务表示(Task Representation) ​

每个任务是一个结构化对象,包含以下核心字段:

字段类型说明
idstring任务唯一标识
subjectstring任务标题(祈使句,如"实现用户登录")
descriptionstring详细需求描述、上下文、验收标准
statusenum当前状态(见下方状态机)
ownerstring负责执行的 Agent 名称
dependenciesobject包含 blockedBy 和 blocks 两个关系列表
metadataobject扩展信息(优先级、标签、时间戳等)

任务状态机 ​

任务状态遵循严格的状态流转:

pending → in_progress → completed
                      → failed
                      → cancelled
状态含义触发条件
pending等待执行初始状态,或存在未完成的前置依赖
in_progress正在执行Agent 开始处理任务
completed成功完成所有验收标准满足
failed执行失败遇到无法自动恢复的错误
cancelled已取消任务不再需要或被替代

重要约束:

  • 只有当 blockedBy 列表中所有任务都已 completed 时,任务才能从 pending 转为 in_progress
  • 只有 Agent 完全完成任务时才能标记为 completed,部分完成保持 in_progress

依赖图(Dependency Graph) ​

任务之间通过 blockedBy 和 blocks 建立有向无环图(DAG):

  • blockedBy:本任务依赖哪些前置任务(必须等它们完成)
  • blocks:本任务完成后解锁哪些后续任务
示例依赖图:

  [1. 需求分析] ──blocks──→ [2. 架构设计] ──blocks──→ [3. 编码实现]
                                                          │
                              [4. 测试用例] ──blocks──→ [5. 集成测试]
                                    ↑
                                    └── blockedBy ── [2. 架构设计]

依赖图的核心价值:

  • 自动调度:系统根据依赖关系自动确定哪些任务可以开始
  • 并行发现:无依赖关系的任务可以并行执行
  • 影响分析:一个任务失败时,快速识别所有受影响的下游任务

任务调度策略 ​

阶段门控(Phase Gating) ​

复杂项目按阶段推进,每个阶段都是一个"门":

Research → Plan → Code → Verify → Review
  研究       规划    编码     验证     审查
阶段目标门控条件
Research理解问题、收集信息信息充分,问题定义清晰
Plan制定方案、分解任务方案合理,任务可执行
Code编码实现代码编写完成,编译通过
Verify测试验证测试通过,功能符合预期
Review代码审查质量达标,无遗留问题

不在 Research 充分的情况下跳到 Code,是 Agent 最常犯的错误之一。

并行调度 ​

依赖图分析后,无依赖关系的任务可并行分发给多个子 Agent:

  • 主 Agent 作为调度器(Orchestrator)
  • 每个子 Agent 独立处理一个子任务
  • 通过异步邮箱机制通信
  • 主 Agent 汇总结果后推进下一阶段

并行的前提:

  1. 任务之间无数据依赖
  2. 任务之间无资源冲突(如同一文件的修改)
  3. 每个子任务有足够的上下文独立完成

失败处理:Scoped Re-entry ​

任务失败时,不需要从头重来,而是限定范围的重试:

  1. 识别失败范围:确定哪个子任务、哪个步骤失败
  2. 保留成功部分:已完成的任务结果保持不变
  3. 重入执行:只重跑失败的子任务及其下游依赖
  4. 上下文恢复:从持久化状态恢复上下文
全部 5 个任务 → 任务 3 失败 → 只重跑 任务 3 + 任务 4(依赖 3)+ 任务 5(依赖 4)

持久化与恢复 ​

任务状态持久化 ​

所有任务状态实时写入持久存储:

  • 存储内容:任务定义、当前状态、依赖关系、执行历史
  • 存储方式:JSON 文件、数据库、或专用状态管理服务
  • 触发时机:每次状态变更时自动持久化

断点续做 ​

当 Agent 会话中断或超时后,可以从上次的状态继续:

  1. 加载任务图:恢复完整的任务依赖图
  2. 识别断点:找到所有 in_progress 和 pending 的任务
  3. 恢复上下文:从持久化数据中重建必要的上下文
  4. 继续执行:从断点处继续,不重复已完成的工作

这就是为什么任务系统需要 status 字段——它是断点续做的基础。


我的理解与思考 ​

(在此记录你对任务系统和依赖图的理解、疑问和延伸思考)