外观
任务系统与依赖图
任务系统设计
任务表示(Task Representation)
每个任务是一个结构化对象,包含以下核心字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识 |
subject | string | 任务标题(祈使句,如"实现用户登录") |
description | string | 详细需求描述、上下文、验收标准 |
status | enum | 当前状态(见下方状态机) |
owner | string | 负责执行的 Agent 名称 |
dependencies | object | 包含 blockedBy 和 blocks 两个关系列表 |
metadata | object | 扩展信息(优先级、标签、时间戳等) |
任务状态机
任务状态遵循严格的状态流转:
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 汇总结果后推进下一阶段
并行的前提:
- 任务之间无数据依赖
- 任务之间无资源冲突(如同一文件的修改)
- 每个子任务有足够的上下文独立完成
失败处理:Scoped Re-entry
任务失败时,不需要从头重来,而是限定范围的重试:
- 识别失败范围:确定哪个子任务、哪个步骤失败
- 保留成功部分:已完成的任务结果保持不变
- 重入执行:只重跑失败的子任务及其下游依赖
- 上下文恢复:从持久化状态恢复上下文
全部 5 个任务 → 任务 3 失败 → 只重跑 任务 3 + 任务 4(依赖 3)+ 任务 5(依赖 4)持久化与恢复
任务状态持久化
所有任务状态实时写入持久存储:
- 存储内容:任务定义、当前状态、依赖关系、执行历史
- 存储方式:JSON 文件、数据库、或专用状态管理服务
- 触发时机:每次状态变更时自动持久化
断点续做
当 Agent 会话中断或超时后,可以从上次的状态继续:
- 加载任务图:恢复完整的任务依赖图
- 识别断点:找到所有
in_progress和pending的任务 - 恢复上下文:从持久化数据中重建必要的上下文
- 继续执行:从断点处继续,不重复已完成的工作
这就是为什么任务系统需要
status字段——它是断点续做的基础。
我的理解与思考
(在此记录你对任务系统和依赖图的理解、疑问和延伸思考)