概述
在前面几节中,我们讨论了如何通过摘要压缩管理上下文、如何通过人工审批控制风险、如何限制调用次数控制成本,以及如何保护敏感信息。现在我们要关注另一个问题:如何让AI智能体更好地处理复杂任务,特别是那些需要多步骤、长时间执行的任务。
当任务很复杂时,AI智能体可能会迷失方向,不知道下一步该做什么。或者用户想了解任务进度,却发现AI智能体无法清楚地说明当前状态。
To-do list中间件就是为了解决这个问题而设计的。它为AI智能体提供任务规划与跟踪能力,让AI智能体能够将复杂任务拆解成多个子任务,创建待办清单,并在执行过程中跟踪进度、调整计划。这样,AI智能体就能更有条理地处理复杂任务,用户也能清楚地了解任务进展。
使用场景
复杂多步骤任务
需要协调多个工具、按顺序执行的复杂任务。比如"分析销售数据并生成可视化报告",这个任务涉及多个步骤:获取数据、清洗数据、分析数据、生成图表、生成报告等。
长时间运行任务
需要较长时间完成的任务,比如"爬取网站并整理数据"。通过待办清单,用户可以清楚地看到当前进度,知道任务进行到哪一步了。
任务分解与优先级
AI智能体可以将复杂任务拆解为子任务,并设置优先级,按重要性顺序执行。这样能确保重要任务优先完成。
核心功能需求
自动任务规划
当AI智能体收到一个复杂任务时,应该能够自动分析任务,并将其拆解为多个可执行的子任务。
任务拆解逻辑
- 识别任务复杂度:判断任务是否需要规划(简单任务可能不需要)
- 任务分解:将复杂任务拆解为多个子任务
- 依赖关系识别:识别子任务之间的依赖关系,确定执行顺序
- 优先级设定:为子任务设置优先级
产品建议:可以在PRD中约定任务复杂度阈值,比如任务涉及3+个工具、预计执行时间>30秒,超过阈值则触发规划。
待办清单创建
AI智能体使用<code>write_todos</code>工具创建待办清单,每个待办项包含:
- ID:唯一标识符
- 描述:任务描述
- 状态:pending(待执行)、in_progress(执行中)、completed(已完成)
进度跟踪与更新
在执行过程中,AI智能体需要能够更新待办清单的状态,反映当前的执行进度。
状态更新机制
- 自动更新:当AI智能体开始执行某个子任务时,自动将状态更新为<code>in_progress</code>
- 完成标记:任务完成后,将状态更新为<code>completed</code>
- 失败处理:如果任务失败,可以标记为失败状态,并允许调整后续计划
动态调整
AI智能体可以根据执行过程中的新信息动态调整计划:
- 添加新任务:发现需要额外的步骤,可以添加新的待办项
- 删除任务:发现某些步骤不必要,可以删除
- 调整优先级:根据实际情况调整任务的执行优先级
可观测性
待办清单不仅用于AI智能体内部规划,也可以向用户展示,让用户了解任务进展。
可视化展示
- 进度展示:可以向用户展示当前进度,比如"已完成3/5个任务"
- 任务列表:可以展示待办清单,让用户看到所有任务及其状态
- 实时更新:任务状态实时更新,用户可以看到最新的进展
产品建议:如果应用有前端界面,建议展示待办清单,提升用户体验。
PRD需求描述
功能需求
FR-1: 自动任务规划
- 描述:AI智能体能够自动分析复杂任务,并将其拆解为多个子任务
- 触发条件:可以配置任务复杂度阈值,超过阈值则触发规划
- 任务拆解:支持将任务拆解为多个子任务,识别依赖关系和优先级
- 优先级:P0(核心功能)
FR-2: 待办清单管理
- 描述:AI智能体可以使用<code>write_todos</code>工具创建、更新待办清单
- 清单结构:每个待办项包含ID、描述、状态等信息
- 状态管理:支持pending、in_progress、completed等状态
- 优先级:P0(核心功能)
FR-3: 进度跟踪与更新
- 描述:在执行过程中自动更新待办清单状态,反映当前进度
- 动态调整:支持根据执行情况动态添加、删除、修改待办项
- 优先级调整:支持调整待办项的优先级
- 优先级:P0(核心功能)
FR-4: 任务可视化
- 描述:向用户展示待办清单和任务进度
- 进度展示:展示当前进度,如"已完成3/5个任务"
- 任务列表:展示所有任务及其状态
- 实时更新:任务状态实时更新
- 优先级:P1
非功能需求
NFR-1: 状态持久化
- 状态保存:待办清单保存在Agent state中,需要支持状态持久化
- 跨请求保持:待办清单需要在多轮请求中保持一致性
- 状态大小限制:需要注意state大小限制,避免待办项过多导致state过大
NFR-2: 性能要求
- 规划成本:创建待办清单需要额外的模型调用,需要控制成本
- 规划时间:任务规划不应显著影响响应时间
NFR-3: 可观测性
- 进度日志:记录任务规划的详细信息,包括待办清单内容、状态更新等
- 监控指标:监控任务规划触发率、平均任务数量、任务完成率等
产品设计要点
任务规划触发条件
简单任务:
- 单步骤任务(如"查询天气")不需要规划
- AI智能体可以直接执行
复杂任务:
- 多步骤任务(如"分析数据并生成报告")应该触发规划
- 可以在PRD中约定复杂度阈值
判断标准:
- 任务涉及的工具数量(如3+个工具)
- 预计执行时间(如>30秒)
- 任务复杂度评分
产品建议:建议在PRD中明确任务复杂度判断标准,确保AI智能体能够准确识别何时需要规划。
待办清单可视化设计
前端展示:
- 展示待办清单,让用户看到所有任务
- 用不同颜色或图标区分不同状态(待执行、执行中、已完成)
- 展示进度条,直观显示完成进度
进度反馈:
- 定期向用户反馈当前进度(如"已完成3/5个任务")
- 当任务状态更新时,及时通知用户
产品建议:如果有前端界面,建议设计清晰的待办清单展示,提升用户体验。
计划调整机制
动态更新:
- 支持在执行过程中动态添加、删除、修改待办项
- 当发现新信息时,能够灵活调整计划
优先级调整:
- 支持调整待办项的优先级
- 确保重要任务优先执行
计划回滚:
- 如果执行过程中发现计划不可行,支持重新规划
产品建议:在PRD中明确计划调整的规则和限制,确保AI智能体能够合理调整计划。
使用建议
什么时候应该使用
- 复杂多步骤任务:任务涉及多个步骤,需要协调多个工具
- 长时间运行任务:任务需要较长时间完成,用户需要了解进度
- 需要任务分解的场景:需要将复杂任务拆解为子任务并设置优先级
配置建议
- 任务复杂度阈值:根据实际场景设置合理的阈值
- 状态持久化:生产环境需要配置状态持久化,确保待办清单不会丢失
- 可视化展示:如果有前端界面,建议展示待办清单
注意事项
- 规划成本:创建待办清单需要额外的模型调用,需要控制成本
- 状态管理:需要注意state大小限制,避免待办项过多
- 简单任务:简单任务不需要规划,避免过度使用
与其他中间件的配合
To-do list可以与其他中间件配合使用:
- 与SummarizationMiddleware配合:如果待办清单过长,可以在摘要时保留关键待办项
- 与Human-in-the-loop配合:关键待办项执行前,可以触发人工审核
- 与ToolCallLimitMiddleware配合:限制待办项中工具调用的总次数,防止无限循环
后续优化方向
- 智能任务分解:基于历史数据和任务类型,智能拆解任务
- 依赖关系识别:更准确地识别任务之间的依赖关系
- 资源预估:预估每个任务需要的资源和时间,帮助优化计划
- 任务模板:对于常见任务类型,提供任务模板,加快规划速度