首页 / 资讯中心 / 文章详情

AI Agent原理拆解:从LLM调用到多Agent协作与工程落地

AI Agent原理拆解:从LLM调用到多Agent协作与工程落地 ★ FEATURED ARTICLE
先说个场景。你调用大模型接口输入“帮我查一下下周北京的天气顺便对比一下和上海的温差最后写一段出行建议”模型大概率会给你一段“我无法直接查询实时天气”之类的回复。但如果你把这个任务交给一个Agent它会自己去调天气API、把两个城市的数据拉出来、做对比、写建议一气呵成。这个差距就是Agent存在的意义。我研究Agent有两年多从最开始对着LangChain源码一脸懵到后来带团队做多Agent协作系统踩过的坑不算少。本篇就用一个通用概念版的框架把Agent的原理拆开揉碎讲清楚。它适合刚接触这个概念的人也适合已经写过一些Agent但想系统化梳理的人。不涉及某个具体框架的绑定讲的是内核逻辑。1. 核心概念Agent到底是什么以及它和普通LLM调用的本质区别1.1 Agent不是模型而是一种“模型使用方式”这是最容易绕晕的地方。很多人把Agent当成一种新模型其实它根本不是。Agent是在LLM之上构建的一套推理与执行循环机制。模型还是那个模型但你不是简单地“输入-输出”而是给它一个目标让它自己决定要怎么完成包括要调用什么工具、按什么顺序调用、中间结果怎么处理、错了怎么补救。我常用一个类比普通LLM调用就像一个刚入职的实习生你问什么他答什么但答错了他不会自己察觉。Agent则像是一个带工具箱的老员工你给他一个目标他会说“我先查资料再做个方案然后拉同事评审最后交付”遇到问题还会调整方案。这个“自己规划、自己执行、自己纠错”的能力就是Agent的核心。所以严格来说“Agent原理”讲的是如何把LLM包装成这样一个具备自主行为的系统。核心组件就四个模型大脑、工具手脚、记忆经验、编排行动策略。1.2 从Chain到Agent控制权的转移理解Agent有个很好的参照物是Chain。早期的LangChain等框架推崇Chain模式把任务拆成固定步骤写死在代码里“第一步调A接口第二步把结果给模型总结第三步输出”。这种方式稳定可控但有一个致命问题——应对不了没有预料到的情况。Agent模式把控制权交还给了模型本身。还是那个流程但具体步骤怎么走、用哪个工具、什么时候停下来不干了都由模型基于当前上下文动态决策。这在工程上的感受就是你从写流程变成了写条件、写工具、写边界。你不再控制每一步的走向而是控制“允许走的路有哪些”。这也是为什么很多团队从Chain迁移到Agent后会经历一阵阵痛期。因为感觉上“失控”了模型可能会走你完全没想到的路线。但正是这种自由度带来了处理复杂任务的能力。Chain适合稳定流水线Agent适合开放场景。1.3 AI Agent的核心能力图谱感知、决策、行动、记忆把Agent拆解成能力维度比直接看论文好理解得多。我习惯把它分为四环感知Perception获取任务相关的外部信息。可以是用户输入也可以是从数据库、API拉取的数据。这是Agent判断的依据。决策Decision基于当前状态和目标选择下一步行动。这里主要靠LLM的推理能力常见的有ReAct模式下的“思考-行动”循环。行动Action调用工具、执行代码、发送请求、操作文件。这是Agent影响外部世界的方式。记忆Memory短期的上下文窗口内容中期的会话摘要长期的知识沉淀。记忆决定了Agent能不能在长任务、多轮对话中保持一致性和积累经验。这四个环不是顺序执行一次就结束而是形成一个闭环循环。Agent执行一个行动后观察结果相当于新的感知重新决策更新计划执行下一步行动。循环一直到任务完成或者触碰你设定的终止条件。所以看Agent系统本质上看它是怎么把四个环组织成一个高效、可控的闭环。2. 核心细节解析记忆、规划、工具调用三大支点2.1 记忆体系短期、中期、长期到底怎么实现“Agent记忆”是所有做Agent的人绕不过去的坎尤其是当你做的是有状态的多轮任务时。没有记忆的Agent就像一个每次见面都忘了你是谁的朋友聊两句就跑偏。短期记忆就是上下文窗口context window本身。对话记录直接拼进Prompt交给LLM。实现最简单但受限于模型上下文长度。超出后最简单粗暴的做法是丢弃旧的或者做截断。可一旦丢弃了关键信息Agent的逻辑就断了。中期记忆通常叫会话摘要conversation summary。随着对话变长你不可能把所有历史都塞进上下文。常见做法是每隔若干轮调用LLM把前面的内容压缩成摘要存起来后续只带摘要加上最近的几轮完整对话。这个做法的好处是省token坏处是摘要会丢失细节。比如用户在两小时前说过一个特定的API名称摘要可能只写了“用户提出了一个技术问题”后续Agent就懵了。长期记忆则存储在外部数据库中通常是向量数据库。实现路径很成熟把需要记住的信息切片、用embedding模型向量化、存入向量库然后在需要时把当前问题向量化做相似度检索把命中的记忆块塞进Prompt。这块的痛点不在技术而在工程什么时候该写入记忆、写入什么、怎么避免检索到过期的错误信息。我的实际经验是长期记忆不要什么东西都往里塞要做筛选。我一般定义一个“值得记忆”的条件——比如用户明确修正过的事实、任务中频繁出现的实体、结论性的内容。筛选的动作可以靠LLM做也可以靠规则也可以两者结合。很多人一上来就把全量对话灌进向量库检索结果全是噪音效果反而比精简记忆更差。2.2 规划能力任务拆解、反思修正、以及ReAct模式规划是Agent最像“人”的地方。接到一个复杂目标不是闷头干而是先拆。任务拆解有两种主流路线。一种是一次性拆解让LLM把大目标分解成子任务清单然后按顺序执行。适合结构相对清晰的任务比如“写一篇行业分析报告”可以拆成“收集资料、梳理框架、撰写初稿、润色校对”。另一种是动态拆解走一步看一步每次只决策当前这一步该做什么。最近流行的LLM Compiler思路也是这种动态规划的变体先规划一个大致的骨架再逐层填补细节。ReAct是这里绕不开的名字我建议所有学Agent的人都先手写一遍ReAct。ReAct就是把“推理Reason”和“行动Act”交错进行。每一次循环中这样走模型先观察当前状态输出一段思考Thought然后决定行动Action系统执行行动得到观察结果Observation再把这个结果反馈给模型继续下一轮思考。这个过程跟人类解决问题的思路一模一样我先想想看这问题是什么性质然后去做个实验看到实验结果再调整思路。**反思机制Reflection**是进阶玩法。在Agent执行完一轮任务后额外调用一次LLM让它回顾整个执行过程找出哪里做得不好下次怎么改进然后把这个反思结果存进记忆。有人觉得这不就是多花一次token吗实际效果非常显著。LLM很擅长在做完事后马后炮式地审查自己的过程这种“事后改进”积累几轮之后Agent的准确率提升明显。我之前用Reflexion框架做实验在特定代码生成任务上加上反思后成功率提升了接近20个百分点。2.3 工具调用Function Calling、工具注册与选择的逻辑Agent的能力上限一半取决于它能不能调用工具。没有工具Agent只能凭训练数据说话有了工具它就能连接到实时世界。当前主流实现是Function Calling。你把工具描述成JSON Schema传给模型比如定义一个函数叫get_weather参数是city和date。模型在决策时如果觉得需要查询天气就不会直接输出天气而是输出一个结构化的函数调用请求比如{name: get_weather, arguments: {city: 北京, date: 2025-01-01}}。然后由你的代码来执行这个工具把结果反馈给模型。这里有个关键细节Agent并不真正直接执行代码中的函数它只是生成调用请求真正的执行发生在你的程序里。这是所有Agent框架的通用安全设计——模型不直接操作执行环境而是通过你的代码来间接操作。所以工具函数里你可以放权限校验、参数合法性检查、日志记录给Agent一个“戴着镣铐”的行动能力。工具注册这块实践中我建议维护一个工具清单给每个工具写清楚它能做什么、什么时候用、参数说明、注意事项。工具描述的质量直接决定了模型选工具的准确率。描述写得太烂模型就瞎调。举例某个工具其实专门用于重试失败的网络请求如果你描述写的是“发送HTTP请求”模型遇到需要重试的场景可能就直接调别的工具去了你要在描述里明确加上“当请求失败且需要重试时使用此工具”。工具选型的另一个层面是工具数量。同一场景下提供的工具数量不是越多越好。工具太多模型在筛选时容易混乱响应时间和准确率都会受影响。我的建议是分层每个Agent只挂载它这个角色需要的工具宁可拆成多个专用Agent也不要一个Agent挂几十个工具。3. 从0到1手写一个最小可用ReAct Agent3.1 设计思路与整体流程理论说了那么多该上手了。很多框架把Agent封装得面目全非反而不利于理解。我建议你亲手写一个极简的ReAct Agent——不用任何Agent框架就靠原生LLM接口加一个工具函数。写完之后你对整个工作流程的掌控感会完全不一样。这个最小版本做一件事根据用户的问题决定是否调用一个“计算器工具”来完成数学运算。整体循环流程是这样的组装系统Prompt告诉模型它有哪些工具可用、应该遵循什么样的思考和行动模式。把用户问题和历史轨迹发给模型。模型返回结果。如果包含Thought和Action我们就解析出工具名和参数执行工具拿到Observation把它拼接到上下文回到第2步继续。如果模型返回的是Final Answer就终止循环把答案返回给用户。这个循环本质上就是上面说的感知-决策-行动闭环的最简实现。3.2 代码实现与关键讲解我用Python加上OpenAI兼容接口来写。如果你用的是其他家的模型改一下base_url和api_key就行。import json import openai client openai.OpenAI( api_keyyour-api-key, base_urlhttps://your-model-endpoint # 各家模型的兼容接口 ) # 工具定义一个计算器 tools [ { type: function, function: { name: calculator, description: 执行数学运算支持加减乘除和指数运算。, parameters: { type: object, properties: { expression: { type: string, description: 要计算的数学表达式例如 (12 34) * 2, } }, required: [expression], }, }, } ] def calculator(expression: str) - str: # 这里为了演示用eval生产环境不要这样写会有代码注入风险 try: result eval(expression, {__builtins__: {}}, {}) return str(result) except Exception as e: return f计算出错: {str(e)} def run_agent(user_query: str, max_steps: int 8): # 消息历史包含系统Prompt、用户请求以及后续的动态轨迹 messages [ { role: system, content: ( 你是一个能调用工具的智能体。当用户的问题需要计算时 你会使用 calculator 工具。你必须严格按照 Thought → Action → Observation 的循环来处理 最终给出 Final Answer。 ) }, {role: user, content: user_query} ] for step in range(max_steps): print(f\n--- 第 {step 1} 轮循环 ---) # 调用模型让它决定下一步是调用工具还是给出最终答案 response client.chat.completions.create( modelyour-model-name, messagesmessages, toolstools, tool_choiceauto ) msg response.choices[0].message messages.append(msg) # 情况一模型决定调用工具 if msg.tool_calls: tool_call msg.tool_calls[0] fn_name tool_call.function.name fn_args json.loads(tool_call.function.arguments) print(fTool Call: {fn_name}({fn_args})) if fn_name calculator: observation calculator(fn_args.get(expression, )) # 把工具结果作为 tool 角色的消息追加到对话历史中 messages.append({ role: tool, tool_call_id: tool_call.id, content: observation, }) print(fObservation: {observation}) # 继续循环让模型看到工具结果后决定下一步 continue # 情况二模型直接输出最终答案没有工具调用 if msg.content: print(fFinal Answer: {msg.content}) return msg.content return 已达到最大执行步数任务提前终止。 if __name__ __main__: query 计算 (23 45) * 6 的结果然后告诉我结果再加上 100 是多少 run_agent(query)这段代码的核心逻辑就两个分支模型要调用工具我们就执行并回填模型直接给答案就结束。看起来简单但这就是所有Agent框架的地基。LangGraph、AutoGPT这些重框架底层都是一样的循环逻辑只是加了状态管理、恢复机制、并发处理这些工程能力。3.3 这个实现的关键细节与扩展方向第一个细节是消息历史的管理。注意看tool_call的id要和tool消息里的tool_call_id严格对应。这是各家LLM接口的通用约定模型发起一个tool调用后会有一个ID你执行完工具后要把结果以tool角色、带着同一个ID发回去。ID对不上模型就不知道这个观察结果对应的是哪个工具调用。第二个细节是循环终止条件。我这写了max_steps限制这是保命用的。没有这个限制理论上模型可能陷入无限循环——调用工具、看结果、再调用、再看结果永远不输出Final Answer。真实项目中除了步数限制还要加时间限制和token预算限制。第三个细节是错误处理。工具执行可能失败比如计算器遇到非法表达式。我在工具内部做了try-except把错误信息作为observation返回给模型。模型看到错误信息后通常会尝试修正调用或者换一种方式。这非常关键——错误本身也是信息要把错误反馈给模型而不是直接让整个流程崩溃。扩展方向上最直接的是加记忆。你可以把历史对话存到数据库下次启动时把之前的摘要加载进来。其次是加多个工具——比如加一个搜索工具、一个文件读写工具模型会根据问题自行选择。再进阶一点就是让模型自己写代码并执行这就是Code Interpreter类的实现路径了。这些都是从这段基础代码生长出来的枝干。4. 主流Agent框架横评LangGraph、AutoGPT、CrewAI、OpenAI Swarm等4.1 框架分层低阶编排与高阶自动化的不同设计哲学现在市面上的Agent框架多得让人眼花但如果你俯瞰一下会发现它们分两个流派。低阶编排框架代表是LangGraph。这类框架不替你做决策而是给你提供一套精细的控制工具节点、边、状态、条件跳转。你把任务流程画成一张图然后每个节点可以是一个LLM调用可以是一个工具执行。路径如何选择可以用LLM判断也可以写死代码逻辑。LangGraph适合复杂生产场景因为你可以精确控制每一步、每一条跳转路径可观测性和容错性都很好。代价是学习曲线陡峭你得先想清楚整个图的结构。高阶自动化框架代表是AutoGPT。这类框架强调“给个目标模型自己搞定一切”。你输入“帮我调研竞品A的定价策略并生成报告”它就自己规划步骤、自己调用工具、自己组装报告。听起来很美好但实际用的时候你会发现过度自由会带来不稳定。任务越开放模型越容易在某个环节跑偏且一旦跑偏排查起来不容易。AutoGPT这类框架适合原型验证和比较简单的自动化任务生产环境用起来要非常小心必须做任务边界裁剪。我的建议是个人学习和简单项目可以先用高阶自动化框架找感觉但真正要交付给业务系统用还是低阶编排框架更可靠。本质上Agent系统的可靠性跟“可控性”强相关越低阶你掌控的细节越多越稳定。4.2 多Agent框架与协作模式多Agent协作是最近的热点。当一个任务足够复杂单个Agent包办一切往往不如多个专职Agent分工合作来得稳定。这就像你开公司一个人既当前台又当会计又当销售容易出错但各司其职的团队反而能稳定运行。CrewAI是代表性的轻量级多Agent框架。核心概念是Role角色、Goal目标、Backstory背景故事、Task任务、Crew团队。你定义几个角色比如“市场分析师”和“文案写手”每个角色有自己的目标和约束然后创建任务分配给不同角色最后组成一个Crew来协同完成。CrewAI的设计对新手很友好理解起来很直觉。OpenAI Swarm则更轻量设计哲学是让Agent通过手递手handoff的方式进行协作。每个Agent负责特定领域当它判断自己搞不定时可以把会话交接给另一个更合适的Agent。这种handoff机制实现起来很简单却很实用。我们做客服系统时就用过类似的设计一个前台Agent接单它判断用户问的是技术问题就把会话转给技术Agent是账单问题就转给财务Agent。多Agent协作有个避不开的坑上下文共享。不同Agent之间是共享一套消息历史还是各存各的、只在交接时传递摘要这是架构设计时要想清楚的问题。共享历史简单但浪费token而且信息噪音多各存各的省token但交接时容易丢失细节。我们实践中用的是“核心档案共享过程记录隔离”的方案——用户的基本需求和偏好共享每个Agent自己的工作记录独立存储交接时由LLM生成交接摘要。4.3 无法绕开的名字OpenAI的Assistants API与Function Calling生态严格来说OpenAI提供的不是“Agent框架”而是Agent的底层构件。Function Calling是工具调用的标准方式已经成了行业事实标准。Assistants API提供的是会话管理、文件检索、代码解释器这些托管能力你可以在此基础上构建自己的Agent逻辑。MCPModel Context Protocol也值得关注。它本质上是一个开放协议定义了“工具如何标准化地暴露给模型”。在MCP出现之前每个框架都要自己对接不同应用的工具兼容性堪忧。MCP把工具定义、调用、鉴权做了标准化有了它一套工具可以接入多个Agent系统。这很像USB标准——之前每个设备都有自己的接口现在统一了。目前主流的Agent框架基本都支持MCP协议了新项目我建议直接上MCP标准减少未来适配成本。另外还有一个概念容易被混用就是Skill和Agent的关系。Skill本质上是某个Agent可复用的一组能力封装——比如“处理PDF文档”这个Skill可能包含“读取PDF、提取表格、总结内容”三个操作它不是一个独立的Agent而是挂载在Agent上的能力模块。Harness则是执行环境的概念是Agent跑在里面的沙箱容器定义了代码执行、文件系统、网络等边界。明白这些概念的区别面试和设计时就不会说混。5. 落地部署与工程化避坑指南从Demo到生产5.1 上下文管理的工程细节Token预算与内存控制很多人在Demo里跑通Agent后就往生产推然后被上下文爆炸打了一个措手不及。Agent和普通Chat有本质区别——普通Chat就一轮问答Agent要循环多轮每轮的上下文还要不断拼接工具结果Token消耗速度是指数级别的。举一个实际例子。我们有个Agent任务平均每轮执行5次工具调用。每次工具调用产生大约1000字符的观察结果。一次任务下来工具观察文本就有5000字符加上历史对话和系统Prompt轻松突破上万token。如果任务日志不禁掉或压缩跑几个小时上下文窗口直接打爆——也就是搜索引擎里常见的“agent execution terminated due to error”报错。这不是LLM的问题是我们没管好上下文预算。我的工程建议是三段式管理固定前缀区系统Prompt、工具Schema、长期记忆。这个区域尽量精简工具Schema描述要精炼但要准确长期记忆只保留高价值信息。滚动窗口区最近N轮对话包括Thought、Action、Observation。经验值N在4到6之间比较合适太少了Agent会丢失过程信息太多了浪费token。压缩归档区在此之前的对话信息用摘要方式存储。每5轮左右把旧内容压缩成一段摘要替换原始内容。这套机制看着简单但效果立竿见影能让Agent的长时运行稳定很多。需要留意的是压缩和摘要本身也要消耗token和时间所以阈值要按任务复杂度调。轻量任务窗口设短一些复杂推理任务可以适当加长。5.2 工具设计与安全边界权限、校验、审计三位一体工具设计是Agent工程里最容易出安全问题的一环。模型不像人它在调用工具时不会天然地去想“这个操作会不会有副作用”。如果你给Agent挂上一个“删除服务器文件”的工具它真干起来不会犹豫。我第一次做Agent工具安全的时候参考的准则可以归纳成三条最小权限原则。Agent能用的工具没明说需要就不要开。每个工具在分配时问自己这个任务真的需要访问数据库真的需要发邮件不需要就不挂载。宁可后面再加也不要一开始全开。参数校验前置。工具内部在真正执行动作之前一定要校验参数。比如一个“发送邮件”的工具接收参数之前一定要校验收件人、校验邮件长度、校验有没有附件安全性问题。不要相信模型传来的参数一定合法。人审机制。对于有副作用的高危操作——删除、修改、转账、发消息——加上人工确认步骤。模型生成请求之后先挂起由人工审核再执行。这在设计多Agent系统时尤其重要因为一个Agent可能会被另一个Agent诱导去执行危险操作。我还特别建议做全量审计日志。记下每一次工具调用谁调的、什么参数、结果是什么、耗时多少。出了问题可以回溯。没有日志的Agent系统排查问题就像盲人摸象非常痛苦。5.3 多Agent协作的常见冲突与处理策略多Agent协作不是把多个Agent凑在一起就能自动好好配合的实际跑起来你会遇到各种问题。最常见的冲突是角色职责不清。两个Agent都能处理某类任务结果用户请求到来时两个Agent都抢着处理或者互相以为对方会处理然后谁都不动。解决思路有两种一是把职责边界画得非常清晰每个Agent只能处理它专属领域的任务其他一律转交二是引入一个调度的路由Agent它不直接处理任务只负责判断谁来处理。我推荐后者更灵活因为真实任务经常跨领域。第二个常见问题是信息传递失真。Agent A把任务交接给Agent B时A的总结摘要如果写得不好B就理解偏了。这本质上是摘要质量问题。我的做法是让A在交接时不仅写自由文本摘要还要把关键变量以结构化字段的形式传给B比如“user_id12345, issue_typecancel_order, priorityhigh”用结构化信息兜底B即使摘要理解偏了关键数据也不会丢。第三个问题是死锁与循环。AgentA等AgentB的结果AgentB又等AgentA的结果两人干瞪眼。这是流程设计层面的缺陷在编排图上就要避免形成循环依赖。如果确实需要多Agent来回讨论一定要设置最大交互轮数超时强制熔断。5.4 Agent评测不评测不优化Agent系统的评测是我见过最少被讨论、但实际最要命的问题。传统的LLM评测是一问一答好判断对错。Agent是一串动作序列你怎么评它好不好看最终结果正确如果过程非常低效呢如果第一次执行错了但它自己修正回来了呢我建议至少从三个维度建立评测体系任务成功率最终产出是否符合预期。比如一个数据分析Agent成功标准是“给出正确的计算结论和图表”。执行效率完成相同任务用了多少轮循环、多少token。两个Agent任务成功率都是80%但A平均5步完成B平均15步高下立判。稳定性同一个任务跑10次成功率波动大不大有些Agent在简单变体上表现好换复杂变体就全线崩溃这类系统在真实场景里不敢随便上。评测集的构建也有讲究别只用几个精心挑选的样本。要覆盖正常情况、边界情况、异常情况尤其是异常输入——比如用户输入了不相关的内容、工具返回了错误数据、模型生成了非法的工具调用。这些“脏数据”场景往往是Agent系统在实际生产中最容易翻车的地方。6. 常见问题与面试高频考点经验实录6.1 实际踩坑问题速查表我把这几年的实践沉淀成一个问题速查表分享出来。这些问题几乎每个做Agent的人都会碰到。现象根本原因解决方案Agent反复调用同一个错误工具工具描述不准确或工具区分度太低重写工具描述突出使用边界和适用场景必要时减少工具数量Agent在工具调用后陷入死循环不输出最终结果循环终止条件缺失模型在思考-action循环里出不来加入max_steps限制、时间限制、Token预算上下文增长过快超限报错没有做消息压缩工具观察结果全部保留实施滚动窗口加压缩摘要策略控制上下文增长工具执行报错后Agent行为变得混乱错误信息没有结构化地反馈给模型把错误捕获后格式化为观察结果明确告知模型“这次调用失败可能的原因是……”多Agent协作出现信息丢失交接时只传递自由文本摘要关键结构化信息丢失增加结构化字段传递关键数据和状态Agent不调用工具而是直接编造答案文章中的系统提示没有强调“必须使用工具”或工具Schema有误强化系统提示约束检查工具定义是否符合模型接口要求同一个任务效果时好时坏模型温度过高或任务本身开放度过高降低温度细化任务边界引入反思机制收敛行为稳定性6.2 Agent面试高频考点与回答要点最近有不少读者问Agent面试会问什么。我结合自己做面试官的经验把高频考点拉一个单子每个题我都会说清楚想听到什么样的答案。“你怎么理解Agent”别上来就背定义。好的回答是先区分LLM和Agent再讲Agent的能力闭环感知-决策-行动-记忆最后落到一个具体的架构设计上。这能说明你不是背概念而是真的做过。“ReAct为什么会有效”这个问题的核心是ReAct把推理过程和工具使用显式地交替展开相当于让LLM在行动中“思考”。每一步的行动结果作为新的观察输入再继续推理这样能把隐式的推理过程外显化模型就能够边做边调整。“你在实际项目中遇到的Agent最大挑战是什么”这道题考察的是你的真实经验。说上下文管理的挑战、工具选择准确率、多Agent冲突都是好素材。关键是讲清楚你是怎么定位、怎么解决的比炫技术重要得多。“Agent记忆是怎么做的”从短期、中期、长期三个层次分别说实现再说你做的记忆筛选策略和检索策略最后点一句“长期记忆要定期清理和重写”。“多个工具要调先调哪个怎么决定”让模型自己决定的前提是工具描述足够好、功能无重叠。如果出现复杂依赖关系可以考虑把工具编排成工作流或者通过LLM规划器先输出一份行动方案再执行。一些在面试里常被口语化提的问题也需要顺便提一下。比如有人问“你是直接调LLM接口吗”答案其实很简单Agent本身不直接调底层接口实际工程中我们都会统一封装一层模型路由层方便切换不同供应商和监控token消耗。还有人说“Agent框架太求助”我自己也经历过一开始总觉得不装LangGraph就没法做Agent后来发现手写循环反而对原理理解更透彻框架是你真正了解全貌之后才做减法的工具。6.3 避坑心得与优化技巧最后结合个人项目经验把几个经过验证的优化技巧分享给各位。工具调用失败时给模型“纠正的机会”。Agent执行工具报错后直接中止会让整个任务失败但如果你把错误信息作为观察结果反馈回去大概率它会在下一轮重新尝试正确的调用方式。这在代码生成、API调用场景尤其明显。我见过不少次模型第一次把参数搞错了看到错误信息后第二次就改对了。反思机制不要每轮都做。反思很贵尤其任务本身简单时。我一般只在任务结束时、或者检测到工具连续报错时才触发反思。关键是要让反思产生的内容能沉淀下来下次遇到类似问题就有“经验”可用了。系统提示词里明确“流程规范”。除了告诉Agent它能做什么还要告诉它不能做什么。比如“不要绕过工具直接给出答案”、“如果工具连续三次失败报告问题并请求用户确认不要无限重试”。这样能避免很多层出不穷的失控行为。给小模型留退路。如果你用的是能力较弱的小模型它对Function Calling的遵循能力会差一些经常会出现该调用工具的时候不调用。解决方式之一是用更强的模型做规划层用小模型做执行层——规划层负责决策要调哪个工具、按什么顺序执行层负责具体干活。这个分层结构在成本和效果之间能取得很不错的平衡。7. 写在最后Agent项目还能怎么玩我个人在实际操作中有个深刻体会Agent学再多理论也不如自己动手改造一个具体案例来得实在。比如你做一个“全网热点追踪”Agent用搜索API加摘要能力让它每隔几小时自动生成热点日报。再比如做一个“会议纪要自动整理”Agent输入会议录音转写文本它自动提取待办事项并按负责人分派。这些看着很小但跑通之后你对Agent的整体认知会上一个台阶。另外一个小技巧分享给你做Agent时刚开始不要追求“全自动”。前端问题简单化、复杂任务保持“人审”介入。把一个高难度任务拆成几个子任务第一版落一个最核心、最不会给业务带来风险的跑起来看效果再迭代。全自动的Agent是理想可落地的Agent才是现实。Agent这个方向还在快速演进框架和论文更新速度很快但底层原理是稳定的感知、决策、行动、记忆加上工具和编排。把这个内核吃透无论是换模型、换框架还是换场景你都能快速适应。剩下的事就是多踩坑、多总结、多分享了。
阅读完成 · 觉得有帮助?
咨询建站