一文搞懂 Agent TODO:AI 如何把复杂任务一步步做完
一文搞懂 Agent TODO:AI 是如何把复杂任务一步步做完的? - Tomorrowland_D
文章解释 Agent 执行长任务时为何会遗漏步骤,并说明 TODO 机制通过拆解任务、记录进度和管理执行状态来解决这一问题。
一文搞懂 Agent TODO:AI 是如何把复杂任务一步步做完的?
一、问题从哪里来?
假设你让一个 Coding Agent 帮你开发 JWT 用户认证系统。
它需要分析项目、设计数据库、编写接口、实现 Token 验证,最后运行测试。整个任务可能涉及十几个步骤。
一开始,Agent 执行得很顺利。但进行到一半,你突然发现:它跳过了其中一个步骤,却直接告诉你任务已经完成。
为什么会这样?
因为 Agent 在执行长任务时,需要不断处理代码、工具返回结果、错误日志等信息。随着上下文不断增长,早期的任务要求可能被忽略,导致步骤遗漏或重复执行。
这和人类工作很相似。飞行员起飞前需要检查清单,程序员开发项目也会使用 TODO List。
Agent 同样需要一份任务清单,这就是 TODO 机制存在的意义。
二、什么是 TODO 机制?
TODO 机制本质上是一套帮助 Agent 拆解任务、记录进度、管理执行状态 的机制。
例如,开发 JWT 认证系统时,可以将任务拆解为:
- 分析项目结构和依赖
- 设计用户数据结构
- 实现登录和 Token 签发
- 实现 Token 验证
- 编写测试并验证功能
在实际系统中,每个任务通常具有三种状态:
| 状态 | 含义 |
|---|---|
pending |
等待执行 |
in_progress |
正在执行 |
completed |
已经完成 |
Agent 每完成一个步骤,就更新对应的任务状态,再根据清单决定下一步应该做什么。
这样做主要有三个好处:
- 防止遗漏: 提醒 Agent 哪些任务已经完成,哪些还没有执行。
- 进度可视化: 用户可以清楚地看到任务执行到了哪里。
- 支持任务编排: 方便管理复杂任务的执行顺序、依赖关系和协作过程。
需要注意,TODO 并不能保证 Agent 一定不会犯错,它只是让任务执行过程更加有序、可追踪。
三、TODO 机制是如何实现的?
以 Claude Code 为例,我们可以了解两种具有代表性的任务管理方案:TodoWrite 和 Task。
1. TodoWrite:简单的任务清单
TodoWrite 是 Claude Code 早期使用的任务管理工具。
可以把它理解为一张便利贴:Agent 把需要完成的事情列出来,每做完一项,就更新对应状态。
它具有几个特点:
- 面向单次会话: 主要用于当前会话内的任务追踪。
- 扁平化结构: 任务以列表形式组织,不支持显式的任务依赖关系。
- 全量更新: 更新状态时,需要提交完整的任务清单。
例如,修复一个 Bug:
- 定位问题。
- 修改代码。
- 运行测试。
- 检查修改结果。
这种任务没有复杂的依赖关系,也不需要多个 Agent 协作,使用简单的 Checklist 就足够了。
但如果任务需要跨越多个会话,或者涉及多个 Agent 并行工作,简单的任务清单就不太方便了。
2. Task:更完整的任务管理系统
为了解决这些问题,Claude Code 在后续版本中引入了 Task 系统。
相比 TodoWrite,Task 不再只是简单地记录待办事项,而是提供了一套结构化的任务管理能力。
它主要包含四个工具:
| 工具 | 作用 |
|---|---|
TaskCreate |
创建任务 |
TaskGet |
获取任务详情 |
TaskUpdate |
更新任务状态、依赖等 |
TaskList |
查看任务列表 |
Task 的主要优势体现在三个方面。
① 持久化存储
任务数据可以保存在本地磁盘中,而不只是依赖当前对话上下文。
因此,即使上下文被压缩,任务记录也可以保留。通过配置共享任务列表标识,还可以在不同会话之间继续使用同一份清单。
② 任务依赖管理
假设开发一个认证系统,需要执行以下任务:
- 任务 A:设计数据库结构。
- 任务 B:实现登录接口,依赖 A。
- 任务 C:实现 Token 验证,依赖 B。
- 任务 D:执行集成测试,依赖 B、C。
Task 可以记录这些依赖关系。
当任务 A 尚未完成时,任务 B 就处于阻塞状态。只有前置任务完成后,后续任务才能解除阻塞。
这样能够帮助 Agent 判断任务是否具备执行条件。
③ 多 Agent 协作
多个 Agent 可以通过共享任务列表协调工作。
例如:
- Agent A:负责后端接口。
- Agent B:负责前端页面。
- Agent C:负责集成测试。
不同 Agent 可以查看任务状态、认领任务并更新进度,从而减少重复工作。
不过,任务列表负责记录和协调状态,并不直接解决代码冲突、资源竞争等并发问题。
四、TodoWrite 和 Task 有什么区别?
我们用一张表来总结:
| 对比维度 | TodoWrite | Task |
|---|---|---|
| 核心定位 | 简单检查清单 | 结构化任务管理 |
| 任务组织 | 扁平列表 | 独立任务与依赖关系 |
| 状态更新 | 全量更新 | 单任务更新 |
| 持久化 | 主要面向当前会话 | 本地持久化 |
| 多会话协作 | 不支持共享任务列表 | 支持 |
| 适用场景 | 简单、短期任务 | 复杂、长期任务 |
可以这样理解:
TodoWrite 像便利贴,Task 更像轻量级项目管理工具。
两者都能帮助 Agent 追踪任务,但 Task 在此基础上增加了持久化、依赖管理和多会话协作能力。
五、什么时候使用 TodoWrite,什么时候使用 Task?
了解两种机制的区别后,一个实际问题是:开发 Agent 时,应该选择哪一种?
主要考虑三个因素:任务复杂度、是否需要持久化、是否涉及多 Agent 协作。
1. TodoWrite:适合简单、短期任务
如果任务可以在一次会话中完成,没有复杂的依赖关系,也不需要多个 Agent 协作,那么简单的 Checklist 通常就足够了。
例如:
- 修复一个 Bug,按照定位、修改、测试的顺序执行。
- 批量处理文件,确保每个文件都被处理。
- 执行一个包含多个步骤的自动化脚本。
这类任务的主要需求是防止步骤遗漏,而不是复杂的任务调度。
因此,TodoWrite 更适合单 Agent、短流程的任务追踪。
2. Task:适合复杂、长期任务
如果任务具备以下特征,就更适合使用 Task:
- 跨会话执行: 今天完成一部分,明天继续。
- 存在任务依赖: 必须完成 A,才能执行 B。
- 多个 Agent 协作: 不同 Agent 需要共享任务状态。
- 任务数量较多: 需要独立更新和管理任务。
例如,开发一个完整的用户认证系统,需要完成数据库设计、后端接口、前端页面和集成测试。
这些任务之间存在依赖,还可能由多个 Agent 并行执行。
此时,Task 的持久化、依赖管理和共享能力就能发挥作用。
3. 能否组合使用?
从架构设计角度来看,可以采用一种两级任务管理的思路:
- 项目级: 使用 Task 管理主要任务及其依赖关系。
- 执行级: 在具体任务内部,使用简单的 Checklist 追踪操作步骤。
例如,Task 中有一个任务叫“实现登录接口”。
执行这个任务时,Agent 可以进一步拆解为:
- 创建接口。
- 实现密码验证。
- 生成 JWT。
- 编写单元测试。
这样既能管理项目整体进度,也能防止具体执行过程遗漏步骤。
需要说明的是,这是一种通用的 Agent 架构设计思路,并不意味着 Claude Code 当前版本一定可以同时调用 TodoWrite 和 Task 两套工具。
总结:简单任务使用 Checklist,复杂任务使用结构化 Task。是否需要跨会话、依赖管理和多 Agent 协作,是最重要的判断依据。
六、TODO 与上下文工程有什么关系?
如果你已经学习过 Context Engineering(上下文工程),会发现 TODO 与它有着密切的联系。
上下文工程的核心目标是:让模型在每次推理时,都能获得真正需要的信息。
而 TODO 恰好可以提供一种简洁、结构化的任务状态。
假设一个 Agent 已经执行了 30 个步骤。
没有 TODO 时,模型可能需要从冗长的对话历史中寻找任务进度。
有了 TODO 后,Agent 只需要查看任务清单,就可以快速了解:
- 当前目标是什么?
- 已经完成哪些任务?
- 下一步应该做什么?
如果清单还被持久化到外部存储中,就可以在上下文压缩或会话恢复时重新加载。
因此,TODO 可以理解为 Agent 的一种外部任务状态管理机制,它与 Context Engineering、Agent Memory 都存在联系,但不等同于完整的记忆系统。
七、总结
TODO 机制看似简单,却是 Agent 执行复杂任务时非常实用的基础设施。
它解决的主要不是模型的推理能力问题,而是任务执行过程中的状态管理与流程控制问题。
本文介绍了两种典型实现:
- TodoWrite: 适合简单任务,通过 Checklist 帮助 Agent 追踪执行步骤。
- Task: 适合复杂任务,在清单的基础上支持持久化、依赖管理和多 Agent 协作。
在实际工程中,我们应该根据任务复杂度选择合适的管理方式,而不是为每个简单任务引入复杂的编排系统。
一个可靠的 Agent,不仅要知道如何完成任务,还要清楚自己已经做了什么、正在做什么,以及接下来应该做什么。
版本说明: TodoWrite 和 Task 是 Claude Code 不同阶段的任务管理方案。目前 Task 系列工具优先于 TodoWrite,但较新模型不一定默认启用专用任务工具。实际使用时应以对应版本和配置为准。
来源:博客园 · cnblogs.com