前面几篇我们循序渐进地聊了LLM本身、Prompt、Tools和RAG。现在终于到了把这些东西串起来的时候------Agent。
回顾一下我们的进度:LLM是个知识渊博但没出过门的毕业生,Prompt是你跟他沟通的方式,Tools给他装上了手脚,RAG让他能翻你的私有资料库。但到现在为止,他依然是一个"你问一句他答一句"的被动角色。
Agent要改变的就是这个局面。你不再需要每一步都告诉他该干什么,而是直接给他一个目标,让他自己规划、自己调用工具、自己多步执行,直到任务完成。
Agent是什么?
Agent,翻译过来叫智能体。你可以把它理解成:给那个毕业生配上了厨具、食谱、手机App和记事本之后,他就不再只是一个答题的,而是一个能上岗干活的厨师兼管家。
你跟他说"小伙子,帮我做一盘鱼香肉丝",他会自己去查食谱、去买食材、按步骤操作、装盘端上来。你不用告诉他每一步怎么做,他拿到目标自己就推下去了。
这和之前讲的Tool Calling有什么区别?Tool Calling是单个动作------模型判断要调哪个工具,你执行,他基于结果回复。Agent是在这个基础上加了一层循环和自主决策。他可以连续调用多个工具,发现结果不对劲会自己重试,缺信息会换一个工具接着查,直到他觉得任务完成了,才给你最终答复。
Agent通常等于这个公式:LLM + Prompt/Context + Tools +(可选)Memory + RAG + 循环执行逻辑。看上去组件很多,但每个部分我们前面都讲过了,Agent就是这些组件的组合和编排。
Agent的本质:不是另一种模型
先澄清一个常见的误解:Agent不是另一种大模型,也不是模型突然有了"自主意识"。它的本质是:在你的程序里,用LLM当决策脑,外面套一层编排运行时------循环、工具、记忆、权限------让它朝着一个目标多步推进,直到交付结果或者放弃。
拆开来看,Agent由这几层构成:
- 大脑:LLM本身,根据当前Context决定"说什么、调哪个工具、参数填什么"。
- 手脚:Tools、RAG这些,由你的代码真正执行,模型只发"申请单"。
- 工作台:Context,本轮能看到的对话历史、工具回执、检索片段。
- 档案:Memory(可选),跨轮、跨会话取回的历史信息。
- 节拍器 :Agent Loop和
maxSteps,控制"想---干---看"要循环几轮。
所以Agent是工程上的一个角色 ------一种"会自己往下推任务"的LLM应用形态。它和聊天机器人的差别不在模型型号,而在于有没有目标导向的多步循环和可执行的外挂。
举个例子对比一下:
- 纯聊天:你问一句,模型答一句,链路结束。
- Agent:你给一个目标"把88392订单状态查清楚并写进周报",它内部可能先查订单工具,发现缺字段,再调用户信息工具补全参数,最后拼成一段话给你。你只发了一次指令,它自己在里面转了好几圈。
自主执行:自己决定下一步
自主执行指的是:在你设定好的边界内,Agent自己决定下一步做什么------继续推理、调工具、查RAG、还是向用户提问------而不需要你每一步都打字指挥。
但这个"自主"是有边界的,不是无限自由:
- 程序边界 :只能调用你注册过的Tools,你的
execute函数里可以做鉴权、限流、沙箱,模型碰不到的东西永远碰不到。 - 步数边界 :
maxSteps、超时、费用上限,防止死循环或者一个任务烧掉太多Token。 - 人机边界:敏感操作可以要求人工确认,比如删数据、转账这种,Agent提出申请,你点了批准才真正执行。
还是用管家那个比喻:管家可以自主买菜、切菜、下锅,但不能擅自卖掉你的房子 ------钥匙和预算在你手里。技术上也很明确:决策在模型侧 (填工具单),执行在应用侧(你的函数真的跑起来)。
多轮推理:内部转好几圈
多轮推理指:为了完成同一次用户目标,运行时会连续调用LLM多次。每一轮可能伴随Tool Calling,工具结果写回Context,模型根据上一轮的回执再决定下一轮怎么说、怎么调。
这里要区分三种容易搞混的"多轮":
- 多轮对话:用户和模型交替各说一句,聊天产品里你连续追问就是这种。
- Agent多轮推理:用户只给一个目标,中间的多轮是系统内部LLM和工具之间的交互,用户看不见,只收到最终答案。
- 推理模型内部思考:用户也看不见,但它发生在一次API调用里,是模型自己在脑子里"长考",o系列和extended thinking就是这种。
Agent的多轮推理属于外循环:每一圈都是一次Chat Completion,Context越来越厚------多了工具结果、观察笔记------直到模型认为任务完成或步数用尽。
举个例子,一次用户请求内可能发生3轮:
- 模型调用
query_order({"order_id": "88392"}),你执行后返回"无此单"。 - 模型一看不对,调用
search_user_orders({"hint": "88392"}),返回真实id是8839201。 - 模型查到真实订单状态,用自然语言向用户说明------不再调工具,任务完成。
用户从头到尾只提了一个需求,Agent自己在里面转了3圈。
Agent Loop:干活儿的节拍器
Agent Loop ,智能体循环,是Agent运转的节拍。它不是"想一次就结束",而是反复循环,直到任务完成、模型主动结束、或者触及maxSteps或停止条件。
和一次性问答的区别很直观:
- 普通聊天:用户一句→模型一句,结束。
- Agent Loop:用户一个目标→多轮内部推理与Tool Calling→最终给你一个结论或交付物。
你在框架里看到的agent.generate()、maxSteps、停止条件这些配置,就是在实现并限制这个Loop。循环太少了任务完不成,循环太多了烧Token,所以maxSteps是实际项目里一个需要反复调的参数。
整个Agent的生命周期可以压成一条链:
用户目标输入 → Prompt/Context组装 → 模型推理(Reason,决定是否调工具)→ Tool Call/RAG(如果有)→ 结果写回Context(Observe)→ 判断是否继续?未完成则回到推理 → 最终输出
Plan → Execute → Observe:经典三步
这是描述Agent Loop每一圈的经典三步,和上面生命周期里的Reason、Tool、Observe一一对应:
| 步骤 | 谁在做 | 做什么 |
|---|---|---|
| Plan(规划) | LLM | 理解目标,决定下一步:直接回答、调哪个工具、要什么参数、是否还差信息 |
| Execute(执行) | 你的程序 | 校验参数→跑execute、查库、调API、做RAG检索,产生真实世界的结果 |
| Observe(观察) | 运行时把结果塞回Context | 成功数据、错误信息、空结果,都作为消息让模型"看见" |
然后进入下一轮:模型Observe之后再次Plan------继续调工具、改口追问用户,或者输出最终答案。这个循环一直在转,直到模型判断目标已达成,或者步数规则不允许继续,才从Observe走到Output,Loop结束。
用管家做菜的比喻来对应三步就很形象:
- Plan:管家先想"有没有鱼香肉丝食谱?冰箱里缺什么料?"
- Execute:去RAG或搜索拿食谱,调用购物工具下单。
- Observe:食谱里写要木耳,但购物回执说"木耳缺货"。
- 再Plan:管家决定问你"能不能用香菇代替",或者换一道菜------循环直到端上桌。
有一点要注意:Plan不是必须先输出一整份书面计划 。简单任务里,模型可能直接发起tool_calls,规划融在一次生成里;复杂任务可以在System Prompt里要求"先列步骤再动手",那是Prompt策略,不是Agent定义里的硬性要求。
把这几篇串起来看,整个知识体系的脉络就很清楚了:LLM是大脑,Prompt是沟通方式,Context是工作台,Memory是记事本,Tools是手脚,RAG是资料库,Agent是把所有这些编排在一起、让它自主运转的工程框架。
Agent让LLM从只会回答的"参谋",变成了能完成任务的"管家"。而Agent Loop就是管家干活的节奏------Plan、Execute、Observe,一圈一圈推下去,直到事情办妥。