
60张图深度剖析LLM Agents,逼近通用人工智能
LLM 代理正变得越来越普遍,似乎取代了我们熟悉的“常规”对话式 LLM。这些令人难以置信的功能并不容易创建,需要许多组件协同工作。
本文中提供了 60 多个自定义视觉对象,您将探索 LLM 代理领域、它们的主要组件,并探索多代理框架。
什么是LLM代理
要了解什么是 LLM 代理,让我们首先探索 LLM 的基本功能。
传统上,LLM 只做下一个标记预测。
通过连续对许多 tokens 进行采样,我们可以模拟对话并使用 LLM 为我们的查询提供更广泛的答案。
然而,当我们继续 “对话” 时,任何给定的 LLM 都会展示其主要缺点之一,它不记得对话!
LLM 经常无法完成许多其他任务,包括乘法和除法等基本数学:
这是否意味着 LLM 很糟糕?绝对不是!LLM 不需要无所不能,因为我们可以通过外部工具、内存和检索系统来弥补它们的缺点。
通过外部系统,可以增强 LLM 的功能。
Anthropic 称之为“增强的 LLM”。
例如,当面临数学问题时,LLM 可能会决定使用适当的工具(计算器)。
那么这个“Augmented LLM”是 Agent 吗?
让我们从 Agent 的定义开始:
代理:是可以被视为通过传感器感知其环境并通过执行器作用于该环境的任何东西。
代理与其环境交互,通常由几个重要组件组成:
- 环境— 代理与之交互的世界
- 传感器— 用于观察环境
- 执行器— 用于与环境交互的工具
- 效应器— 决定如何从观察到行动的“大脑”或规则
此框架用于与各种环境交互的各种代理,例如机器人与其物理环境交互或与软件交互的 AI 代理。
我们可以稍微概括一下这个框架,使其适合 “Augmented LLM”。
使用“增强”LLM,代理可以通过文本输入观察环境(因为 LLM 通常是文本模型),并通过使用工具执行某些操作(如搜索 Web)。
选择要采取的行动,LLM Agent 有一个至关重要的组成部分:它的计划能力。
为此,LLM 需要能够通过思维链等方法进行 “推理” 和 “思考”。
使用这种推理行为,LLM 代理将规划要采取的必要行动。
这种规划行为使 Agent 能够了解情况 (LLM)、计划下一步 (planning)、采取行动 (工具) 并跟踪所采取的行动 (memory)。
根据系统的不同,您可以以不同程度的自主权来设置 LLM 代理。
根据你问的人,一个系统越是“代理”的,那么 LLM 就越能决定它的行为方式。
在接下来的部分中,我们将通过 LLM Agent 的三个主要组件(内存、工具和规划)介绍各种自主行为方法。
记忆
LLM 是健忘系统,或者更准确地说,在与它们交互时根本不执行任何记忆。
例如,当你向 LLM 提出一个问题,然后又提出另一个问题时,它不会记住前者。
我们通常将其称为短期记忆,也称为工作记忆,它充当(近)即时上下文的缓冲区。这包括 LLM 代理最近采取的行动。
但是,LLM 代理还需要跟踪潜在的数十个步骤,而不仅仅是最近的操作。
这被称为长期记忆,因为 LLM 代理理论上可能需要数十甚至数百个需要记住的步骤。
让我们探讨几个为这些模型提供内存的技巧。
短期记忆
启用短期记忆最直接的方法是使用模型的上下文窗口,它本质上是 LLM 可以处理的标记数量。
上下文窗口往往至少有 8192 个令牌,有时可以扩展到数十万个令牌!
大型上下文窗口可用于跟踪完整的对话历史记录,作为输入提示的一部分。
只要对话历史记录适合 LLM 的上下文窗口,这就可以工作,并且是模仿记忆的好方法。然而,我们实际上不是真正记住一段对话,而是 “告诉” LLM 那段对话是什么。
对于上下文窗口较小的模型,或者当对话历史很大时,我们可以改用另一个 LLM 来总结到目前为止发生的对话。
通过不断总结对话,我们可以保持较小的对话规模。它将减少代币的数量,同时只跟踪最重要的信息。
长期记忆
LLM 代理中的长期记忆包括代理过去的操作空间,该空间需要长时间保留。
启用长期记忆的一种常见技术是将之前的所有交互、动作和对话存储在外部向量数据库中。
为了构建这样的数据库,对话首先被嵌入到捕捉其含义的数字表示中。
构建数据库后,我们可以嵌入任何给定的提示,并通过比较提示嵌入与数据库嵌入在向量数据库中找到最相关的信息。
这种方法通常被称为检索增强生成 (RAG)。
长期记忆还可能涉及保留来自不同会话的信息。例如,您可能希望 LLM 代理记住它在之前的会话中所做的任何研究。
不同类型的信息也可能与要存储的不同类型的内存相关。 在心理学中,有许多类型的记忆需要区分,在Cognitive Architectures for Language Agents
论文将其中四种与 LLM 代理联系起来。
这种差异化有助于构建代理框架。 语义内存
(关于世界的事实)可能存储在与工作内存
(当前和最近的情况)不同的数据库中。
工具
工具允许给定的 LLM 与外部环境(例如数据库)交互或使用外部应用程序(例如运行自定义代码)。
工具通常有两个用例:获取数据以检索最新信息,以及采取行动(例如安排会议或订购食物)。
要实际使用工具,LLM 必须生成适合给定工具的 API 的文本。我们倾向于期望字符串可以格式化为 JSON,以便可以轻松地将其提供给代码解释器。
请注意,这不仅限于 JSON,我们也可以在代码本身中调用该工具!
您还可以生成 LLM 可以使用的自定义函数,例如基本的乘法函数。这通常称为函数调用。
如果正确且广泛地提示,某些 LLM 可以使用任何工具。工具使用是大多数当前 LLM 都能够做到的。
访问工具的更稳定方法是微调 LLM (稍后会详细介绍!)
如果代理框架是固定的,则可以按给定的顺序使用工具或者 LLM 可以自主选择使用哪个工具以及何时使用。
如上图所示,LLM 代理本质上是 LLM 调用的序列。
换句话说,中间步骤的输出将反馈到 LLM 中以继续处理。
工具成型机
工具使用是增强 LLM 功能并弥补其缺点的强大技术。因此,关于工具使用和学习的研究工作在过去几年中迅速激增。
这些研究的大部分内容不仅涉及提示 LLM 使用工具,还涉及专门训练他们使用工具。
最早执行此操作的技术之一称为 Toolformer,这是一个经过训练的模型,用于决定调用哪些 API 以及如何调用。
它通过使用and 标记来指示调用工具的开始和结束。当给出提示时,例如“_什么是 5 乘以 3?_“,它会开始生成 Token,直到到达 Token。
之后,它会生成 Token,直到到达 Token,这表明 LLM 停止生成 Token。 →
然后,将调用该工具,并将输出添加到到目前为止生成的令牌中。
该符号表示 LLM 现在可以在必要时继续生成。
Toolformer 通过仔细生成一个数据集来创建此行为,该数据集包含模型可以训练的许多工具用途。对于每个工具,都会手动创建一个 few-shot 提示,并用于对使用这些工具的输出进行采样。
根据工具使用、输出和损失减少的正确性对输出进行过滤。生成的数据集用于训练 LLM 以遵守这种工具使用格式。
自 Toolformer 发布以来,出现了许多令人兴奋的技术,例如可以使用数千种工具的 LLM(ToolLLM) 或可以轻松检索最相关工具的 LLM (Gorilla)。
无论哪种方式,大多数当前的 LLM(2025 年初)都已经过训练,可以通过 JSON 生成轻松调用工具(正如我们之前看到的那样)。
模型上下文协议 (MCP)
工具是 Agentic 框架的重要组成部分,它允许 LLM 与世界交互并扩展其功能。但是,当您拥有许多不同的 API 时,启用工具使用会变得很麻烦,因为任何工具都需要:
- 手动跟踪并馈送到 LLM
- 手动描述(包括其预期的 JSON 架构)
- 每当其 API 发生变化时手动更新
为了使工具更容易为任何给定的 Agentic 框架实现,Anthropic 开发了模型上下文协议 (MCP)。 MCP 对天气应用程序和 GitHub 等服务的 API 访问进行了标准化。
它由三个部分组成:
- MCP主机— 管理连接的 LLM 应用程序(如 Cursor)
- MCP客户端— 与 MCP 服务器保持 1 对 1 连接
- MCP服务器— 为 LLM 提供上下文、工具和功能
例如,假设您希望给定的 LLM 应用程序汇总存储库中的 5 个最新提交。
MCP 主机(连同客户端)将首先调用 MCP 服务器以询问哪些工具可用。
LLM 收到信息,并可能选择使用工具。它通过 Host 向 MCP 服务器发送请求,然后接收结果,包括使用的工具。
最后,LLM 接收结果并可以解析用户的答案。
此框架通过连接到任何 LLM 应用程序都可以使用的 MCP 服务器,使创建工具变得更加容易。因此,当您创建 MCP 服务器以与 Github 交互时,任何支持 MCP 的 LLM 应用程序都可以使用它。
规划
使用工具可以让 LLM 增加其功能。它们通常使用类似 JSON 的请求进行调用。
但是,在代理系统中,LLM 如何决定使用哪种工具以及何时使用?
这就是规划的用武之地。LLM 代理中的规划涉及将给定的任务分解为可操作的步骤。
此计划允许模型迭代地反映过去的行为,并在必要时更新当前计划。
我喜欢计划制定时!
为了在 LLM 代理中启用规划,让我们首先看一下这项技术的基础,即推理。
推理
规划可操作的步骤需要复杂的推理行为。因此,LLM 必须能够在采取下一步规划任务之前展示这种行为。
“推理”LLM 是那些倾向于在回答问题之前 “思考” 的 LLM。
我使用“推理”和“思考”这两个术语有点松散,因为我们可以争论这是类似人类的思维,还是仅仅将答案分解为结构化的步骤。
这种推理行为可以通过大约两种选择来实现:微调 LLM 或特定的提示工程。
通过快速工程,我们可以创建 LLM 应该遵循的推理过程的示例。提供示例(也称为 few-shot prompting)) 是控制 LLM 行为的好方法。
这种提供思维过程示例的方法称为 Chain-of-Thought ,可以实现更复杂的推理行为。
也可以在没有任何示例(零镜头提示)的情况下启用思路链,只需说 “Let's think step-by-step” 即可。
在训练 LLM 时,我们可以给它足够数量的数据集,其中包括类似思想的例子,或者 LLM 可以发现自己的思维过程。
一个很好的例子是 DeepSeek-R1,其中奖励用于指导思维过程的使用。
推理和行动
在 LLM 中启用推理行为很好,但不一定能够规划可行的步骤。
到目前为止,我们关注的技术要么展示推理行为,要么通过工具与环境交互。
例如,Chain-of-Thought 纯粹专注于推理。
将这两个过程结合起来的首批技术之一称为 ReAct(理性和行为)。
ReAct 通过仔细的提示工程来实现这一点。ReAct 提示描述了三个步骤:
- 思考- 关于当前情况的推理步骤
- Action (操作) - 要执行的一组操作 (例如,工具)
- 观察- 关于作结果的推理步骤
提示本身非常简单。
LLM 使用此提示(可用作系统提示)来引导其行为在思想、行动和观察的循环中工作。
它会继续此行为,直到操作指定返回结果。通过迭代想法和观察结果,LLM 可以规划行动,观察其输出,并进行相应的调整。
因此,与具有预定义和固定步骤的代理相比,此框架使 LLM 能够展示更多自主的代理行为。
反思
没有人,即使是拥有 ReAct 的 LLM,也能完美地完成每项任务。失败是过程的一部分,只要你能反思这个过程。
ReAct 中没有这个过程,这就是 Reflexion 的用武之地。Reflexion 是一种使用语言强化来帮助代理从以前的失败中学习的技术。
该方法承担三个 LLM 角色:
- Actor (作者) – 根据状态观察选择和执行操作。我们可以使用 Chain-of-Thought 或 ReAct 等方法。
- Evaluator (计算器)– 对 Actor 生成的输出进行评分。
- Self-reflection (自我反思) - 反映 Actor 采取的行动和 Evaluator 生成的分数。
添加了内存模块以跟踪操作 (短期) 和自我反思 (长期),帮助代理从错误中学习并确定改进的操作。
一种类似且优雅的技术称为 SELF-REFINE,其中重复优化输出和生成反馈的操作。
同一个 LLM 负责生成初始输出、优化输出和反馈。
有趣的是,这种自我反思的行为,包括 Reflexion 和 SELF-REFINE,与强化学习非常相似,在强化学习中,根据输出的质量给予奖励。
多代理协作
我们探索的单个代理有几个问题:太多的工具可能会使选择复杂化,上下文变得太复杂,并且任务可能需要专业化。
相反,我们可以看看 Multi-Agent,即多个 Agent(每个 Agent都可以访问工具、内存和规划)相互交互及其环境的框架:
这些多代理系统通常由专门的代理组成,每个代理都配备了自己的工具集,并由主管监督。主管管理 Agent 之间的通信,并可以将特定任务分配给专门的 Agent。
每个 Agent 可能具有不同类型的可用工具,但也可能有不同的内存系统。
在实践中,有数十种 Multi-Agent 架构,其核心有两个组件:
- Agent初始化— 如何创建单个(专用)Agent ?
- AgentOrchestration— 如何协调所有 Agent ?
让我们探索各种有趣的 Multi-Agent 框架,并重点介绍这些组件是如何实现的。
人类行为的交互式模拟
可以说,最具影响力的,坦率地说,非常酷的多代理论文之一被称为生成代理:人类行为的交互式模拟
在本文中,他们创建了模拟可信的人类行为的计算软件代理,他们称之为 Generative Agents。
为每个生成代理提供的配置文件使它们以独特的方式运行,并有助于创建更有趣和动态的行为。
每个代理都使用三个模块(内存、规划和反射)进行初始化,这与我们之前看到的 ReAct 和 Reflexion 的核心组件非常相似。
内存模块是此框架中最重要的组件之一。它存储 Planning 和 Reflection 行为,以及到目前为止的所有事件。
对于任何给定的下一步或问题,都会检索记忆并根据其新近度、重要性和相关性进行评分。得分最高的记忆将与 Agent 共享。
它们共同允许 Agent 自由地进行他们的行为并相互交互。因此,代理编排非常少,因为它们没有特定的目标要努力。
交互式演示中的带注释图像。
本文中有太多令人惊叹的信息片段,但我想强调他们的评估指标。
他们的评估涉及将代理行为的可信度作为主要指标,由人工评估员对其进行评分。
它展示了观察、规划和反思在这些生成代理的性能中是多么重要。如前所述,没有反思行为的规划是不完整的。
模块化框架
无论您选择什么框架来创建多代理系统,它们通常由几个要素组成,包括其配置文件、对环境的感知、内存、规划和可用操作。
用于实现这些组件的常用框架是 AutoGen和 CAMEL。但是,每个框架处理每个 Agent 之间的通信方式略有不同。
例如,使用 CAMEL 时,用户首先创建问题并定义 AI 用户和 AI 助手角色。AI 用户角色代表人类用户,将指导该过程。
之后,AI 用户和 AI Assistant 将通过相互交互来协作解决查询。
这种角色扮演方法支持代理之间的协作通信。
AutoGen 和 MetaGPT 有不同的沟通方式,但这一切都归结为这种沟通的协作性质。代理有机会相互交流和交谈,以更新他们的当前状态、目标和后续步骤。
翻译自:A Visual Guide to LLM Agents Exploring the main components of Single- and Multi-Agents
本文转载自CourseAI,作者:CourseAI
