今天是2025年3月20日,星期四,北京,天气晴。
本文继续看大模型的巨象化理解。主要来自主要来自在于作者maartengrootendorst.com/,出了多个系列,之前我们也有过介绍,包括:
关于大模型量化,《一文图解大模型量化:量化的目的、内涵及若干实现策略》,https://mp.weixin.qq.com/s/O2POac1ZhCysLxBQeP5ETA
关于MOE,《可视化图解MOE大模型的7个核心问题:专家、路由、负载均衡及其用于视觉模态》,https://mp.weixin.qq.com/s/-SFFB6gUp0KA4x95lCoxcg
关于推理大模型:《可视化角度具象化理解DeepSeek-R1类推理大模型的习得进程》,https://mp.weixin.qq.com/s/ytKTGTgU2T7jSNrBghX1cA
现在我们看第四篇,关于Agent,《A Visual Guide to LLM Agents Exploring the main components of Single- and Multi-Agents》,https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-llm-agents,在这篇文章中,将通过60多个图像,探索LLM agent领域、它们的主要组成部分,并探索多agent框架。
具象化理解一个东西,包括内部的机理,是很有好处的,大家多看看。
抓住根本问题,做根因,专题化,体系化,会有更多深度思考。大家一起加油。
1、什么是LLM agent?
要了解LLM agent是什么,首先来探索LLM的基本能力。传统上,LLM不过是一个接一个地进行下一个token预测。

通过连续采样许多token,可以模拟对话,并使用LLM对问题给出更详细的答案。

然而,当继续“对话”时,任何给定的LLM都会展示出它的一个主要缺点,它不记得对话。

还有许多其他任务是LLM经常失败的,包括基本的数学运算,如乘法和除法:

这是否意味着LLM很糟糕?当然不是!没有必要让LLM具备一切能力,因为可以借助外部工具、记忆和检索系统来弥补它们的不足。
通过外部系统,可以增强LLM的能力。Anthropic将其称为“增强型LLM”。

例如,面对一个数学问题时,LLM可能会决定使用适当的工具(计算器)。

那么,这种“增强型LLM”是不是agent呢?不完全是,但也可以说有一点。
agent与环境互动,通常包含几个重要组成部分:
环境Environments—agent互动的世界
传感器Sensors —用于观察环境
执行器Actuators—用于与环境互动的工具
效应器Effectors—决定如何从观察到行动的“大脑”或规则

这个框架适用于各种与各种环境互动的agent,比如与物理环境互动的机器人或与软件互动的人工智能agent。
可以稍微扩展这个框架,使其适用于“增强型LLM”。

使用“增强型”LLM,agent可以通过文本输入(因为LLM通常是基于文本的模型)观察环境,并通过使用工具(如搜索网络)执行某些行动。
为了选择要采取哪些行动,LLM agent有一个关键组成部分:它的规划能力。为此,LLM需要能够通过诸如chain of thought等方法进行“推理”和“思考”。
利用这种推理行为,LLM agent将规划出要采取的必要行动。

这种计划行为使agent能够理解情况(LLM)、计划下一步(规划)、采取行动(工具)并跟踪已采取的行动(记忆)。
根据系统,可以拥有不同程度自主性的LLM agent。

根据询问的对象,一个系统越“有agent性”,LLM就越能决定系统的具体行为方式。
2、记忆Memory
LLM是健忘的系统,或者更准确地说,在与它们互动时,它们根本不进行任何记忆。
例如,当向LLM提问,然后接着问另一个问题时,它不会记得前者。

通常将其称为短期记忆,也称为工作记忆,它作为(近乎)即时上下文的缓冲区。这包括LLM agent最近采取的行动。
然而,LLM agent还需要跟踪可能多达数十个步骤,而不仅仅是最近的行动。

这被称为长期记忆,因为LLM agent理论上可能需要记住多达数十个甚至数百个步骤。

3、短期记忆Short-Term Memory
为短期记忆启用的最直接方法是使用模型的上下文窗口,这本质上是LLM可以处理的token数量。

上下文窗口通常至少有8192个token,有时可以扩展到数十万个token。
较大的上下文窗口可用于跟踪完整的对话历史记录作为输入提示的一部分。

只要对话历史记录适合LLM的上下文窗口,这种方法就可以很好地模拟记忆。然而,与其真正记住对话,实际上是“告诉”LLM那场对话是什么。
对于上下文窗口较小的模型,或者当对话历史记录较大时,可以使用另一个LLM来总结迄今为止发生的对话。

通过持续总结对话,可以保持对话的大小较小,它将减少token数量,同时只跟踪最重要的信息。
4、长期记忆Long-term Memory
LLM agent的长期记忆包括需要长期保留的agent过去的行动空间。
启用长期记忆的常见技术是将所有以前的互动、行动和对话存储在外部向量数据库中。
为了构建这样的数据库,首先将对话嵌入到能够捕捉其含义的数值表示中。

在构建数据库之后,可以将任何给定的提示嵌入,并通过将提示嵌入与数据库嵌入进行比较,在向量数据库中找到最相关的信息。

这种方法通常被称为检索增强生成(RAG)。
长期记忆还可以涉及保留不同会话中的信息。不同类型的信息也可以与不同类型的记忆相关联以存储,包括如下4种。

这种区分有助于构建agent框架,语义记忆(关于世界的事实)可能存储在与工作记忆(当前和最近的情况)不同的数据库中。
5、工具Tools
工具允许给定的LLM与外部环境(如数据库)互动,或者使用外部应用程序(如运行自定义代码)。

工具通常有两种用例:获取数据以检索最新信息和采取行动,如安排会议或订购食物。
要实际使用工具,LLM必须生成与给定工具的API匹配的文本,通常期望可以格式化为JSON的字符串,以便轻松地输入代码解释器。

请注意,这不仅限于JSON,也可以直接在代码中调用工具。
还可以生成LLM可以使用的自定义函数,如基本的乘法函数,这通常被称为函数调用,也就是Function call。

一些LLM在正确且广泛地提示后可以使用任何工具,工具使用是大多数当前LLM具备的能力。

为工具使用提供更稳定的方法是通过微调LLM。
工具可以按照给定顺序使用,如果agent框架是固定的。

或者LLM可以自主选择何时使用哪个工具。LLM agent,如上图所示,本质上是LLM调用的序列(但具有自主选择行动/工具等的能力)。

换句话说,中间步骤的输出被反馈到LLM中以继续处理。
6、工具使用Toolformer
工具使用是可以增强LLM的能力并弥补它们的不足。因此,在过去几年中,关于工具使用和学习的研究工作迅速增加。

“Tool Learning with Large Language Models: A Survey”,https://arxiv.org/pdf/2405.17935一文中有讲,随着对工具使用关注的增加,(agent)LLM有望变得更强大, 其中大部分研究不仅涉及提示LLM使用工具,还涉及专门训练它们使用工具。
最早实现这一目标的技术之一被称为Toolformer,一种训练模型决定调用哪些API以及如何调用的模型。
它通过使用[ 和 ]
token来指示调用工具的开始和结束。当给出提示,例如“5乘以3是多少?”时,它开始生成token,直到达到[token。

之后,它继续生成token,直到达到→token,这表明LLM停止生成token。

然后,将调用工具,并将输出添加到迄今为止生成的token中。

]
符号表明LLM现在可以继续生成(如果需要)。
Toolformer通过仔细生成包含许多工具使用的数据集来创建这种行为,模型可以在其上进行训练。对于每个工具,手动创建几个示例提示并用于采样使用这些工具的输出。

根据工具使用的正确性、输出和损失减少对输出进行过滤,得到的数据集用于训练LLM遵循这种工具使用格式。
自工具前驱发布以来,出现了许多令人兴奋的技术,例如可以使用数千个工具的LLM(ToolLLM)或可以轻松检索最相关工具的LLM。
不管怎样,大多数当前的LLM(2025年初)都经过训练,可以通过JSON调用工具。
7、模型上下文协议(MCP)
工具是agent框架的重要组成部分,允许LLM与世界互动并扩展其能力。然而,当您有许多不同的API时,启用工具使用变得麻烦,因为任何工具都需要:手动跟踪并提供给LLM,手动描述(包括其预期的JSON模式),每当其API更改时手动更新。

所以,为了使工具更容易在任何给定的agent框架中实现,Anthropic开发了模型上下文协议(MCP)。MCP为天气应用和GitHub等服务标准化了API访问。
它由三个组件组成:
MCP主机Host—管理连接的LLM应用(如光标)
MCP客户端Client—与MCP服务器保持一对一连接
MCP服务器Server—为LLM提供上下文、工具

例如,假设希望某个LLM应用总结仓库中的最新5次提交。
MCP主机(与客户端一起)将首先调用MCP服务器,询问哪些工具可用。

LLM接收到信息后,可能会选择使用工具。它通过主机向MCP服务器发送请求,然后接收结果,包括使用的工具。

最后,LLM接收到结果,并可以向用户解析答案。

这个框架通过连接到任何LLM应用都可以使用的MCP服务器,使创建工具变得更加容易。因此,当您创建一个与Github互动的MCP服务器时,任何支持MCP的LLM应用都可以使用它。
8、规划Planning
工具使用使LLM能够增强其能力,它们通常通过类似JSON的请求调用。
但是,LLM在agent系统中如何决定使用哪个工具以及何时使用呢?
这就涉及到计划。LLM agent中的规划涉及将给定任务分解为可操作的步骤。

这个规划使模型能够迭代反思过去的行为,并在必要时更新当前规划。

为了在LLM agent中启用规划,先来看看这种技术的基础,即推理。
9、推理Reasoning
计划可操作步骤需要复杂的推理行为。因此,LLM必须能够在规划任务的下一步之前展示这种行为。
“推理”LLM通常是那些在回答问题之前倾向于“思考”的LLM。

在这里使用“推理”和“思考”这些术语时有点随意,因为可以争论这是否是类似人类的思考,或者仅仅是将答案分解为结构化步骤。
这种推理行为可以通过大致两种选择来实现:微调LLM或特定的提示工程。
通过提示工程,可以创建LLM应该遵循的推理过程示例。提供示例(也称为少量样本提示)是引导LLM行为的好方法。

这种提供思维过程示例的方法称为chain of thought,能够实现更复杂的推理行为。
Chain-of-thought也可以通过零样本提示启用,而无需任何示例,只需简单地说“让一步一步思考”。

在训练LLM时,可以给它足够数量包含类似思维示例的数据集,或者LLM可以发现自己的思维过程。
一个很好的例子是DeepSeek-R1,其中使用奖励来引导思维过程的使用。

10、推理和行动Reasoning and Acting
在LLM中启用推理行为很好,但并不一定使其能够规划可操作步骤。
迄今为止关注的技术要么展示推理行为,要么通过工具与环境互动。

例如,Chain-of-thought纯粹关注推理。
最早将这两个过程结合起来的技术之一被称为ReAct (Reason and Act)。

反应通过仔细的提示工程来实现,其描述了三个步骤:
思考Thought—关于当前情况的推理步骤
行动Action—要执行的一组行动(例如,工具)
观察Observation—关于行动结果的推理步骤
提示本身相当简单,如下:

LLM使用此提示(可以作为系统提示)来引导其行为以循环进行思考、行动和观察。

它会持续这种行为,直到行动指定返回结果。通过迭代思考和观察,LLM可以规划行动,观察其输出并相应调整。
因此,与具有预定义固定步骤的agent相比,这种框架使LLM能够展示更自主的agent行为。
11、反思Reflecting
没有人,即使是具有反应的LLM,也会完美地执行每项任务,失败是过程的一部分,只要你能反思这个过程。
这种过程在反应中缺失,这就是反思的用武之地。反思是一种使用口头强化帮助agent从以往失败中学习的技术。
该方法假设三个LLM角色:
行动者Actor—根据状态观察选择并执行行动。可以使用连贯思考或反应等方法。
评估者Evaluator—对行动者产生的输出进行评分。
自我反思Self-reflection—反思行动者采取的行动和评估者生成的评分。

添加记忆模块以跟踪行动(短期)和自我反思(长期),帮助agent从错误中学习并识别改进的行动。

一个类似且优雅的技术称为自我总结思考,其中总结思考输出和生成反馈的行动会重复进行。如下图,来自SELF-REFINE: Iterative Refinement with Self-Feedback,https://proceedings.neurips.cc/paper_files/paper/2023/file/91edff07232fb1b55a505a9e9f6c0ff3-Paper-Conference.pdf

有趣的是,这种自我反思行为,无论是反思还是自我总结思考,都非常类似于强化学习,其中根据输出的质量给予奖励。
12、多agent协作Multi-Agent Collaboration
探索的单agent存在几个问题:工具太多可能会使选择复杂化,上下文变得过于复杂,任务可能需要专业化。
相反,可以转向多agent,即多个agent(每个agent都有访问工具、记忆和计划的能力)相互互动以及与他们的环境互动的框架:

这些多agent系统通常由专业agent组成,每个agent都配备了自己的一套工具,并由主管监督。主管管理agent之间的通信,并可以为专业agent分配特定任务。

每个agent可能有不同类型的工具可用,但也可能有不同的记忆系统。
在实践中,有几十种多agent架构,其核心有两个组成部分:
agent初始化 Agent Initialization—如何创建各个(专业)agent?
agent协调 Agent Orchestration—如何协调所有agent?

13、人类行为的交互式仿真Interactive Simulacra of Human Behavior
可以说最具影响力且非常酷的多agent论文之一是《Generative Agents: Interactive Simulacra of Human Behavior》(Generative Agents: Interactive Simulacra of Human Behavior),这篇论文创建了模拟可信人类行为的计算软件agent,他们称之为生成agent。

每个生成agent被赋予的档案使他们以独特的方式行事,并有助于创造更有趣和动态的行为。
每个agent都用三个模块(记忆、规划和反思)初始化,非常像之前看到的反应和反思的核心组成部分。

这个框架中最重要的组成部分之一是记忆模块。它存储了所有的计划和反思行为,以及迄今为止的所有事件。
对于任何给定的下一步或问题,会根据其新颖性、重要性和相关性对记忆进行检索和评分,评分最高的记忆将与agent共享。

它们共同允许agent自由地进行行为并相互互动,因此,几乎没有agent协调,因为他们没有特定的目标需要努力实现。

这里的评估可以看看,评估主要以agent行为的可信度为指标,由人类评估者进行评分。

它展示了观察、计划和反思对于这些生成agent的表现很重要,正如之前探讨的,没有反思行为,规划就不完整。
14、模块化框架Modular Frameworks
无论选择哪种框架来创建多agent系统,它们通常由几个要素组成,包括其档案、对环境的感知、记忆、规划和可用行动。

实现这些组成部分的流行框架有AutoGen、MetaGPT和CAMEL。然而,每个框架在agent之间的通信方式上略有不同。
以CAMEL为例,用户首先创建问题并定义AI用户和AI助手角色。AI用户角色代表人类用户,并将引导整个过程。
之后,AI用户和AI助手将通过相互合作来解决查询问题。

这种角色扮演方法使得agent之间的协作沟通成为可能。
AutoGen和MetaGPT有不同的沟通方式,但归根结底,它们都依赖于这种协作性质的沟通。agent有机会相互交流,以更新他们当前的状态、目标和下一步行动。
在过去一年中,尤其是在最近几周,这些框架的增长呈爆炸式增长,所以都可以关注。

参考文献
1、https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-llm-agents
(文:老刘说NLP)