Sunday 的面试指南

Agent 任务规划:从 ReAct 到 Plan-and-Execute

《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday

你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。

上一节,咱们实现了一个最小 ReAct Agent。

它会执行一个 Action,读取工具返回的 Observation,再根据这份结果决定下一个 Action。

任务结束以后,程序还会打印完整的 trajectory,就是这玩意

Agent 任务规划:从 ReAct 到 Plan-and-Execute 配图 1

通过这份执行轨迹,咱们可以知道 Agent 已经调用过哪些工具。

但是,我现在问大家一个问题:

只看这份 trajectory,你知道 Agent 还有多少事情 没做吗?

不知道。

因为 trajectory 记录的是已经发生的事情。

对于上一节只有四次工具调用的案例,这个问题还不明显。

如果 Agent 需要连续运行几十分钟,中间涉及多个数据源和前后依赖,问题就会出来了。

如果我们想要在前端展示:当前执行到第几步了,任务中断以后还想继续执行 ,那么就不行了。

所以,这一节咱们就要解决这个问题,来做一个 可以被应用程序读取、检查和修改的: 任务计划,即:Plan

思考一个问题:任务计划会变吗?

咱们先思考一个问题,那就是:Agent 最先定义好的步骤,是不是可以一直按原样执行下去?

还是上一节的故障任务:

payment-service 从 15:10 开始出现大量支付失败。

告警中出现过 DB_POOL_ACQUIRE_TIMEOUT。

请找出最可能的故障原因。

DB_POOL_ACQUIRE_TIMEOUT 表示某次请求等待数据库连接时发生了超时。

所以,Agent 一开始会怀疑数据库连接池有问题,并安排两个步骤:

  1. 先查询监控指标
  2. 如果监控也指向数据库,再检查数据库连接池

这就是第一版 任务计划(Plan)。

但是要注意,这里的第二步不是马上执行的。

Agent 要先执行第一步,看看真实监控是否支持“数据库连接池异常”这个判断。

假设,现在监控工具返回:

  • 支付接口 5xx 错误率:31.8%
  • 数据库连接池使用率:46%

那就说明,支付接口确实出故障了。

但是,数据库连接池只使用了 46%,并没有耗尽。

这意味着最开始的数据库判断不成立,原计划里的第二步也就没有继续执行的必要了。

所以,计划需要改成:

查询监控指标 → 已完成

检查数据库连接池 → 取消

查询错误日志 → 接下来执行

这里就是第一次 计划变化。

没有意义的数据库检查被取消,然后增加一个更符合当前情况的新步骤:查询错误日志。

日志工具继续返回:

主要错误:PAYMENT_CURRENCY_UNDEFINED
错误版本:v2.4.1

现在,Agent 知道支付失败和 v2.4.1 中的 currency 字段错误有关。

但是,只看日志还不能确定这个错误是不是新版本发布引起的。

所以,任务计划再增加一步:

查询监控指标 → 已完成 检查数据库连接池 → 已取消 查询错误日志 → 已完成 查询最近发布记录 → 接下来执行

发布记录最终是:

v2.4.1 在故障出现前 24 秒完成发布

本次发布修改了币种归一化逻辑

到这里,Agent 才有足够的信息生成故障结论。

那么,回顾整个过程,其实咱们可以发现:任务计划是一直在变的。

这就是这一节最先要理解的事情:

任务计划不是提前写死的执行流程。Agent 每得到一份新的工具结果,都可能需要取消原来的步骤,或者增加新的步骤。

把刚才的过程换成 Agent 术语

看完上面的过程之后,再看专业概念就容易多了。

这里涉及到的东西还挺多的,我总结了一下

本节试读已结束

继续学习,解锁完整课程

购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。

扫码添加作者微信,备注「Agent 课程」

添加作者微信 · 购买完整课程

解锁完整课程 ¥499

《Agent 大模型 0 到 1 系统课》
扫码添加微信,备注「Agent 课程」,购买后由 Sunday 提供完整内容的学习方式。

扫码添加作者微信 LGD_Sunday,购买 499 元 Agent 课程

微信昵称:LGD_Sunday
手机上可长按保存二维码,再用微信扫一扫识别。

保存微信二维码