智能体 Agent 核心是通过与环境交互更好的完成用户的指令或任务。一个合格的智能体应该具有那些能力,这些能力面临何种困难,又有那些的解决方案。为建立起Agent的知识体系,本文围绕Agent的框架主要介绍:
1)从功能、核心能力以及工程落地三个维度介绍Agent框架 2)Agent 大脑核心:规划、推理和自我反思能力的建设 3)Function call 和 MCP 工具使用方式以及记忆模块介绍
关注“AI老马” —【获取资源】&【进群交流】
Agent架构可以从功能,核心能力以及工程技术维度进行定义。
复旦大学张奇团队在关于Agent的综述中,将基于大语言模型的智能体分为三功能模块:大脑 Brain、感知 Perception) 与行动 Action。大脑模块 作为控制中心,承担记忆、思考与决策等基础任务;感知模块负责接收并处理来自外部环境的多模态信息;行动模块则借助工具执行任务并影响环境。比如,询问 “是否会下雨“ 时,感知模块将指令转化为LLM可理解的表示形式;大脑模块根据当前天气和网络气象信息进行推理;最终行动模块作出回应,并将雨伞递给人类。通过重复这一过程,智能体能够持续获取反馈并与环境互动。
前openAl Weng Lilian,在博客中认为 Agent 需要具备三大核心能力即:规划 Planning,记忆 Memory 和工具使用 Tool use。 规划中主要目标是对任务进行合理的拆解,需要三种能力相互的融合,即三种能力相互依赖共同对任务进行拆解,得到可验证的子步骤,也有论文称之为 reasoning-planning,或者谋略deliberation。
记忆可以分为短期和长期记忆,短期记忆通过上下文学习的Prompt 工程进行,而长期记忆通过最大内积搜索(Maximum Inner Product Search MIPS)策略,主要是对记忆进行编码,存储和检索的能力。在执行阶段借助工具扩充Agent的能力边界,如何认识工具,使用工具和制作工具等成为关键。

图1,Agent 技术能力框架
模块化推理、知识与语言 (Modular Reasoning, Knowledge and Language MRKL) 通过将通用大语言模型作为 “路由器” (router),将用户的查询或任务动态分配给不同 “专家模块” 。MRKL系统主要由两部分构成:
目前流行的Agent开源项目有:AutoGPT、 BabyAGI、Generative Agents、MetaGPT等。一个智能体的所具有的核心能力是一致的,本文以Planning、Memory和Tool use 为框架进行介绍。
从完成任务的维度,智能体对任务进行拆解,然后对拆解的步骤进行反思。
思维链CoT是一种让模型在给出最终答案前,模拟人类的思考过程,生成一系列中间推理步骤的提示技术。它通过 “Let's think step by step" 等提示,将复杂的推理任务转化为一系列更简单的步骤。
主要解决的问题:
问题1:直接回答的局限性。对于需要多步逻辑推理的问题,如数学题、逻辑谜题,模型直接生成答案的错误率很高。
问题2:提升透明度和可信度。CoT使模型的思考过程变得可见,便于人类理解和验证其结论的合理性,而不是一个“黑箱”答案。
举例: “一个篮子里有5个苹果,你拿走了2个,又放进去3个,最后有多少个苹果? ”
可以分为三个步骤进行拆解:
步骤1:初始有5个苹果。
步骤2:拿走2个,剩下5-2=3个苹果。
步骤3:又放进去3个,现在有3+3=6个苹果。
最终答案:6个。
思维树 ToT是CoT的泛化。它不再局限于一条线性的推理链,而是在每一步思考时,同时探索多种可能的推理路径,从而形成一个树状结构,并通过某种评估标准如模型自我评分,来选择最有希望的路径继续深入,必要时进行回溯。这更接近人类的“深思熟虑”。
主要解决的问题:
问题1:CoT的单路径局限。CoT就像一条独木桥,一旦某一步走错,整个推理就会失败。对于棋类游戏、战略规划等需要探索、权衡和回溯的复杂问题,CoT能力不足。
问题2:全局决策优化。ToT允许模型在决策点“瞻前顾后”,评估不同选择的长期后果,从而做出更优的全局决策。
举例:解决一个数独游戏
步骤1:模型会识别出当前可填的、可能性最少的空格。
步骤2:对于这个空格,模型生成所有可能的合法数字(如可能是2、4、6),形成多条分支。
步骤3:对每条分支(假设填2),向前推理几步,评估其可行性(是否导致冲突)。
步骤4:如果填2导致冲突,则回溯到决策点,尝试下一个选项(填4),继续探索。通过这种启发式搜索,最终找到解。
自一致性旨在提升CoT可靠性,其核心思想是,对于同一个问题,通过多次采样或使用不同的推理路径提示,生成多条不同的推理链和答案,然后选择其中出现最频繁的答案作为最终答案。“真理往往掌握在多数手中”。
主要解决的问题:
问题1:CoT的随机性。由于大模型生成具有随机性,单次CoT推理可能会因为一步的随机错误而得到错误答案。
问题2:提升鲁棒性和准确性。通过“投票”机制,过滤掉那些因随机性而产生的错误路径,使得最终答案更加稳定和准确。
举例:问题“如果一本书打8折后是16元,原价是多少?”
采样1(CoT路径A):16元是80%,所以1%是16/80=0.2元,原价(100%)是0.2*100=20元。答案:20
采样2 (CoT路径B):设原价为X,0.8 * X=16,所以 X=16/0.8=20。答案:20
采样3(CoT路径C):8折是16元,那1折就是2元,所以10折是20元。答案:20
采样4 (CoT路径D):(可能出错的路径)16*1.2=19.2。答案:19.2
答案20出现了3次,答案19.2出现了1次。最终采纳答案20。
ReAct 是一种将推理与行动交替进行的范式。它打破了传统Agent先推理完再行动,或者只行动不推理的模式,让模型在每一步行动前先生成推理轨迹,在行动后观察反馈,形成“思考-行动-观察”的闭环循环。
主要解决的问题:
问题1:幻觉与事实错误。纯CoT推理容易产生事实性幻觉,缺乏外部信息支撑;ReAct通过Acting引入外部工具获取真实信息修正推理。
问题2:行动缺乏逻辑支撑。纯行动策略往往缺乏宏观规划,容易迷失目标;ReAct通过Reasoning保持对任务目标的跟踪和策略调整。
问题3:无法处理由于环境变化带来的推理中断:ReAct允许模型根据每一步的观察结果动态调整下一步计划。
举例:“刚才在格菜美获奖的那位歌手,他的第一张专辑叫什么?”。ReAct流程:
Thought:我需要先查一下刚才谁获得了格莱美奖。 Action:Search("latest Grammy winners") Observation:搜索结果显示Taylor Swift获奖了。 Thought:现在我知道是Taylor Swift了,我需要查她的第一张专辑。 Action:Search("Taylor Swift first album name")。 Observation:搜索结果显示是《Taylor Swift》。 Final Answer:他的第一张专辑叫《Taylor Swift》。
Reflexion 是一种基于语言反馈的强化学习框架(但在实际实现中常简化为Prompt工程)。它要求Agent在完成任务失败后,通过回顾之前的轨迹 Trajectory,生成一段口头”反思“,指出哪里做错了以及下次该如何改进。这个”反思”会作为短期记忆加入到下一次尝试的上下文中,指导模型避开之前的坑。
主要解决的问题:
问题1:重复试错效率低。普通的重试机制往往会让Agent在一个错误路径上反复横跳;Reflexion通过显式的”自我批评”强制改变推理路径。
问题2:缺乏长短期记忆的利用。模型通常 “做完即忘”,Reflexion将失败经验转化为语义记忆,即时提升后续表现。
问题3:复杂任务成功率低:在需要多步推理的复杂场景中,单次Pass率极低,Reflexion通过迭代式优化显著提升成功率。
举例:编写一个Python函数解决特定的算法题。
尝试1:Agent生成了代码A->运行测试用例->报错;这部分逻辑导致数组越界。
Reflexion阶段:Agent分析报错,生成反思:”我在处理循环边界时使用了range(n),但在访问i计1时导致了越界,下次我应该使用 range(n-1)或者增加边界检查。”
尝试2:Agent读取题目+上一轮的反思->生成代码B(修正了边界问题)->测试通过。
CoH 是一种利用”后见之明”数据进行微调或提示的方法。它不仅向模型展示正确答案,还同时展示一系列带有反馈注解的历史输出(包括正面反馈的好的输出,和负面反馈的坏的输出)。模型通过学习“因为做了X导致了坏结果,因为做了Y导致了好结果“这种成对的对比信息,从而理解如何生成更符合人类偏好的答案。
主要解决的问题
问题1:不仅知其然,更知其所以然:普通的SFT(监督微调)只教模型“什么是对的”,CoH通过对比教模型“根据反馈调整输出”。
问题2:对齐人类偏好的通用性:解决RLHF (人类反馈强化学习)训练过程复杂、不稳定得问题,用类似于监督学习的方式达到将反馈融入生成的目的。
问题3:细粒度控制生成质量:允许用户在推理时通过指定”目标反馈”(例如:“给我就像那个得了满分的答案一样的输出”)来控制生成结果。
举例,“写一段关于苹果的描述”。
训练/提示数据构造
输入:写一段关于苹果的描述。
负面反馈:“这句话太简单了,像小学生写的。” -> 对应输出:“苹果是红的,好吃的。”
正面反馈:“这句话辞藻华丽,富有想象力。” ->对应输出:“那是一枚诱人的深红果实,宛如伊甸园中遗落的宝石,散发着秋日清晨的甜香。”
推理应用
Prompt:参考上述反馈模式,请给我生成一个“富有想象力”的关于梨子的描述。
Mode输出:(模仿正面反馈的风格生成关于梨子的高质量文本)。
大模型在完成任务时有以下问题:
MRKL中的专家系统实际就是Agent中需要使用的工具。工具拓展了使用者的能力边界,对于Agent也一样。工具可以作为一种”即插即用”的模块,为Agent 增强专业知识和适应领域需求。并且工具将Agent 从一个纯“语言大脑”升级为一个可以调用外部专业能力的“行动者”。
大模型使用工具有不同的层级,初级阶段是open AI 使用的 function call 模式,更像是通过规则匹配到特定的函数进行使用。更进一步是MCP,是一个标准,将不同的工具统一调用的格式,减少了大模型理解和使用的成本。
以上工具使用的方式都需要经历的过程是:认识工具,使用工具和制作工具。可借助大语言模型的零样本和少样本学习能力,认识特定的工具。在认识工具的基础上,Agent需要通过实践来掌握工具的使用技巧,并具备适应不同场景的泛化能力。可以通过两种方式学习如何使用工具,模仿学习和和反馈学习。为了让工具更契合Agent的需求,最高阶的能力是能够创造新工具。专为Agent设计的工具应更具模块化,并拥有更友好的输入输出格式。在指令和示例的引导下,Agent可以编写全新的可执行程序作为工具,以及将多个现有工具封装成功能更强大的复合工具,并具备自我调试能力。
这是工具调用的初始落地形态,以 OpenAI 的 Function Call 为代表,核心是 “让模型按预设规则触发工具”。适用场景是简单、独立的单点工具调用(如天气查询、计算器、单一 API 调用)
核心流程:
核心痛点
为解决 Function Call 的 “碎片化” 问题,MCP(Model Context Protocol) 作为标准化协议应运而生,核心是 “定义一套通用的工具调用语言,让所有工具按同一标准封装”。
核心改进
核心价值:实现 “一次适配,多工具复用”,大幅降低模型的理解成本和开发者的适配成本,为多工具协同奠定基础。
MCP 不是替代 Function Call,而是对 Function Call 的 “标准化封装”。Function Call 是 “具体的执行动作”,MCP 是 “执行动作的通用规则”。例如,按 MCP 封装的get_stock_price函数,其调用指令格式与get_weather函数完全一致,模型无需分别学习。
文本将记忆分为短期记忆和长期记忆。短期记忆特点为,即来即用一般为当前对话的上下文等。而长期记忆需要进行相关知识的补充来辅助判断,关键的技术是如何的检索知识。
最大内积搜索 MIPS 是一种向量检索技术,核心目标是在大规模向量集合中,快速找到与查询向量的内积值最大的一组向量。在大模型 Agent 的外部记忆场景中,内积值可直接衡量两个向量的相似度,是实现 “记忆检索” 的核心算法。MIPS 对应的是长期记忆的 “检索” 环节,完整流程如下:
记忆编码:对需要长期存储的信息如历史对话、领域知识文档,通过大模型的 Embedding 接口转化为固定维度的向量;
记忆存储:将向量写入支持 MIPS 的向量数据库,并构建 ANN 索引;
记忆检索: 首先将查询文本转化为向量;其次向量数据库执行 MIPS,返回 Top-k 最相关的向量;最后将向量对应的原始文本 / 数据回填到大模型的上下文窗口;
记忆更新:新的记忆向量会持续写入数据库,索引也会定期更新以保证检索精度。
MIPS检索中常用的最近邻 ANN技术包括:LSH,ANNOY,HNSW,FAISS,ScaNN
技术 | 核心优势 | 核心劣势 | 适用向量规模 | 适用向量维度 | 推荐场景 |
|---|---|---|---|---|---|
LSH | 理论扎实,易并行 | 高维精度差,调优复杂 | 亿级 | 低维(<512) | 推荐系统粗召回、分布式检索 |
ANNOY | 实现简单,内存低 | 高维精度差,不适合亿级 | 十万~百万级 | 低~中维(<1024) | 个人项目、原型验证、增量更新 |
HNSW | 高维精度与速度双优,支持增量 | 索引构建慢,内存高于 ANNOY | 百万~亿级 | 高维(1024~2048) | 大模型 Agent 实时记忆检索、向量数据库 |
FAISS | 集成多种算法,CPU/GPU 加速,超大规模 | API 复杂,参数调优难 | 十亿级 | 低~高维 | 超大规模向量检索、企业级系统 |
ScaNN | 超大规模下精度高,内存低 | 索引构建慢,调优复杂 | 十亿级 | 低~高维 | 企业级搜索与推荐系统 |
ANN benchmarks: https://ann-benchmarks.com/index.html
参考: arXiv:2309.07864 Weng, Lilian. (Jun 2023). “LLM-powered Autonomous Agents”. Lil’Log.