这道题问的是[[Agent]]的规划和执行,我觉得它本质是在考察一个Agent怎么把模糊目标变成具体动作,以及这两步怎么配合。如果只讲概念就太浅了,我更想从工程落地的角度来聊。
先说边界划分。规划是Agent的大脑,负责把复杂目标拆成可执行的子任务,决定做什么和先后顺序。比如用户说“帮我订一张去北京的机票”,规划层就要拆成“查航班、比较价格、下单支付”这几步,还得考虑依赖关系,比如先查航班才能比价格。执行是手脚,负责调用具体工具完成每个原子任务,比如调航班API、调支付接口。规划处理的是不确定性,因为决策空间很大;执行处理的是确定性,每个工具调用都有固定输入输出。
真正落地的时候,规划和执行不是串行的,而是循环迭代。最典型的架构就是[[ReAct]],它的流程是思考、行动、观察、再思考。举个例子,一个客服Agent处理退款,规划层先决定“查订单状态”,执行层调订单API,返回“已发货”,那规划层就得重新规划,改成“联系物流拦截”或者“引导用户退货”。这个例子说明,执行结果会直接影响下一轮规划,如果API报错或者返回意料之外的数据,Agent必须能动态调整,而不是死板执行原计划。
不过ReAct每一步都重新规划,开销比较大。实际工程中我见过另一种做法,就是Plan-and-Execute架构,一次性先生成完整计划,比如“搜索资料、总结、翻译”,然后逐条执行。这种适合确定性高的任务,比如定时报表生成。但有个前提,就是任务环境不能太动态,否则计划生成后条件变了,执行就会失败。所以我会根据场景选架构,高动态场景用ReAct,稳定场景用Plan-and-Execute。
这里有个坑:规划开销。规划层每步都要调大模型,Token消耗和延迟都很可观。上线前我会设一个规划深度阈值,比如最多规划5步,超过就简化或者报错。另外,执行失败时,我倾向加一个反思机制,让Agent分析失败原因再重规划,而不是简单重试。比如调天气API超时,反思后决定换一个数据源,而不是再试一次同一个API。
所以我会把规划和执行看成一对共生关系:规划负责应对不确定性,执行负责稳定落地。两者通过观察结果形成闭环,但工程上必须控制规划成本,不能让Agent无限思考。
说到执行,其实工具调用设计也很关键,比如怎么注册工具、怎么校验参数、怎么做安全控制。这些细节如果没处理好,Agent很容易乱调工具或者泄露数据。