目录
[另一种工作模式:Plan and Execute](#另一种工作模式:Plan and Execute)
什么是agent?
大模型只会说,不会做
agent要让大模型既会说,也会做
agent(智能体)是一个以大模型为"大脑",自主感知环境,做出决策,调用工具,完成多步骤任务的程序
自主(Autonomously):不需要人发出一步一步的指令,只需要给他一个目标,自主判断下一步做什么
多步骤(Multi-step):一个任务可能有五步十步,agent自主串联起来
工具调用(Tool use):调用真实的函数,查数据库,搜网页,发通知,写文件
大模型单独使用,就是一个只会出主意,不会做事情的顾问,而agent就是给这个顾问配了一双手,不仅能出主意,还能动手干活了
Agent = 大模型(大脑)+工具(双手)+执行循环(思考-行动-观察-再思考)
为什么需要agent?
大模型的三大短板:没有执行能力,知识有截至日期,没有持久记忆
当你提出一个故障问题,大模型只是一个猜测机,猜测可能的情况,而传统的脚本和workflow是写死的逻辑,无法解决新的故障
agent的价值在于:把大模型的灵活推理能力和工具的执行能力结合在一起,让系统可以处理无法提前穷极所有情况的复杂任务
Agent的核心组成
1.大模型(LLM),大脑
负责理解任务,分析当前的状态,决定下一步做什么。
- 工具(Tools),双手
一个个可以执行的真实函数:查数据库,调用搜索引擎,读写文件,发通知,调用API...
大模型告诉agent要调用哪个工具,传什么参数,代码层面真正去执行。工具的结果返回给大模型,供他继续推理。
- 记忆(Memory),记事本
短期记忆:当前任务的对话历史+每次工具调用的结果,存在context window里面
长期记忆:跨会话需要记住的内容,需要用到外部数据库,需要时检索出来注入context
4.执行循环(Loop),节拍器
不断重复"思考-观察-行动-观察"这个循环,直到任务完成。没有这个循环,大模型无法做多步骤的任务,这个循环是agent和普通大模型调用最本质的区别
主流的Agent工作范式---ReAct循环
全称Raesoning+Acting:推理(Think)- 行动(Act)- 观察(Observe)- 再推理
关键机制:
**结果回流:**每一轮的工具调用都会追加到context window里面,大模型下一轮能看见所有历史。基于已有发现继续推理,而不是每一次都从头开始
**动态决策:**每一步该怎么走是实时推理出来的,不是提前写好的。
**何时停止:**大模型判断任务已完成,或者达到预设的最大轮数
另一种工作模式:Plan and Execute
ReAct是边想边做,根据眼前的,决定后面的,但是这种模式在复杂任务中呢?
1.长任务可能会迷路:context window堆满了任务步骤的时候,大模型要在里面判断当前在第几步,最终目标是什么,还缺哪些信息,注意力越来越稀释,容易偏离原来的目标
-
容易绕路:没有全局规划,可能走了几步之后发现方向不对,要回头重来,白白消耗几轮LLM的调用
-
token消耗滚雪球:每一轮都要把历史对话带上。步骤越多,context越长,LLM调用token消耗越高
因此催生了Plan and Execute(规划-执行模式)
先让大模型把任务步骤生成一份清单,再逐步按清单执行,而不是走一步看一步
第一阶段:Planner(规划阶段)
大模型拿到任务,将任务拆解成一份有序的任务清单
第二阶段:Execute(执行阶段)
计划有了,开始逐步执行,每一步可以是一次工具的调用,也可以是一个小的ReAct循环
还有一个重要机制:Re-planning(重新规划)。执行过程中遇到了计划里没有预料到的事情,Execute可以将新信息反馈给Planner,重新生成后续的步骤
两种模式怎么选呢?
任务步骤少,目标模糊,需要随机应变---用ReAct
任务步骤多,目标明确,需要全局把控---用Plan and Execute
系统复杂,两者都需要---Plan and Execute做外层框架,每个子任务内部跑ReAct
Workflow工作流
提前写好所有步骤和分支逻辑,大模型就是某个步骤被调用一次,整体流程是硬编码的
agent是只给任务目标,大模型实时决定做什么,调用什么工具,根据结果决定下一步。执行结果是动态的,每次运行可能不一样
如果流程能写清楚,步骤是固定的,优先用Workflow,更稳,更省钱,更可预期
任务是开放式的,需要根据中间结果动态决策,就用agent
实际可以用Workflow做骨架,Agent负责其中需要判断的环节,两者结合,不是非此即彼
agent开发的挑战
- 幻觉传导:大模型在第一步做出错误判断,在agent多步骤链条里面,会被逐步放大
应对:工具结果要可验证,对高风险操作加人工确认
- 工具调用失败:一个工具失败可能造成卡死或者走偏
应对:每个工具都要有明确的错误返回格式;system prompt里面说清楚如果返回错误格式应该怎么处理
- 成本和速度:每一轮循环都是一次LLM调用,有token消耗和时延。
应对:设置合理的最大循环轮数;能用workflow尽量用
- 循环风险:查了A,查B,查了B,又查A...
应对:设置最大迭代次数,超出就强制结束;让大模型在每步推理时判断当前是否已经足够判断得出结论,是否还需要继续
真实的agent

调用大模型决策
判断是否完成
没完成就执行工具,结果追加到messages
带着新结果再调用大模型
循环