本文编译自 Lilian Weng 的个人博客,Lilian 现在是 OpenAI 的 Head of Safety Systems,之前还领导过 OpenAI 的 Applied AI 团队。
AI Agent 被认为是 OpenAI 发力的下一个方向。OpenAI 的联合创始人 Andrej Karpathy 在近期的一次公开活动上提到“相比模型训练方法,OpenAI 内部目前更关注 Agent 领域的变化,每当有新的 AI Agents 论文出来的时候,内部都会很兴奋并且认真地讨论”,而在更早之前,Andrej 还评价 AutoGPT 是 Prompt Engineering 下一阶段的探索方向。
Lilian Weng 的这篇 Blog 可以说是目前 AI Agent 领域优质论文的系统综述,她将 Agents 定义为 LLM、记忆(Memory)、任务规划(Planning Skills)以及工具使用(Tool Use) 的集合,其中 LLM 是核心大脑,Memory、Planning Skills 以及 Tool Use 等则是 Agents 系统实现的三个关键组件,在文章中,她还对每个模块下实现路径进行了细致的梳理和说明。到今天,构建 AI Agent 的工具箱已经相对完善,但仍需要面对一些限制,例如上下文长度、长期规划和任务分解,以及 LLM 能力的稳定性等。
从今年 3 月 AutoGPT 推出后,Generative Agent、GPT-Engineer、BabyAGI 项目的爆发将 LLM 的叙事代入了新的阶段,从“超级大脑”到真正有可能成为“全能助手”。Lillian 在自己的 Twitter 中也认为“This is probably just a new era”。
以下为本文目录,建议结合要点进行针对性阅读。
01 Agent System 是什么
02 组件一:任务规划
03 组件二 : 记忆
04 组件三 : 使用工具
05 AI Agents 的实践
06 LLM Agents 的局限
AutoGPT、GPT-Engineer 和 BabyAGI 等项目在一定程度上已经展示了使用大型语言模型(LLM)作为核心控制器来构建 AI Agents 的能力 。LLM 的潜力不仅限于生成内容、故事、论文和应用等方面,它还具有强大的通用问题解决能力,可以应用于各个领域。
01.
Agent System 是什么
在以 LLM 为驱动的 AI Agents 系统中,LLM 是代理系统的“大脑”,并需要其他几个关键组件的辅助:
1. 规划(Planning)
• 子目标和分解:AI Agents 能够将大型任务分解为较小的、可管理的子目标,以便高效的处理复杂任务;
• 反思和细化:Agents 可以对过去的行为进行自我批评和反省,从错误中吸取经验教训,并为接下来的行动进行分析、总结和提炼,这种反思和细化可以帮助 Agents 提高自身的智能和适应性,从而提高最终结果的质量。
2. 记忆 (Memory)
• 短期记忆:所有上下文学习都是依赖模型的短期记忆能力进行的;
• 长期记忆:这种设计使得 AI Agents 能够长期保存和调用无限信息的能力,一般通过外部载体存储和快速检索来实现。
3. 工具使用(Tool use)
• AI Agents 可以学习如何调用外部 API,以获取模型权重中缺少的额外信息,这些信息通常在预训练后很难更改,包括当前信息、代码执行能力、对专有信息源的访问等。

Fig. 1. LLM 驱动下的 AI Agents System 概览
02.
组件一:任务规划
复杂任务的处理通常会涉及到多个步骤,因此 AI Agents 需要预先了解并对这些步骤进行规划。任务规划能力可以帮助 Agents 更好地理解任务结构和目标,以及在此基础上如何分配资源和优化决策,从而提高任务完成的效率和质量。
任务分解(Task Decomposition)
• 思维链(Chain of thought)
CoT 已经成为提升复杂任务模型性能的标准提示技术,它通过让模型“逐步思考”,利用更多的测试时间,将困难的任务拆解为更小、更简单的步骤。CoT 能够将大型任务转化为多个可管理的子任务,并揭示模型的思维链条,从而提高模型性能。这种技术使得模型更易于理解,也更容易获得更好的结果。
• 思维树( Tree of Thoughts)
在 CoT 的基础上,思维树( ToT )则是通过在每一步探索多种推理可能性来扩展模型性能。ToT 首先将问题分解为多个思维步骤,每个步骤生成多个思维,从而创建一个树状结构。搜索过程可以是广度优先搜索(BFS)或深度优先搜索(DFS),每个状态由分类器(通过提示)或多数票进行评估。
在处理任务时,可以通过以下几种方式来实现任务分解:
1. 通过 LLM 模型进行简单的提示,例如“Steps for XYZ.\n1.”、“What are the subgoals for achieving XYZ?”;
2. 通过使用特定于任务的指令,例如“Write a story outline”;
3. 有人工输入。
另一种非常独特的任务分解的方法是 LLM+P ,它利用外部经典规划师(External classical planner)进行长期规划。该方法利用规划域定义语言 (Planning Domain Definition Language,PDDL) 作为中间接口来描述规划问题。在这个过程中,LLM 需要完成以下几个步骤:
1. 将问题转化为“问题 PDDL”;
2. 请求经典规划师基于现有的“域 PDDL”生成 PDDL 计划;
3. 将 PDDL 计划翻译回自然语言。
LLM+P(Large Language Models + Planning):
LLM+P:Empowering Large Language Models with Optimal Planning Proficiency 论文中提出的一种任务解决方法,通过将 LLM 和规划(Planning)进行结合, 通过使用自然语言来描述任务规划,进一步生成解决方案,从而推动问题的解决。
在 LLM+P 中,LLM 用于将自然语言指令转换为机器可理解的形式,并生成 PDDL 描述。接下来,PDDL 描述可以被 P 规划器使用,生成合理的计划并解决给定的任务。目前,LLM+P 方法已经应用于许多领域,例如机器人路径规划、自动化测试和语言对话系统中的自然语言理解和生成问题等等。
PDDL(Planning Domain Definition Language):
PDDL 是一种标准化和通用的规划领域语言,用于描述计划领域的形式语言。它能够用于描述可行动作、初始状态和目标状态的语言,用于帮助规划器生成计划。PDDL 通常被用于 AI 的自动规划问题,例如机器人路径规划、调度问题、资源分配等。
从本质上讲,由外部工具来完成规划步骤被这件事在某些机器人环境中很常见,但在其他领域并不常见。该方法假设特定领域的 PDDL 和适当的规划师可用,可以帮助 Agents 更好地规划和执行任务,提高任务完成的效率和质量。
自我反思( Self-Reflection )
自我反思(Self-reflection)在任务规划中是一个重要环节,它让 Agents 能够通过改进过去的行动决策、纠正过往的错误以不断提高自身表现。在现实世界的任务中,试错(trial and error)是必不可少的,因而自我反思在其中扮演着至关重要的角色。
• ReAct
通过将动作空间扩展为任务特定的离散动作和语言空间的组合,将推理和行动融合到 LLM 中。前者(任务特定的离散动作)使 LLM 能够与环境进行交互,例如使用维基百科搜索 API,而后者(语言空间)则促使 LLM 生成自然语言的推理轨迹。
ReAct 是 Auto-GPT 实现的基础组件之一,由 Google Research Brain Team 在ReAct:Synergizing Reasoning And Actiong In Language Models 论文中提出。在 ReAct 工作之前,大家往往将大模型的推理能力和行为决策能力分开进行研究。而 ReAct 首次在语言模型中将推理和行为决策紧密结合起来,使得语言模型的推理能力能够根据知识进行计划安排,行为决策能够与外界工具进行交互。
简单来说,ReAct 方法即推理+动作得到结果。灵感来自于作者对人类行为的一个洞察:在人类从事一项需要多个步骤的任务时,每一步之间往往会有一个推理过程。作者提出让 LLM 把内心独白“说”出来,然后再根据独白做相应的动作,模仿人类的推理过程,以提高 LLM 答案的准确性。这种方式在多种数据集上都取得了 SOTA 效果,并且更加可信,提升了 LLM 应对“胡说八道”的能力。
此外,作者还提出了进一步提高 ReAct 准确率的方法,即微调(fine-tuning),类似人类“内化”知识的过程,将上千条正确的推理动作轨迹输入进 LLM 进行 fine-tuning, 可以显著提高准确率。