AI Agent 入门指南
一、大模型 Agent 介绍
LLM-Based Agent 最开始的定义来自于以下概念图,该图展示了 LLM-Based Agent 的关键要素 Memory、Tools、Planning、Action。

虽然上述图表涵盖了关键要素,但各模块功能定义不够清晰。这里参考其他论文中的框架图进行说明:

(一)Profile 模块
定义和管理 Agent 角色的特性和行为。以强化学习里面的 AC 算法为例,Actor 和 Critic 就是不同的 Agent。
它包含一系列参数和规则,描述了 Agent 的各种属性,如角色、目标、能力、知识和行为方式等。这些属性决定了 Agent 如何与环境交互,如何理解和响应任务,以及如何进行决策和规划。
Agent 角色生成有 3 种常用的方式,包括手工生成、LLM 生成方法、数据集对齐方法:
- 手工生成方法:手动指定 Agent 配置文件,利用大语言模型 + Prompt 设置 Agent。例如,如果一个人想设计具有不同个性的 Agent,他可以使用'你是一个外向的人'或'你是一个内向的人'来描述 Agent。这种场景如果需要生成很多 Agent,效率比较低下。
- LLM 生成方法:首先设定 Agent 的组成规则,明确目标 Agent 应具备的属性;然后指定几个手工创建的种子配置文件作为示例;最后利用语言模型的 Self-Instruct 能力生成大量 Agent 配置文件。
- 数据集对齐方法:是从真实世界的人口数据集中获取 Agent 的配置文件信息,比如通过抽取人口调查数据组织成自然语言描述。这样可以使 Agent 行为更真实可信,准确反映真实人口的属性分布。
(二)Memory 模块
存储和组织从环境中获取的信息,以指导未来行动。和强化学习 DQN 里面的经验池功能类似。
内存模块通常包含短期记忆和长期记忆两个部分。短期记忆暂存最近的感知,长期记忆存储重要信息供随时检索。
格式上,内存信息可以用自然语言表达,也可以编码为向量嵌入提高检索效率。还可以利用数据库存储,或组织为结构化列表表示内存语义。
操作上,主要通过记忆读取、写入和反射三种机制与环境交互。读取提取相关信息指导行动,写入存储重要信息,反射总结见解提升抽象水平。反射这个操作有点类似于强化学习里面的优先级经验采样,只不过优先级经验采样是从经验池中挑选数据,反射是对所有的记忆进行抽象。
(三)Planning 模块
帮助 Agent 将复杂的任务分解为更易处理的子任务,并制定出有效的策略。
它大致分为两种类型,一种是不依赖反馈的计划,另一种则是基于反馈的计划。反馈类似于强化学习里面的 Reward。
- 不依赖反馈的计划在制定过程中并不参考任务执行后的反馈,它有几种常用的策略。比如单路径推理,它按照级联的方式,一步一步地生成计划。另外,还有多路径推理,它会生成多个备选的计划路径,形成树状或图状的结构。当然,我们也可以利用外部的规划器进行快速搜索,以找出最优的计划。
- 基于反馈的计划,它会根据任务执行后的反馈来调整计划,这种方式更适合需要进行长期规划的情况。反馈的来源可能来自任务执行结果的客观反馈,也可能是根据人的主观判断给出的反馈,也可能是根据其他 Agent 给出的反馈,甚至还可以是由辅助模型提供的反馈。由辅助模型提供的反馈类似于强化学习里面的 Reward Modeling。
(四)Action 模块
将抽象的决策转化为具体的行动。这个就和强化学习的 Action 是类似的。
在执行任务时,需要考虑行动的目标、生成方式、应用范围以及可能产生的影响。
理想的行动应当是有目的的,例如完成特定任务、与其他代理进行交流或者探索环境。行动的产生可以依赖于查询过去的记忆经验,或者遵循预设的计划。而行动的范围,不仅可以通过利用如 API 和知识库等外部工具来扩展,还需要发挥大型语言模型(LLM)的内在能力,例如规划、对话及理解常识等。
二、大模型 Agent 和 RL Agent 的关系
从前文来看,大模型 Agent 和 RL Agent 是非常类似的,这里我们分析一下他们两者的异同点。

(一)智能体
强化学习里面的智能体通常需要手工指定,而且智能体数量不会很多,例如在游戏指定场景中敌人和队友,在 AC 算法中指定 Actor 和 Critic。每个 Agent 的输入输出维度是固定的。
而大模型 Agent 可以有多种生成方式,由(大模型+Prompt)的方式定义 Agent。每个 Agent 的输入输出问题也不是固定的,可以接受自然语言的输入输出。
(二)状态
强化学习里面的 State 维度是需要人工定义的,维度是固定的。而且 NextState 是从环境反馈中得到的。
大模型 Agent 中的 NextState 可以由环境反馈,也可以由人类交互反馈,也可以是大模型 Agent 主动从环境中思考总结。
(三)动作
强化学习里面的 Action 是需要人工定义的,维度是固定的,通常是离散的行为(例如下棋)或者连续向量(例如自动驾驶,方向盘向左偏移 75 度)。
大模型 Agent 中的 Action 可以更加丰富多样,例如 Action 可以是外部 API,也可以是大模型的内在能力(规划、对话及理解常识等)
(四)奖励
强化学习里面的 Reward 是需要人工定义的,如果设计的不好,会出现 Reward Shaping 的问题。
大模型 Agent 的 Reward 可以从环境反馈中 Agent 自我思考得到,也可以由人类交互反馈。
(五)环境
强化学习的一个要求就是训练环境和测试环境是完全一样的。例如 AlphaGo 训练环境是按照围棋规则训练的,如果在测试环境中增加 1 条规则(例如规定棋盘的角落不能落子),那么 AlphaGo 大概率是会挂掉的。
大模型 Agent 对环境的适应能力没有强化学习要求这么高,可以适应一定的环境变化。
三、大模型 Agent 的适用场景
我们先来分析下强化学习的适用场景,再来讨论大模型 Agent 的适用场景。
(一)强化学习的适用场景
强化学习需要满足如下几个要求:环境固定、目标明确、数据廉价、过程复杂、自由度高。
1、环境固定
训练环境尽可能做到与测试环境相同。
举个例子:agent 在环境中遇到一条峡谷,跳过去的过程中有 30% 的概率被落石击中,这里的 30% 就属于这类因素,训练和测试环境要保持一致。30% 这个数字在 RL 叫状态转移概率。RL 的理论基础即建立在马尔可夫决策过程之上,Value 函数和 policy 就是通过隐式(model-free)或显式 (model-based) 地对环境 model 建模得到的。model 变了,policy 就废了。
2、目标明确
目标明确很好理解,任务要达到何种效果清晰具体,最好可以量化。工业界的需求一般都是优化某个指标(效率、能耗、胜算等),基本满足这个条件。目标越明确,设计优质的 reward 函数就越容易,从而训练得到更接近预期的 policy。
3、数据廉价
数据廉价对 RL 至关重要,毕竟挥霍数据是 RL 与生俱来的属性,这里就涉及 1 个关键技术高仿真模拟器。模拟器和真实世界有一个 reality gap 的问题,如果 gap 太大则训练出的 policy 无法直接应用。对模拟器精度的要求和上文的'环境固定'要求是类似的。
除此之外,数据廉价还包含了另一层意思——采样速率。AlphaGo 在宣传的时候动不动就说他们的 agent 学习了相当于人类 XX 万年的经验,显然没有高速模拟器是不可能做到的。
4、过程复杂
前三个特征决定了'能不能',那么接下来两个特征决定了'值不值'。
如果任务太简单,依靠规则和启发式就能解决问题了,相当于拿到了'解析解',哪里还需要神经网络?
5、自由度高
自由度高指的是选择空间大、限制少。
自由度越高,DRL 优势越明显,自由度越低,越有利于规则。因此在决定用 DRL 之前,一定要认真评估任务场景是否有足够的优化空间,千万不要拎着锤子找钉子,否则即使训出了模型,性能也不如传统算法,白忙活一场。
(二)大模型 Agent 的适用场景
大模型 Agent 由于大模型自身具备强大的迁移和泛化能力,适用场景也不像强化学习有这么多约束。但是另外一方面,大模型运行推理成本较高,openai 经常说他们亏损了几十亿美元,更别说其他大模型公司了。此时,大模型 Agent 值不值显得尤为重要。
1、环境:
LLMs 具备强大的迁移与泛化能力,一个大模型 Agent 可以具备对未知任务的泛化能力、从上下文情境学习的能力。
但是大模型 Agent 并不是万能的,在 Profile 模块已经定义了 Agent 的特性和行为,在特定领域定义的 Agent,迁移到其他环境,需要通过微调 LLM 来提高性能。看过美剧《西部世界》的同学应该知道,1 个甜水镇的妓女可以应对各种各样的客人(Agent 的泛化性);但是甜水镇的妓女到了日本幕府乐园中,此时 Agent 需要重新学习日本幕府乐园的生存规则才能够生存(微调 LLM)。
2、目标:
目标也是越明确越好。但是在多大模型 Agent 的场景下,可能很难对每个 Agent 定义 1 个具体的指标,此时可以定义 1 个全局目标,每个 Agent 的子目标由 Agent 自行协商。全局目标也是越明确越好。
3、数据:
和 RL 一样,数据也是越廉价越好。毕竟大模型 Agent 和 RL 一样,需要从数据中学习经验。
4、过程:
和 RL 一样,如果任务很简单,通过 1 个工具很容易完成,就没有必要使用大模型 Agent。毕竟,吴恩达爆火的 ChatGPT 课一开始就只出了'ChatGPT 放弃了倒写单词,但理解了整个世界'。只有遇到很复杂的任务,充分使用大模型 Agent 调用各种外部工具的能力,此时才值得使用大模型 Agent。
5、自由度:
和 RL 一样,选择空间大,限制小的场景才需要使用大模型 Agent。
'选择空间大'这一点很容易理解,如果选择空间小,用 if-else 代码就可以完成的,为啥要用大模型 Agent 呢?
'限制小'这一点体现在大模型 Agent,如果完成一个任务有很多约束,约束信息大概率是通过 Prompt 完成,约束很多,Prompt 就会很长,大模型推理成本就会变高。
四、典型 Agent 介绍
大模型 Agent 的能力这么强化,那么怎么才能生产出 1 个可用的 Agent 呢?下面我们分别介绍 1 个学术界的大模型 Agent 和 1 个工业界的大模型 Agent,来看看完成 1 个 Agent 需要哪些工作。
(一)OpenBMB-XAgent

XAgent 是 1 个可以调用 rapid api 的各种工具,完成用户请求的 1 个系统。
1、Profile 模块:
定义了 5 个 Agent,DispatcherAgent,PlanGenerateAgent,PlanRefineAgent,ToolAgent 和 ReflectAgent。
- DispatcherAgent:初始 Agent,使用前文提到的'LLM 生成方法'生成其他 Agent,用户提供任务(例如需要 1 个任务分解 Agent 和 1 个工具执行 Agent),DispatcherAgent 负责生成其他 Agent 的 Prompt。
- PlanGenerateAgent:初始 Plan 生成。接收到用户请求后,将初始用户请求分解为多个 subTask。
- PlanRefineAgent:迭代 Plan 重新生成,如果 ToolAgent 未完成任务,PlanAgent 从 Memory 中反思改进,生成下一轮的多个 subTask。
- ToolAgent:使用大模型自身能力(例如文本理解、文本分析)或者从 rapid api 找到可用外部工具(例如播放音乐)
- ReflectAgent:从 Memory 中反思改进的 Agent。职责包含总结现有流程的工具调用和想法、SubTask 的反思(例如 xxx Task 找不到合适的工具)、工具调用的反思(例如'工具 xxx 现在不可用',或'我需要在工具 aaa 中提供字段 yyy')
2、Memory 模块:
Memory 包含如下内容:PlanAgent 历史的 Plan 生成过程,ToolAgent 检索工具的工程,工具完成 Action 的过程。此处没有区分长期记忆和短期记忆。
3、Planning 模块:
PlanGenerateAgent 和 PlanRefineAgent 都使用了 Planning 能力。
4、Action 模块:
Action 有 2 种,大模型自身完成和 rapid api 完成。rapid api 已经提供了各种工具的标准 RestAPI 接口。例如获取足球信息的 api。

(二)快手-Kwai Agents

1、Profile 模块:
设计 Meta-Agent,对特定问题集合,生成实例化的 Agent Prompt 模板。其他 Agent 包含 PlanAgent 和 ConclusionAgent。
- PlanAgent:根据任务目标和已有 Task,规划一个新 Task。
- ConclusionAgent:总结 Agent,整理 Memory 中的历史信息给出最终的结论。
2、Memory 模块:
包含知识库、对话、任务历史三类记忆,依托于混合向量检索、关键词检索等技术的检索框架,在每一次规划路径中检索所需的信息。
3、Planning 模块:
PlanAgent 使用了 Plan 能力。
4、Action 模块:
包含浏览器网页搜索、日历、农历节气、时间差、天气工具集,这些工具有些需要调用 RestAPI 完成,有些需要直接调用函数完成。
总体来说 KwaiAgent 工具集数量和 XAgent 相比少了很多,完成的任务也很有限。
五、大模型 Agent 的关键技术
强化学习的关键技术包含:算法选择、动作空间设计、状态设计、Reward 设计。这里我们总结一下完成 1 个大模型 Agent 需要哪些关键技术。
(一)强大的基座模型
这个很容易理解,毕竟大模型 Agent 的基础就是'大模型'。如果基座大模型不够强大,大模型 Agent 就无法顺利运行。选择参数量适中、指令遵循能力强、逻辑推理能力好的模型作为基座是首要任务。
(二)Agent 定义
在前面的 XAgent 和 KwaiAgent 都使用了 1 个 MetaAgent 来生成其他 Agent 的模板,但是对于一些专业角色(如程序员、研究员等),LLM 现在还很难精确扮演。针对这些专业角色,如何找到最佳提示并不容易。一个可行的方法是'LLM 生成 + 数据集对齐'的方法,可以首先收集不常见角色或心理特征的真实人类数据,然后利用这些数据来微调 LLM。
尤其是在多 Agent 场景下,设计几个 Agent?多个 Agent 如何交互?都需要精心的设计。合理的角色分工能显著提升整体系统的稳定性和效率。
(三)Memory 存储、搜索和反思
RL 是从海量经验中学习,大模型 Agent 也是类似的,需要从 Memory 中反思改进。Memory 的存储需要关注哪些信息需要存储?多 Agent 场景下是否需要使用共享存储。Memory 的搜索如何实现高效搜索?如何保证搜索结果的有效性?特别关注的是'反思'能力,'反思'能力一般是使用(大模型+prompt)从 Memory 中反思总结,反思不仅包含从自己的 Memory 中反思,还包含从他人的 Memory 中反思。
(四)Tools 标准化
前面的 Plan、Memory 等都是为了生成执行计划,而任务执行是依赖外部 Tools 的。显而易见,如果所有的外部 Tool 都提供了 Rest 访问方式,Agent 只需要调用 RestAPI,则可以执行执行更多的任务;另外 1 种场景,有个外部 Tool 是 RestAPI,有的外部 Tools 是 RPC 接口,那么 Agent 就需要理解不同 Tool 的调用方式,出错概率越大。总而言之,工具数量的多少和标准化程度直接决定 Agent 执行多少任务。
此外,工具的文档质量、错误处理机制以及权限管理也是影响 Agent 稳定性的关键因素。
六、总结
大模型 Agent 发展非常迅速,几乎每过几天都会有爆款的 Agent 问世,从 HuggingGPT、AutoGPT,斯坦福小镇的 Generative Agents、清华的 Ghost in the Minecraft (GITM)。大模型 Agent 作为一种新型的智能体,具有强大的迁移和泛化能力,适用于多种复杂的场景。它们通过结合大型语言模型的内在能力和外部工具,能够执行多样化的任务。然而,大模型 Agent 的有效运行需要考虑 Agent 定义、Memory 管理和工具标准化等关键技术,当前还是在学术界流行,工业界虽然有微软的 Copilot Studio、Copilot Team,但是还没有成为爆款应用。相信随着技术的发展,大模型 Agent 有望在更多领域发挥重要作用。