LLM 动力自主代理

内容

以LLM(大型语言模型)作为核心控制器构建代理是一个很酷的概念。几个概念验证演示,比如AutoGPTGPT-EngineerBabyAGI,是激励人心的示例。LLM的潜力不仅限于生成写作精良的副本、故事、论文和程序;它可以被构想为一个强大的通用问题解决者。

代理系统概述

在由LLM驱动的自主代理系统中,LLM充当代理的大脑,辅以几个关键组件:

  • 规划
    • 子目标和分解:代理将大型任务分解为更小、可管理的子目标,从而有效处理复杂任务。
    • 反思和完善:代理可以对过去的行动进行自我批评和反思,从错误中学习并完善它们以供未来步骤使用,从而提高最终结果的质量。
  • 记忆
    • 短期记忆:我会将所有上下文学习(参见Prompt Engineering)视为利用模型的短期记忆进行学习。
    • 长期记忆:这为代理提供了在较长时间内保留和召回(无限)信息的能力,通常通过利用外部向量存储和快速检索来实现。
  • 工具使用
    • 代理学会调用外部API获取模型权重中缺失的额外信息(通常在预训练后难以更改),包括当前信息、代码执行能力、访问专有信息源等。

图1. LLM动力自主代理系统概述。

组件一:规划

一个复杂的任务通常涉及许多步骤。代理人需要知道这些步骤并提前计划。

任务分解

思维链(CoT;魏等人,2022)已成为增强模型在复杂任务上性能的标准提示技术。该模型被指示“逐步思考”,利用更多测试时间计算将困难任务分解为更小更简单的步骤。CoT将大任务转化为多个可管理的任务,并揭示了对模型思维过程的解释。

思维树 (姚等人,2023) 通过在每一步探索多种推理可能性来扩展 CoT。它首先将问题分解为多个思维步骤,并在每一步生成多个思维,从而创建了一种树形结构。搜索过程可以是 BFS(广度优先搜索)或 DFS(深度优先搜索),每个状态由分类器(通过提示)或多数投票进行评估。

任务分解可以通过LLM进行,例如简单提示,如"XYZ的步骤。 1.""实现XYZ的子目标是什么?",也可以使用任务特定的说明,例如写小说时的"写一个故事大纲。",或者通过人类输入完成。

另一种截然不同的方法,LLM+PLiu et al. 2023),涉及依赖外部经典规划器进行长期规划。该方法利用规划领域定义语言(PDDL)作为描述规划问题的中间接口。在这个过程中,LLM(1)将问题转换为“问题PDDL”,然后(2)请求经典规划器基于现有的“领域PDDL”生成PDDL计划,最后(3)将PDDL计划转换回自然语言。基本上,规划步骤被外部工具外包,假设领域特定的PDDL和适当的规划器是可用的,这在某些机器人设置中很常见,但在许多其他领域并不常见。

自我反思

自我反思是一个重要的方面,它让自主代理能够通过完善过去的行动决策和纠正以前的错误来不断改进。在现实世界的任务中,试错是不可避免的,自我反思发挥着至关重要的作用。

ReActYao等人,2023)通过将动作空间扩展为任务特定的离散动作和语言空间的组合,将推理和行动集成到LLM中。前者使LLM能够与环境交互(例如使用维基百科搜索API),而后者促使LLM生成自然语言中的推理过程。

ReAct提示模板包含了LLM思考的明确步骤,大致格式如下:

思考:... 行动:... 观察:... ...(多次重复)

图2. 知识密集型任务(例如HotpotQA,FEVER)和决策任务(例如AlfWorld Env,WebShop)的推理轨迹示例(图片来源:Yao等人,2023)。

在对知识密集型任务和决策任务的两项实验中,ReAct 的表现优于仅包含 Act 的基准线,其中移除了 Thought: … 步骤。

反思 (Shinn & Labash 2023) 是一个框架,为代理提供动态记忆和自我反思能力,以提高推理能力。反思具有标准的RL设置,其中奖励模型提供简单的二进制奖励,行动空间遵循ReAct中的设置,其中任务特定的行动空间通过语言扩展,以实现复杂的推理步骤。在每个动作之后,代理计算一个启发式,并根据自我反思结果选择性地可能决定重置环境,以开始新的试验。

图3. 反思框架示意图。 (图片来源: Shinn & Labash, 2023)

启发式函数确定轨迹是否低效或包含幻觉,并应停止。低效规划指的是花费过长时间却没有成功的轨迹。幻觉被定义为遇到一系列连续相同的动作,导致环境中出现相同的观察。

通过向LLM展示两个示例,可以产生自我反思,每个示例都是一对(失败的轨迹,用于指导未来计划变更的理想反思)。然后将这些反思添加到代理的工作记忆中,最多三个,以用作查询LLM的上下文。

在 AlfWorld Env 和 HotpotQA 上的实验。在 AlfWorld 中,产生幻觉比规划低效更常见。(图片来源:Shinn & Labash, 2023)

回顾链(CoH; 刘等人,2023)鼓励模型通过明确呈现一系列过去的输出来改进自身输出,每个输出都附带反馈注释。人类反馈数据是一组,其中是提示,每个是模型完成,是人类对的评分,是相应的人类提供的事后反馈。假设反馈元组按奖励排名,该过程是监督微调,其中数据是形式上的序列,其中。模型被微调为仅在给定序列前缀的条件下预测,以便模型可以自我反思,根据反馈序列生成更好的输出。模型可以在测试时选择性地接收多轮指令与人类注释员。

为了避免过拟合,CoH 添加了一个正则化项,以最大化预训练数据集的对数似然。为了避免捷径和复制(因为反馈序列中有许多常见词),他们在训练过程中随机屏蔽过去标记的 0% - 5%。

在他们的实验中,训练数据集是由WebGPT比较来自人类反馈的总结人类偏好数据集组合而成的。

在使用CoH进行微调后,模型可以遵循指令,逐步改进序列中的输出。 (图片来源: Liu et al. 2023)

CoH 的理念是在上下文中呈现一系列改进的输出历史,并训练模型跟随趋势生成更好的输出。算法蒸馏(AD;Laskin et al. 2023)将相同的理念应用于强化学习任务中的跨剧集轨迹,其中一个 算法 被封装在一个长的历史条件策略中。考虑到代理与环境互动多次,每一集中代理都会有所改进,AD 将这种学习历史串联起来并将其馈送到模型中。因此,我们应该期望下一个预测的动作会比之前的尝试导致更好的性能。目标是学习强化学习的过程,而不是训练一个特定任务的策略本身。

图 6. 算法蒸馏(AD)的工作原理示意图。 (图片来源:Laskin et al. 2023)。

本文假设,任何生成一组学习历史记录的算法都可以通过对动作执行行为克隆而被提炼为神经网络。历史数据由一组源策略生成,每个策略针对特定任务进行训练。在训练阶段,每次强化学习运行期间,会随机抽样一个任务,并使用多集历史记录的子序列进行训练,以使学习到的策略不受任务影响。

实际上,该模型具有有限的上下文窗口长度,因此情节应该足够短,以构建多情节历史。学习接近最优上下文RL算法需要2-4个情节的多情节上下文。上下文RL的出现需要足够长的上下文。

与三个基线方法相比,包括ED(专家蒸馏,使用专家轨迹而非学习历史的行为克隆),源策略(用于通过UCB生成蒸馏轨迹),RL^2(Duan等人,2017;作为上限,因为它需要在线RL),AD展示了上下文RL,性能接近RL^2,尽管仅使用离线RL,并且比其他基线学习速度更快。在源策略的部分训练历史的条件下,AD也比ED基线改进得更快。

图7。在需要记忆和探索的环境中,AD、ED、源策略和RL^2的比较。仅分配二进制奖励。源策略使用A3C在“黑暗”环境中进行训练,使用DQN在水迷宫中进行训练。 (图片来源:Laskin等人,2023

组件二:内存

(感谢 ChatGPT 帮助我起草这一部分。在与 ChatGPT 的对话中,我学到了很多关于人类大脑和用于快速MIPS的数据结构知识。)

记忆类型

记忆可以定义为获取、存储、保留和后来检索信息所使用的过程。人类大脑中有几种类型的记忆。

  1. 感觉记忆:这是记忆的最早阶段,能够在原始刺激结束后保留感觉信息(视觉、听觉等)的能力。感觉记忆通常只持续几秒钟。子类包括图像记忆(视觉)、回声记忆(听觉)和触觉记忆(触觉)。
  2. 短期记忆(STM)或工作记忆:它存储我们目前意识到并需要执行复杂认知任务的信息,如学习和推理。短期记忆被认为容量约为7个项目(米勒1956),持续时间为20-30秒。
  3. 长期记忆(LTM):长期记忆可以存储信息长达数天至数十年,具有基本无限的存储容量。长期记忆有两个亚型:
    • 显性/陈述性记忆:这是关于事实和事件的记忆,指的是可以有意识回忆的记忆,包括情景记忆(事件和经历)和语义记忆(事实和概念)。
    • 隐性/程序性记忆:这种记忆是无意识的,涉及自动执行的技能和例行程序,如骑自行车或在键盘上打字。

图 8. 人类记忆的分类。

我们可以大致考虑以下映射关系:

  • 感觉记忆作为学习嵌入原始输入的表示,包括文本、图像或其他模态;
  • 短期记忆作为上下文学习。由于受 Transformer 有限上下文窗口长度的限制,它是短暂且有限的。
  • 长期记忆作为代理可以在查询时关注的外部向量存储,可通过快速检索访问。

最大内积搜索(MIPS)

外部存储可以缓解有限注意力跨度的限制。一个标准做法是将信息的嵌入表示保存到一个向量存储数据库中,该数据库可以支持快速的最大内积搜索(MIPS)。为了优化检索速度,常见选择是使用_近似最近邻(ANN)_算法返回大约前k个最近邻,以在一定程度上牺牲一点准确性来获得巨大的加速。

用于快速MIPS的几种常见ANN算法选择:

  • LSH(局部敏感哈希):引入了一个哈希函数,使得相似的输入项目以很高的概率映射到相同的桶中,其中桶的数量远远小于输入的数量。
  • ANNOY(近似最近邻居哦耶):核心数据结构是随机投影树,一组二叉树,其中每个非叶节点表示将输入空间分成两半的超平面,每个叶节点存储一个数据点。树是独立且随机构建的,因此在某种程度上模拟了一个哈希函数。ANNOY搜索在所有树中进行,通过迭代搜索最接近查询的一半,然后聚合结果。这个想法与KD树相关,但规模更大。
  • HNSW(分层可导航小世界):灵感来自于小世界网络的概念,其中大多数节点可以在很少的步骤内到达任何其他节点;例如社交网络的“六度分隔”特征。HNSW构建这些小世界图的分层,底层包含实际数据点。中间层创建快捷方式以加快搜索速度。在执行搜索时,HNSW从顶层的随机节点开始,并向目标导航。当无法再靠近时,它会向下移动到下一层,直到达到底层。上层的每次移动可能覆盖数据空间中的大距离,而下层的每次移动会提高搜索质量。
  • FAISS(Facebook AI相似性搜索):它基于这样一个假设,在高维空间中,节点之间的距离遵循高斯分布,因此应该存在数据点的聚类。FAISS通过将向量空间划分为簇并在簇内细化量化来应用向量量化。搜索首先使用粗量化查找簇候选项,然后进一步查找每个簇中的细量化。
  • ScaNN(可扩展最近邻居):ScaNN的主要创新是各向异性向量量化。它将数据点量化为内积尽可能接近原始距离,而不是选择最接近的量化中心点。

图9. 在recall@10中测量的MIPS算法比较。(图片来源: Google Blog, 2020)

ann-benchmarks.com上查看更多MIPS算法和性能比较。

工具使用是人类的一个显著且独特的特征。我们创造、修改和利用外部物体来完成超越我们的身体和认知极限的事情。为LLM配备外部工具可以显著扩展模型的能力。

图 10. 一只海獭在水中漂浮时使用石头打开贝壳的图片。虽然一些其他动物也能使用工具,但其复杂性无法与人类相比。(图片来源:动物使用工具

MRKLKarpas et al. 2022)是“模块化推理、知识和语言”的缩写,是用于自主代理的神经符号架构。提出了一个MRKL系统,其中包含一系列“专家”模块,通用的LLM作为路由器,将查询路由到最适合的专家模块。这些模块可以是神经的(例如深度学习模型)或符号的(例如数学计算器、货币转换器、天气API)。

他们对微调LLM进行了实验,让其称呼计算器,以算术作为测试案例。他们的实验表明,解决口头数学问题比明确陈述的数学问题更困难,因为LLMs(7B Jurassic1-large模型)未能可靠地提取基本算术的正确参数。结果突出了外部符号工具何时能够可靠工作,“知道何时以及如何使用工具是至关重要的”,由LLM的能力决定。

TALM(工具增强语言模型;Parisi et al. 2022)和Toolformer(Schick et al. 2023)都对语言模型进行微调,以学习如何使用外部工具API。数据集根据新增的API调用注释是否能提高模型输出质量而进行扩展。有关更多详细信息,请参阅Prompt Engineering的“External APIs”部分

ChatGPT 插件 和 OpenAI API 函数调用 是 LLMs 增强了工具使用能力的实践示例。工具 API 集合可以由其他开发人员提供(如插件)或自定义(如函数调用)。

HuggingGPTShen等人,2023年)是一个框架,使用ChatGPT作为任务规划器,根据模型描述选择HuggingFace平台上可用的模型,并根据执行结果总结响应。

图11。HuggingGPT工作原理示意图。 (图片来源:Shen et al. 2023)

该系统包括4个阶段:

(1) 任务规划: LLM 作为大脑,将用户请求解析为多个任务。每个任务都有四个属性:任务类型、ID、依赖关系和参数。他们使用少量示例来指导LLM进行任务解析和规划。

指示:

AI助手可以将用户输入解析为多个任务:

{"task": task, "id", task_id, "dep": dependency_task_ids, "args": {"text": text, "image": URL, "audio": URL, "video": URL}}。"dep"字段表示前一个任务的id,该任务生成了当前任务依赖的新资源。一个特殊标签 "'

\-task_id" 指的是具有任务_id 作为任务_id 的依赖任务中生成的文本图像、音频和视频。任务必须从以下选项中选择:{{ 可用任务列表 }}。任务之间存在逻辑关系,请注意它们的顺序。如果无法解析用户输入,需要回复空的 JSON。以下是几种情况供您参考:{{ 演示 }}。聊天记录记录为{{ 聊天记录 }}。通过这个聊天记录,您可以找到用户提到的资源路径,用于您的任务规划。

总结
LLM作为核心控制器构建代理的概念很酷。一些概念验证演示,如AutoGPT、GPT-Engineer和BabyAGI,是鼓舞人心的例子。LLM的潜力不仅限于生成写作、故事、论文和程序;它可以被视为一个强大的通用问题解决器。在LLM驱动的自主代理系统中,LLM作为代理的大脑,辅以几个关键组件:规划、记忆和工具使用。规划涉及子目标和分解,自我反思和改进。记忆包括短期记忆和长期记忆。工具使用涉及调用外部API获取额外信息。规划涉及任务分解和自我反思,可以通过简单提示、任务特定指令或人类输入来完成。ReAct和Reflexion是提高自主代理推理能力的框架。Chain of Hindsight鼓励模型通过过去输出的序列进行自我改进。算法蒸馏将跨剧集轨迹应用于强化学习任务。CoH和AD的目标是训练模型以产生更好的输出。