Agent 是什么:从 ReAct 到工具调用的一次拆解
2026/9/14 22:59:55 网站建设 项目流程

Agent 这个词今年被炒得太热了,以至于很多人对它的理解变成了"一个无所不能的 AI"。好像只要加上 Agent,大模型就能自己上网、自己写代码、自己把活干完。

我先泼一盆冷水:Agent 不是超能力,它是一种架构模式。拆开了看,Agent 就是"大模型 + 循环 + 工具 + 记忆"的组合。它之所以看起来"能动",是因为有人给它设计了一个"想一步、做一步、看结果、再想下一步"的循环机制。

这篇就拿一个最朴素的需求——“帮我订一家今晚能容纳 6 人的川菜馆”——把 Agent 从内到外拆一遍。

先忘掉"Agent"这个词

在讲 Agent 之前,我想让你先忘掉这个词。我们回到一个基本问题:

如果让一个大模型直接回答"帮我订一家今晚能容纳 6 人的川菜馆",它会怎么答?

它会大概率给你一段建议:

“你可以在大众点评上搜索附近的川菜馆,筛选 6 人以上的包间,打电话预约。”

这回答有用吗?有点用,但它没做实事。它只动了嘴皮子,没帮你查餐厅、没帮你打电话、没帮你预约。

为什么?因为大模型本身只能生成文字,它不能访问外部系统。它的"能力边界"止步于键盘打出来的字。

Agent 要解决的,就是让大模型突破这个边界。具体怎么做?给它配工具,再让它学会自己决定什么时候用哪个工具。

Agent 的四个零件

把 Agent 当成一台机器拆开,里面就四个核心零件。

零件一:大脑(LLM)

这是决策中心。所有"接下来该干什么"的判断,都由大模型来做。它不负责执行,只负责思考。

零件二:工具(Tools)

工具就是 Agent 的手脚。每个工具对应一个外部能力:查餐厅、查天气、发邮件、调用 API、写代码、执行脚本……工具本身是小函数或外部服务,Agent 通过调用它们来干实事。

零件三:记忆(Memory)

Agent 跟普通聊天不一样,它需要记住任务目标、中间结果、用户的偏好。没有记忆,它会每轮都回到原点。记忆又分为短期记忆(当前对话里的上下文)和长期记忆(用户画像、历史记录、知识库)。

零件四:循环(Loop)

这是 Agent 的骨架。循环规定了 Agent 怎么工作:想一步、做一次、看反馈、再决定下一步。循环不跑完,任务就不算结束。

这张图就是 Agent 的全貌。记住:少了循环,它就是一个会调用工具的单轮模型;少了工具,它就只能动嘴皮子;少了记忆,它就走不远。四件套缺一不可。

ReAct:让模型"边想边做"

现在给这台机器通电。怎么让它跑起来?最经典的机制叫ReAct(Reason + Act),意思是"推理 + 行动"交替进行。

我用"订川菜馆"这个需求,给你跑一遍 ReAct 的完整循环。

第 1 轮:理解任务

用户说:“帮我订一家今晚能容纳 6 人的川菜馆。”

Agent 的大脑先想:

Thought:用户要订餐厅。关键信息:菜系=川菜,人数=6,时间=今晚。我需要先查附近有哪些川菜馆,并且确认今晚有位。

注意这一步,模型不是直接回答,而是把任务拆解了。这就是 Reason。

第 2 轮:第一次行动

模型决定调用一个工具:

Action:调用search_restaurants(location="附近", cuisine="川菜", capacity=6, date="今晚")

然后工具返回结果:

Observation:找到 3 家符合条件的川菜馆:A 店(有包间,人均 120)、B 店(大厅可坐 6 人,人均 80)、C 店(包间已订满)。

第 3 轮:第二次思考与行动

模型拿到观察结果,继续想:

Thought:A 店有包间但贵,B 店便宜但大厅,C 店已满。用户没说要包间还是大厅,我需要问清楚,或者根据常见偏好给推荐。为了推进,我可以先把 A 和 B 的信息列出来,让用户选。

于是模型决定不再调用工具,而是给出回答:

Final Answer:我查到两家可选:A 店包间人均 120,B 店大厅人均 80。您倾向包间还是大厅?我帮您打电话预约。

这就是 ReAct 的完整循环:Thought(想)→ Action(做)→ Observation(看结果)→ Thought(再想)→ … → Final Answer(给出最终答案)。模型不是一次性生成最终答案,而是一步一步地推理、行动、调整。

工具调用:Agent 的"手"是怎么长出来的

工具调用听起来玄,其实机制很朴素。就两步:

第一步:把工具说明书告诉模型。

每个工具都对应一段"说明书",通常用 JSON Schema 描述:工具叫什么名字、接受哪些参数、每个参数什么类型、干什么用的。

比如查餐厅的工具,说明书可能是这样的:

{"name":"search_restaurants","description":"根据位置、菜系、人数、日期搜索可预订餐厅","parameters":{"type":"object","properties":{"location":{"type":"string","description":"用户所在位置"},"cuisine":{"type":"string","description":"菜系"},"capacity":{"type":"integer","description":"用餐人数"},"date":{"type":"string","description":"用餐日期"}},"required":["location","cuisine","capacity","date"]}}

第二步:让模型决定要不要调用。

模型每次生成时,会判断"当前任务是直接回答,还是需要调用工具"。如果需要调用,它不生成给人看的文字,而是生成一段结构化的函数调用请求,比如:

{"name":"search_restaurants","arguments":{"location":"附近","cuisine":"川菜","capacity":6,"date":"今晚"}}

编排层收到这个请求后,真的去执行这个函数,拿到结果再喂回给模型。模型看到结果后,再决定下一步。

关键洞察:模型其实并不"知道"工具怎么实现的。它只看到了说明书和返回结果。它就像个指挥官,手里没有地图,但通过无线电调度侦察兵、炮兵、工兵。真正的"动手"发生在工具函数里,不在模型里。

Agent 什么时候适合用,什么时候是杀鸡用牛刀

讲到这里,必须泼第二盆冷水:不是所有任务都需要 Agent

如果你的需求只是"帮我总结这段文字",那根本不需要 Agent,一个单轮大模型就够了。如果你的需求是"按固定流程处理 1000 份表格",那 WorkFlow(工作流)更合适,因为流程确定,不需要模型自己决策。

Agent 真正擅长的场景是两类:

第一类:目标明确,但路径不确定。比如"帮我规划一次三天的北京旅行",需要查天气、查景点、查交通、看餐厅,每一步都可能根据上一步结果调整。这种任务用 Agent 比写死工作流灵活得多。

第二类:需要跟外部系统交互。比如"帮我查一下这个快递到哪了,如果显示签收了就发邮件通知客户"。这需要调用快递 API、读取状态、再调用邮件服务。Agent 能把这些串起来。

这张图能帮你快速判断该用什么方案:

  • 单轮问答 → 直接调用大模型
  • 固定流程 → WorkFlow
  • 多步决策 + 工具调用 → Agent

很多项目之所以把 Agent 用得稀烂,就是因为该用 WorkFlow 的地方硬上 Agent,结果模型反复纠结、成本失控、还答不对。

Agent 离生产还有多远

Agent 听起来美好,但放到生产环境里,还有很多坑:

坑一:循环停不下来。模型有时候会在 Thought/Action 之间打转,特别是工具调用失败时,它可能反复重试。你必须设置最大循环次数和超时时间。

坑二:工具调用失败后的恢复。真实世界的 API 会超时、会限流、会返回错误。Agent 必须能识别失败、决定重试还是换方案。这不是模型自动会的,需要你在编排层写好错误处理。

坑三:成本高。每轮 Thought 都要调用一次模型,循环多跑几轮,token 消耗就上去了。一个复杂任务可能烧掉普通问答十倍的钱。

坑四:不可解释。Agent 的决策链很长,最后给你一个答案,但中间怎么想的、调了哪些工具,你不一定清楚。做 ToB 或合规要求高的场景,必须有日志和 Trace。

所以我现在对 Agent 的态度是:** enthusiastically cautious(热情但谨慎)**。它确实能解决一些传统工作流搞不定的问题,但别把它当成银弹。

动手写一个最小 Agent:三十行伪代码看清楚

前面讲的都是概念,这节我们把它落成代码骨架,你会发现 Agent 远没有名字那么玄乎。下面是一个极简版(伪代码,去掉了错误处理和细节):

tools = {"search_web": search_web, # 搜索工具,真实调用搜索引擎"calculator": calculator, # 计算器,执行数学运算}defrun_agent(user_question): messages = [系统提示词, 用户问题]for step inrange(最多 8 轮): # 循环骨架# 1. 模型决策:这一步该"直接回答"还是"调用工具" response = llm.chat(messages, tools=tools)if response.想直接回答:return response.内容 # 任务完成,退出循环# 2. 执行工具(程序干,不是模型干) tool_name = response.要调用的工具 args = response.参数 result = tools[tool_name](**args)# 3. 把工具结果回灌给模型 messages.append(工具名=tool_name, 结果=result)# 4. 回到循环开头,模型基于新信息再决策return"超过步数上限,未能完成任务"

盯着这个骨架看,你会发现 Agent 的本质就是一个带循环的"模型调用 + 工具执行"

  • 第 1 步是大脑(模型决策);
  • 第 2 步是手(程序调工具);
  • 第 3 步是记忆(把结果写回消息列表,下一轮模型就能看到);
  • 第 4 步是骨架(循环回去)。

没有任何魔法。所谓的"自主规划"“多步推理”,不过是在这个循环里多转几圈、多调几个工具。理解了这点,你再看那些吹得神乎其神的 Agent 产品,心里就有底了——它们无非是在这套骨架上,加了更聪明的提示词、更丰富的工具集、更稳的记忆管理。

新手常踩的一个误区是想当然以为"调了工具模型就自动变聪明"。不是的。模型只是按概率决定调哪个工具、填什么参数;工具返回什么,模型就拿到什么。如果工具本身错了(比如搜索引擎返回了垃圾结果),模型也会基于垃圾继续推理。所以Agent 的上限,由"模型决策质量 × 工具可靠性 × 记忆管理"三者共同决定,哪一环拉胯,整个系统就拉胯。

给想上手的人一个起点

如果你看完想自己搭一个,别一上来就套复杂框架。我建议的最小起步路径:

  1. 先用上面那个三十行骨架,接一个真实工具(比如一个能查天气或查数据库的接口),跑通"问问题 → 模型决定调工具 → 拿到结果 → 回答"这一圈。
  2. 跑通之后,再加第二个工具,体验"模型在多个工具之间做选择"。
  3. 然后处理真实场景的坑:工具失败了怎么办、模型乱填参数怎么办、多轮之后记忆爆了怎么办。

这三步走完,你对 Agent 的理解会比读十篇文章都扎实。框架(LangChain、LlamaIndex、AutoGen 之类)是等你理解了骨架之后才需要学的"加速器",不是入门必需品。

Agent 的"记忆":它怎么记住跨轮的事

我们前面提过 Agent 有"记忆的笔记本"这个零件,但没展开。这节补上,因为它直接关系到 Agent 能不能干"长活"。

得先说清楚一个前提:大模型本身没有记忆。你上一轮跟它说的话,它下一轮根本不记得,除非你把那些话再喂给它。所以 Agent 的"记忆",本质是你(程序)在帮它记账——把历史信息存在对话列表(messages)里,每轮都带着过去的内容一起发给模型。

这带来两个问题:

问题一:记太多会撑爆窗口。对话越长,messages 越大,迟早超过上下文上限。怎么办?常见的做法是"摘要压缩":当历史太长时,让模型先把前面聊的内容总结成一段精简摘要,再用摘要替换掉原始长历史。就像你开会记笔记,聊了三小时,最后只留一页要点。

问题二:记什么、不记什么。不是所有信息都值得长期记。比如"用户刚才问了个天气"这种一次性信息,聊完就丢;但"用户偏好用中文回答""这个项目的数据库叫 orders_db"这种,得长期留着。所以成熟的 Agent 会分两层记忆:短期(当前对话的上下文)和长期(跨会话的用户画像、项目知识),长期记忆通常存在外部数据库或向量库里,要用时再取。

理解了记忆机制,你就明白为什么很多 Agent 产品会强调"它有记忆"——那不是模型天赋,是工程师在外面一层层搭出来的。记忆管理做得好,Agent 能从"一次性问答"升级成"能陪你干好几天的助手";做不好,它就会"聊着聊着忘了你开头说过什么",体验直接回到普通聊天机器人。

怎么判断"你的场景该不该上 Agent"

前面讲了 Agent 能干什么、有什么坑,最后给一个实用的判断清单。拿到一个需求,先问自己四个问题:

问题一:任务能不能一步完成?如果模型一次回答就能解决(写封邮件、翻译一段文字、解释一个概念),根本不需要 Agent。Agent 是为"多步、需要工具、需要边做边看"的任务准备的。杀鸡用牛刀,只会更慢、更贵、更不可控。

问题二:需不需要外部信息或动作?如果任务全程在模型"脑子里"就能完成,不需要查数据库、不需要调 API、不需要操作文件,那普通对话就够了。Agent 的价值恰恰在"能动手"——没有"动手"需求,就别上 Agent。

问题三:结果允许试错吗?Agent 会调用工具、会改东西,如果任务涉及"不可逆操作"(比如直接删生产数据、直接发邮件给客户),那在让它自动跑之前,必须加人工确认环节。否则一个错误的工具调用后果可能很严重。

问题四:任务的路径确定吗?如果流程是固定的"先 A 后 B 再 C",用普通工作流(写死的代码流程)反而更稳、更便宜。Agent 适合"路径不确定、需要模型临场决策"的场景。确定的事交给代码,不确定的事交给 Agent——这是最经济的分工。

把这四个问题过一遍,大部分场景都能立刻判断:是"普通对话 + 工具调用"就够,还是真的需要一套 Agent 循环。别被概念带着走,工具是为问题服务的。

结束

Agent = 大模型的大脑 + 工具的手脚 + 记忆的笔记本 + 循环的骨架。ReAct 让这个骨架动了起来:想一步、做一步、看反馈、再决定下一步。

理解了这套结构,你再去看市面上那些 Agent 框架、Agent 平台,就不会被概念绕晕了。它们 fancy 的名字背后,基本都在做这四件事的排列组合。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询