资讯动态

AI Agent核心概念串烧:从LLM到工具调用的完整认知地图

发布时间:2026/10/22 11:54:04 来源:尧图企业网站定制
这两年“AI Agent”这四个字几乎成了所有技术社区的热词朋友圈、推文、招聘JD里到处都在提。但坦白说很多人对它的理解是碎片化的有人觉得Agent就是“会调工具的ChatGPT”有人觉得是“能自己写代码的机器人”还有人把它等同于某几个热门的开源框架名。这些说法都有点影子但都不完整。我花了不少时间把这一堆概念逐个拆开再串起来越梳理越觉得Agent不是某一个具体技术点而是一整套“把大语言模型从对话机器变成任务执行器”的方法论。这篇“概念串烧”想把AI Agent涉及的核心概念——从LLM的局限、ReAct范式、记忆与工具调用到多Agent协作、评估兜底再到最小可落地的实操案例——全部放进一条线里讲清楚。它不针对某个单一框架也不吹捧某个特定方案适合三类人看想入门的开发者、准备把Agent落到实际业务里的产品/项目负责人以及被各种概念绕晕、想建立一张清晰认知地图的同学。读完你能得到的不是一堆名词而是一套能用来判断“什么是好的Agent方案”的思维框架。1. 先把事情定义清楚Agent到底是什么它和普通LLM应用差在哪1.1 LLM只是“大脑”不是Agent的全部很多人一开始会把Agent等同于“大模型Prompt”也就是在系统提示词里写一堆角色设定再让模型回答问题。但真正跑过一个业务场景你就会发现这种组合只能叫“聊天机器人”离Agent差得远。Agent的关键不在于模型“会说什么”而在于模型“能做什么”、并且“知道什么时候做什么”。一个合格的Agent至少要具备四样东西一个是规划能力能把一个模糊的大目标拆成若干可执行的小步骤一个是记忆能力能记住当前任务做到哪一步了、之前做过什么一个是工具调用能力能去查询数据库、调用接口、操作文件、发送通知还有一个是自我反思能力能发现自己走错方向并主动纠正。LLM本身只是这里面负责“做决策”的那一部分它算是大脑但如果没有手和脚大脑再聪明也只能困在原地。我见过一个项目团队把一份几万字的PDF文档塞给大模型然后用提示词要求它“总结、分类、提炼”最后效果非常差。原因很简单上下文窗口放不下整份文档模型根本没有“读全”的能力。后来改成用Agent的方式先拆章节、再分段向量化、最后逐段召回并汇总效果立刻就不一样了。同样的模型换了一套执行架构结果天差地别。这就是Agent和普通LLM应用最本质的区别Agent是在给模型搭建一套完整的“感知—决策—执行”回路。1.2 核心能力拆解规划、记忆、工具、反思我把Agent的核心能力拆成四个模块方便理解也方便后面设计系统时对号入座。第一个是规划Planning。规划解决的是“怎么做”的问题。简单任务可以一步到位复杂任务就必须拆解。比如目标是“做一份竞品分析报告”Agent需要自己判断要分几步先定竞品范围、再收集公开资料、再整理数据、再生成报告。每一步之间还有依赖关系第2步没做完第3步就没办法开始。现在主流的做法是让模型输出一份任务清单然后逐个执行执行完一个打个勾再决定下一步。这就是著名的“计划—执行”范式的雏形。第二个是记忆Memory。记忆解决的是“做得怎么样”的问题。Agent在执行长任务时必须能回溯之前的结论否则每走一步都会“失忆”。记忆又分两类短期记忆就是会话里的对话历史长期记忆就是把关键信息存进向量数据库或其他持久化存储下次任务还能复用。我自己的经验是记忆设计得好不好直接决定Agent在复杂任务里会不会绕圈子。第三个是工具调用Tool Use。工具解决的是“靠什么做”的问题。模型不会算精确的财务数字不会查实时库存不会给你发邮件这些能力都需要通过外部工具补充。工具调用的本质是让模型学会“按格式输出调用请求”系统再把这个请求翻译成真正的API调用然后把结果喂回给模型。第四个是反思Reflection。反思解决的是“做错了怎么办”的问题。早期Agent一跑就出Bug因为模型不知道自己的输出对不对。现在常见的做法是加一个“评审员”环节让模型自己检查一遍结果或者用另一条提示词对结果做交叉校验。反思机制是我强烈建议别省掉的部分它投入产出比极高往往一两轮自我检查就能让任务成功率提升一大截。1.3 一个场景看懂全链路用Agent订机票光讲概念不好理解我用一个生活化的例子把四个能力串起来。假设你让一个Agent帮你订一张下周三从上海去北京的机票预算不超过1500块。第一步Agent调用“规划”能力把任务拆成三步查询航班、筛选价格、提交预订。第二步它需要“记忆”来记住预算限制是1500块、日期是下周三、出发地是上海这些信息不能丢。第三步它调用“工具”能力去访问航司查询接口拿到实时航班列表然后自己做一轮比较。第四步找到合适的航班后它不会直接下单而是把结果呈现给你确认如果你说“太贵了换早上的”它就把这个反馈写进记忆重新规划查询条件。整个过程中LLM只负责“理解意图、做决策、生成调用指令”真正的查航班、比价格、占座操作全靠工具。这一套跑通之后你对Agent的理解就不会停在“聊天”层面了。2. 概念串烧第一串从链式调用到自主决策模式在怎么演化2.1 一条清晰的进化线Prompt Chain → State Machine → Agent概念串烧的第一串我想先聊Agent的“模式进化史”因为它能帮你理解为什么现在的Agent长这样。最开始大家用的是Prompt Chain提示词链就是把一个大任务拆成几个子任务每个子任务写一个Prompt按顺序把上一个的输出传给下一个。优点是思路简单适合流程固定的场景缺点是完全没有反馈回路只要中间某一步出错整条链就断了。后来有人觉得不行就开始做状态机。把Agent定义成“一定数量的状态状态之间的转移条件”比如初始态、工具调用态、等待用户确认态、结束态。每一步执行完程序判断当前状态决定下一步跳转到哪里。状态机的好处是可控性很强适合业务规则明确的场景缺点是所有的转移条件都要提前写死一旦遇到预料之外的情况Agent就卡死。再往后就是现在大家说的Agent自主决策模式。它不再依赖预先写死的规则而是让大模型在每一轮都自主决定下一步做什么、用哪个工具、什么时候结束。这种方式灵活度极高代价是结果不可控。所以成熟的Agent系统不会走极端而是把状态机当骨架把LLM当决策引擎——主流程仍然是可控的状态转移但在每个状态内部用大模型来决定具体操作。我实操下来这种“半自主”设计是在可控性和效果之间最平衡的方案。2.2 ReAct让推理和行动交替前进概念串烧里必须重点讲ReAct因为它是目前绝大多数Agent框架的底层逻辑。ReAct的全称是Reasoning and Acting核心思想就是“边想边做”模型不再闷头输出一个最终答案而是一步步地输出思考过程、再输出动作看到动作结果后继续思考。一个典型的ReAct循环长这样模型先输出一个Thought我看到了什么我打算怎么做再输出一个Action我要调用哪个工具传入什么参数系统执行工具并返回Observation结果是这样的模型再基于Observation继续输出Thought循环往复直到它认为任务完成。这个模式好在哪里我自己的体会是它把“推理过程”暴露给了开发者你可以在日志里看它为什么做出这个决定排查问题的时候特别有用。理解ReAct别把它想得多高深它本质上就是“人干活的方式”先想一想再上手做做完看看结果再决定下一步接着做还是换个思路。2.3 Plan-and-Execute与Reflection让长任务不再半途崩坏ReAct适合中等长度的任务但真遇到一个需要20步以上才能完成的长任务纯ReAct就容易出问题——Agent走着走着就会把最初的目标忘了。这时候就需要Plan-and-Execute模式先不用边想边做而是让模型在开始阶段就把整个任务拆成一份完整计划然后照着计划一步步执行每一步执行完再快速校验。我更喜欢把Plan-and-Execute和**Reflection反思**放在一起用。反思机制是在每一步执行完之后加一轮“我是谁、我在哪、我要干什么”的自我核对。具体做法是在Prompt里要求模型先总结“目前已完成的内容”和“离最终目标的差距”再决定是继续当前计划还是需要修正计划。这里有个很值得注意的细节反思不是简单地让模型“检查一下”而是要给出一套明确的检查标准比如“输出必须含有三部分结论”“预算不能超过1500元”没有标准的反思模型只会自我表扬不会发现问题。3. 概念串烧第二串记忆、工具、多Agent协作三块拼图一个都不能少3.1 记忆系统让Agent不再“聊完就忘”记忆是Agent从“demo玩具”走向“生产可用”的关键一跃但也是被忽视得最严重的一块。简单的Chatbot不需要记忆因为每轮对话都是孤立的但Agent跑一个多步任务每一步对下一步都有影响没有记忆系统整个任务就是无源之水。我习惯把记忆分成三档会话记忆、工作记忆、长期记忆。会话记忆是把最近几轮的对话原文放进上下文窗口适合短任务成本低、实现快。工作记忆是结构化地记录“当前任务的目标、已完成步骤、当前卡片”对应人类工作台面上放的东西适合中等复杂任务。长期记忆则把有价值的信息向量化之后存进向量库当新任务到来时通过相似度检索把相关记忆召回适合跨会话的个性化场景。设计记忆系统时最大的坑是“上下文污染”你把太多历史记录塞给模型模型反而分不清哪条是当前任务的有效信息。我常用的方案是“三层筛选”第一层是置顶系统提示词里的目标说明第二层是最近3—5轮的会话记录第三层是检索回来的长期记忆。三层合并后再交给模型处理。这样既不会让上下文爆炸又能让模型始终盯着核心目标。实际跑下来同样一个模型加了良好记忆设计的成功率能提升50%以上这不是夸张Agent丢目标是最常见的失败原因。3.2 工具调用从“会说话”到“会办事”的关键一跳Agent和普通LLM应用最大的分水岭就是工具调用。没有工具的Agent只能输出文字建议比如“我建议你查一下天气”有工具的Agent能直接拉取天气数据、判断是否需要带伞、再自动更新你的日程备注。后者才是“帮我办事”。实现工具调用的思路主要有两种。一种是函数回调范式给每个工具定义一个名字、一段描述、若干参数然后把工具列表塞进Prompt或模型的工具接口模型输出结构化的调用请求代码去执行并返回结果。这是目前大多数正式Agent框架采用的方案。另一种是纯Prompt范式不用专门接口而是在上下文里约定“如果你想查天气输出一条特定格式的JSON”然后代码解析。这种方式不依赖模型厂商的特殊接口通用性强。无论哪种方案工具定义的质量直接决定Agent智商。我踩过的坑是“工具描述太薄”比如给模型定义了一个send_email工具描述只写“发送邮件”模型根本不知道什么时候该用它。正确的做法是把工具描述写得像一份使用说明说清楚这个工具是干什么的、适用什么场景、参数格式是什么、有哪些限制。你甚至可以加一两句使用示例实测效果会明显好于一句话描述。记住一句话你给模型看什么样的工具模型就会变成什么样的助手。3.3 多Agent协作让不同角色各司其职单Agent能力再强真到了生产环境也往往不够因为现实任务的复杂度通常不是一个角色能覆盖的。于是有了多Agent协作模式。你可以把多个Agent当成一个团队里的不同成员有负责拆解任务的主控Agent有专门做数据分析的Agent有负责写报告文案的Agent还有负责审核质量的Agent。每个Agent的Prompt、工具、记忆都围绕自己的“岗位职责”来配置。多Agent协作的编排方式大致有三种。第一种是主管—工人模式一个主控Agent把任务拆分后分发给多个工人Agent再由主控统一汇总。第二种是流水线模式任务按顺序流经多个Agent每个Agent在自己这步加工完再递给下一个。第三种是辩论模式多个Agent各自给出方案再互相评审挑问题最终收敛出最优结果。我实际用得最多的是主管—工人模式因为它结构清晰、好排查问题流水线模式适合处理流程稳定的场景辩论模式看起来酷但成本高、耗时长一般只在决策风险特别高的场景使用。多Agent协作有个特别容易翻车的点就是“互相打架”。A Agent生成了结论B Agent审核时不认可两名Agent来回争执十轮也不会有结果。我的建议是给审核Agent明确授权要么通过要么打回并且打回时只能附上具体的修改建议、不允许自由发挥。注意权限边界不只是说“你能不能调这个工具”还要规定“你能对别人的产出修改到什么程度”否则协作链就是一场灾难。4. 概念串烧第三串框架、Prompt与评估把概念落到工程实践4.1 框架选型别被“现成框架”绑架先问自己的场景要什么概念聊清楚了接下来绕不开的问题是“用什么建”。市面上主流的Agent编排框架大致分三类有一类玩的是“全宇宙一站式”内置了记忆、工具、RAG、多Agent编排一大堆模块功能多但对新手不友好项目一大就容易黑盒化有一类偏“轻量级”核心就是一个循环执行“调用模型→调用工具→返回结果”的引擎适合想掌控每个环节的开发者还有一类干脆“不挑框架”直接基于大模型函数调用接口自己写一个几十行的调度循环灵活度最高。我个人的选型建议有三条。第一条如果目标是快速验证想法优先选文档全、社区活跃的成熟框架不在乎它是否繁琐。第二条如果目标是做生产系统尽量选可观测性做得好的方案至少你要清楚每一步是“调用了哪个工具、花了多少Token、耗时多少”。第三条如果你的场景内部系统非常特殊比如强依赖某套内部API那么别迷信“框架能搞定一切”自己写一个调度器反而更省心。还有个经常被忽略的问题框架版本迭代快今天能用的一套API三个月后就可能废弃。我的习惯是把“模型调用层”在框架之外自己封装一层这样底层框架想换就换不至于牵一发动全身。4.2 Prompt工程在Agent里的特殊玩法写Prompt像写“岗位说明书”Agent里的Prompt和传统Chatbot的Prompt不一样。Chatbot的Prompt大多是设定语气和知识边界Agent的Prompt则更像一份“岗位说明书”除了角色设定之外还必须写清楚三样东西目标定义、可用资源和执行规则、输出格式要求。目标定义部分要写明“我要达成什么”“验收标准是什么”。可用资源列表要告诉模型“你有这些工具分别在什么场景用”执行规则要写明“逢年过节先发问候再谈正事”“预算超标必须请示”“上一轮结论要保留”。输出格式要求则针对不同环节做区分规划阶段输出任务清单执行阶段输出工具调用请求总结阶段输出用户可读报告。关键技巧是用“先决条件”来做决定门控。比如要查询某客户信息就必须先确认已经拿到了客户ID没ID直接让模型自编一个ID去查询那是幻觉的根源。你可以在Prompt里写明“如果你发现某个必要参数缺失必须向用户索要不得猜测”就是这么一句简单的规则能让整体可靠性提升明显。我还建议给模型一个“兜底回复模板”当它无法完成任务时要输出“我目前缺少XX信息无法完成请提供YY”而不是硬编一个错误答案。4.3 评估与可观测性Agent上线前最该做的事也是99%的团队最不重视的事Agent开发和传统后端开发最大的区别是“没有确定性输出”。你没法写一组固定的测试用例跑一遍断言“通过或失败”就完事。因此评估体系变得比写功能代码还重要。我建议每个Agent项目至少维护三类评估用例。第一类是单步工具调用评估构造一批“用户输入→预期的工具调用序列”的组合检查模型能不能选对工具、传对参数。第二类是端到端任务评估准备一份典型任务清单跑完整流程后看成功率、耗时、花费Token数。第三类是回归评估集专门收集历史上出错的案例每次改完代码或换模型之后重跑一遍确保没有把修复过的问题改回去。可观测性方面最基础的要求是记录思维链路日志每一轮Thought、Action、Observation都要落地。第二层是记录成本明细每个任务消耗多少Token、调了多少次模型不然上线后账单一个月吓死你。第三层是记录状态快照任务中途失败时能回放它是卡在哪一步、因为什么卡住的。我自己调试Agent时第一件事永远不是改Prompt而是翻日志看它到底走了哪条路看完日志再动手往往一击即中。5. 实操实录用最小成本搭一个“查天气写日报”的Agent5.1 环境准备与方案选型光讲概念容易飘我决定用一个最小但完整的例子带你从零搭一个Agent它能根据用户输入的城市名查询天气然后把天气信息加进一份当天日报。任务很小但五脏俱全涉及用户意图解析、工具调用、上下文记忆、结果汇总。实现语言就用Python模型接口不限。为了不掉进框架复杂度我直接在框架外写调度循环这样每一行代码你都看得懂。环境准备只需要三步安装一个Python环境安装一个轻量的HTTP库用于调模型API和天气API准备一个模型API的密钥。全程不需要本地大模型也不需要GPU。整个项目几十行代码就能跑起来。5.2 核心代码与关键步骤拆解核心代码我拆成几块来讲。第一块是工具定义。给Agent准备一个查询天气的函数def get_weather(city: str) - str: # 这里是伪接口实际可以换成任意天气服务商 data requests.get(fhttps://api.weather.example.com/v1/weather?city{city}).json() return f{city}当前{data[temp]}℃天气{data[condition]}湿度{data[humidity]}%注意函数名要见名知意返回结果要直接是自然语言片段方便模型直接消化。第二块是系统提示词。我写的是你是一个任务执行助手。你可以调用工具来获取实时信息。 当前可用工具 - get_weather(city)获取指定城市的当前天气city为城市中文名。 流程约定 1. 如果你需要天气信息先检查用户是否提供了城市名。 2. 如果缺少城市名你必须向用户询问禁止猜测城市。 3. 拿到结果后生成一份包含天气信息的日报结构为日期、城市、天气概况、出行建议。 现在开始用户说“帮我安排明天的日报地点是杭州。”这段提示词里最关键的是“缺失信息必须询问”的规则它挡住了大多数幻觉。第三块是执行循环。核心就是一个while循环def run_agent(user_input, messages[]): messages.append({role: user, content: user_input}) for step in range(5): reply call_llm(SYSTEM_PROMPT, messages) action parse_action(reply) if action is None: messages.append({role: assistant, content: reply}) return reply result execute_tool(action) messages.append({role: assistant, content: reply}) messages.append({role: tool, content: result}) return 超出最大步数任务终止parse_action是解析函数它从模型输出里提取工具名和参数。execute_tool是执行函数它把模型请求翻译成真实调用。循环上限设成5步防止模型陷入死循环。这个设计虽然粗糙但已经是“LLM工具上下文”的完整Agent。5.3 真实运行记录与踩坑修正第一次跑的时候模型没有直接调用工具而是“自作聪明”在文字里伪造了一个天气结果说什么“杭州今日晴26℃”。这其实是生成式模型最典型的毛病它不是不能调工具而是不知道“什么情况应该调工具”。解决办法有两个方向优先让模型在每轮输出前加一句判断“是否需要调用工具”如果需要就输出指定格式的JSON同时在系统提示词里写明“你必须调用工具才能回答天气问题任何未经工具确认的天气数据都视为错误”。加了这句话之后模型就老实了每次都规规矩矩先调工具再回答。第二个踩坑是多轮对话的上下文污染。用户只问了一次杭州天气但第二次追问“那明天呢”模型把“明天”理解成昨天回答的天气再复述一遍而不是重新调工具。解决办法是在工具返回的内容里加上时间戳并且在提示词里说明“每一次查询都要重新调用工具不得引用之前查询结果作为新答案”。这个细节在真实生产环境里极其重要因为时间相关的数据一旦被缓存复用结果就是错的。第三个坑是模型被工具返回结果带偏。当天气工具返回“杭州当前32℃天气多云湿度80%”时模型可能会把“当前”误以为“明天”因为Prompt里的需求是日报里的明天。我的修正方式是在工具返回内容前强制标注数据时间{date: 2026-01-15, city: 杭州, weather: ...}然后让模型自己判断这个数据时间是否满足“明天”的要求。这轮实操下来我的感受是Agent的大部分问题不在模型能力而在“信息链路的清晰度”。你把工具返回值标注清楚、把判断规则写明确同样一个模型能做的事会多出一倍。6. 常见问题速查Agent落地最容易踩的坑6.1 高频问题与对应解法我在多个Agent项目里反复遇到一些相同的问题这里整理成一张速查表可以直接对照排查。表现根因解法模型不调用工具而是直接编造结果提示词里没有明确“必须调工具”写明“不调工具的结果视为错误”并附工具使用示例模型调工具但参数乱传工具描述太简单模型不知道参数格式工具描述写全含参数类型、取值范围、示例长任务跑到一半丢失目标缺少工作记忆和阶段性总结增加步骤进度记录每隔几步总结一次多Agent互相推翻结论审核Agent的修改权限过大审核Agent只允许“通过/打回建议”不允许自由修改同一条用户输入答案每次都不一样模型温度设置过高或上下文不稳定业务型任务把温度调到0.2以下固定Prompt顺序成本失控一次任务调上百次模型没有步数上限和工具失败重试限制设最大循环次数工具连续失败2次就终止并降级Agent陷入死循环反复调同一个工具工具结果没有让上下文发生有意义的变化工具返回里加入状态变化标记模型判断“无进展”时退出6.2 几条保命级的避坑心得最后分享几条我在实际项目中验证过的保命经验这些在官方文档里通常不会写。第一永远给Agent一个“退出通道”。不管是步数上限还是“连续三次无实质进展就停止”必须让Agent自己有能力结束任务。我以前见过一个演示版Agent因为没有步数上限在测试环境里循环调用了一个查询接口整整一个晚上第二天账单令人崩溃。第二工具返回值要“结构化自然语言”双份表达。纯JSON对模型不够友好模型读长JSON容易漏字段纯自然语言又不好程序化处理。我习惯的格式是先给一段自然语言摘要再把结构化JSON放在后面模型既好理解程序也好解析。第三评测集要“脏”不要只放标准答案。别只准备“给我查下北京天气”这种正常输入要多放一些模糊、带错别字、缺参数的输入例如“帮我看看天气明天”“查一下杭州的吧”这些才是Agent真正在现实场景里遇到的输入。评测集越脏Agent在真实环境里越稳。第四模型版本升级了一定要重新跑回归集。我吃过一次亏换了一个能力更强的新模型结果旧工具调用的JSON格式它不认导致整个任务链从头崩到尾。任何模型调整都要先跑一遍历史用例再决定要不要上生产。我自己绕了挺大一圈才把这些概念串明白。最初也被各种术语搞得很焦虑后来发现核心就一句话Agent不是魔法它只是在给LLM配上规划、记忆、工具和反思这四件装备。这些装备可以先用最简单的代码自己实现慢慢再替换成更成熟的框架。如果你现在正准备做Agent我的建议是从一个最简单、最不完美的例子跑通全流程再逐步加复杂度。先把今天这篇里的几个关键“为什么”想透你后面踩坑的次数会少很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑