从大语言模型到智能Agents

作者 | 马湘楠

单位 | 东北大学自然语言处理实验室

来自 | 机器翻译学堂

进NLP群—>加入NLP交流群

引言

智能代理(AI Agents)长期以来都被视为通往人工通用智能(AGI)的一条希望途径,预期中其能够通过自主规划和指令来自动完成相关任务。然而,早期的代理通常是一种编程实体,其通过传感器感知环境,再通过执行器对环境进行操作,以自主实现用户的特定目标。该类代理已被大量应用于各种日常任务,如自动驾驶[2][3]、智能机器人[4][5]或AI助手(Siri,Cortana等)。但是,这些代理通常是由传感器信号或关键词进行触发,然后在设计好的程序流水线中执行系列操作。它们无法真正的理解以自然语言形式表达的复杂指令,从而无法自主完成绝大多数任务。最近大型语言模型[6][8][8]的发展表明它们能够一定程度上理解并遵循人类指令,有潜力成为AI agents的核心—“大脑”[9][10]。LLMs使得AI Agents能够对任务进行自主规划,而后调用辅助模块进行执行,从而实现更广泛的智能化。本文中我们会介绍一些AI Agents的框架构成以及LLMs的基础知识,而后进一步阐述基于LLMs构建特定AI Agents的一些相关方法技术,以期给读者带来一个大体的了解。与本文相关的工作有Wang等人的综述,感兴趣的同学可以自行查阅[11]。

AI Agents and LLMs

(1)AI Agents

AI Agents应该能够自主化理解用户的复杂意图,并依赖历史记忆信息进行任务规划,而后调用相应的外部工具自动完成相应的目标任务。根据Weng[1]的定义,AI Agents应该主要由LLMs、任务规划(Task Planning)模块、记忆利用(Memory Utilization)模块和工具调用模块(Tools Calling)组成。LLMs作为AI Agents的“大脑”,是整个代理运行的中枢组件,其负责配置系统信息,并理解用户的输入。任务规划模块则是利用LLMs,结合记忆模块及工具调用的行动反馈,对目标任务进行规划,将复杂任务分解为多个简单的子任务,确定任务执行流程。记忆模块为LLMs提供历史信息作为指导,以便更好地进行任务规划工作。行动模块则将代理的决策转为具体的动作输出,并将执行反馈传回LLMs进行新一轮规划。LLMs、任务规划模块和记忆模块三者协同工作负责控制工具调用模块完成行为动作,而工具调用模块的结果又会再次作用于其他模块,实现AI Agents的整体运行。接下来,我们将详细介绍这些模块。

Large Language Models:语言模型(LM)是基于概率计算,旨在通过根据已经出现的单词来预测下一个(或缺失的)标记的概率。对于标准的语言模型,给定输入  和参数化的概率模型 p,我们的期望是最大化目标输出  的似然性,如下所示:

其中   表示第 i 个标记,  表示目标输出的长度。

Task Planning:任务规划模块通常包括两个子模块:任务目标分解模块及目标完善模块。分解模块负责将Agents接收到的复杂任务分解为多个较小、可管理的子目标任务,从而能够完成整体的任务目标。完善模块则使得代理可以对过去的行动进行自我评价和反思,从错误中汲取教训,并为未来的步骤进行改进,从而提高最终的质量。该模块的相关任务主要由LLMs完成。

Memory Utilization:记忆模块主要负责存储从环境中感知到的相关信息,并利用存储的记忆来指导LLMs的行动策略,帮助代理积累经验实现自我演化,其在构建AI代理中扮演着非常重要的角色,使得AI Agents能够以更统一、合理和有效的方式行事。

Tools Calling:本模块引入外部工具是指通过集成外部工具和扩展知识源来增强基于LLM的AI Agents的能力。负责将代理的决策转化为具体的执行结果,其与环境直接互动,决定了Agents完成任务的能力。如果将LLMs比喻成AI Agents的智能大脑,那么Tools调用则是AI Agents这个系统的手和脚。

从大语言模型到智能Agents_第1张图片

图1 LLM驱动的自主代理系统概览[1]

(2)large language models

Transformer架构的出现,使得语言模型进入了预训练阶段。通过在大量无标注文本上进行预训练,使得语言模型在下游任务上展现出了非常强大的通用性能。根据架构选择,预训练模型有三个主要分支:encoder-only模型[12]、decoder-only模型[13]和encoder-decoder模型[14]。

随着预训练模型规模的不断扩大,研究人员发现增加LMs模型大小会持续改善各种下游任务的性能,并将其称为语言模型的缩放定律(scaling-laws)。同时,人们也发现模型规模增大的同时,也会诱发出大语言模型(LLMs)的“涌现”能力:某些在大型模型中具备,但在较小模型中并不存在的能力。这些涌现出的能力使LLMs与早期的预训练模型得到了区分。随着ChatGPT模型的公布,其强大的任务理解能力以及出色的对话能力引起了大家的广泛关注,也预示着语言模型的研究正式进入了大语言模型(large language models)的时代。

在ChatGPT[15]发布之后不久,openAI进一步公布了其新一代的大语言模型—GPT4[6]。GPT4不仅具有更强大的语义理解能力和对话能力,还能够处理多模态信息,并且具备了外部API调用的能力,使得其能够开始与外界进行交互,为AI Agents及AGI的实现提供了可能性。直到目前为止,GPT4仍然是最为强大的大语言模型,感兴趣的同学可以通过openAI提供的官方API进行尝试[16]。除openAI外,也有许多研究团队和组织开发并公布了自己的基础大语言模型,比如PaLM2[17]、LLama[7]、GLM[18]、Baichuan-13B[19]等。

LLaMA作为少数开源大语言模型的一种,引起了来自研究界和工业界的广泛关注。由于LLaMA模型在各种开放基准测试中的表现出色,其成为了最受欢迎的开放语言模型。比如,有许多研究人员通过指令调整或持续预训练来扩展LLaMA模型。特别是在指令微调方面,LLaMA已经成为开发定制或专业化模型的主要基础模型之一[20][22]。也有部分工作为了在非英语语言中有效地适应LLaMA模型(主要在英语语料库上训练),使用目标语言数据扩展了原始词汇表并进行了微调[21]。此外,LLama还在多模态领域得到了应用[23][24]。最近发布的最新Llama2模型,由于其更为强大的性能表现,又引起了一股新的开源大语言模型浪潮。

截止到目前,已有工作从多个角度对LLMs的发展现状进行了广泛讨论和调查[25],并提供了非常全面的总结概括,涵盖了模型设计、培训方法、在应用中的利用以及评估技术等方面,感兴趣的同学可以自行查阅。

Fine-tuning:虽然大语言模型通过大量的预训练文本具备了非常强的通用能力,但是其对于一些特定的领域知识掌握不足。为了增强LLMs的特定能力,与人类需求对齐,往往需要通过fine-tune的方式对模型进行微调训练。然而,由于LLMs巨大的参数量,对其所有参数进行微调将会非常昂贵。因此,高效的微调方法是非常有必要的,主流方法有:Adapter[26]、Prompt Tuning[27]、Low-Rank Adaptation (LoRA)[28]等。LoRA由于其可插拔的便利特性,成为了最常用的方法。

从大语言模型到智能Agents_第2张图片

图2 不同参数高效微调方法的示意图[25]

Prompt Engineering:LLMs通常以自然语言为接口与人类进行交互,而这部分自然语言描述则被成为prompt。由于LLMs对prompt非常敏感,prompt细微的改动很可能就会带来差别很大的结果,因此prompt工程对于LLMs的使用非常重要[29][30]。通常来说,一个好的prompt应该是指令明确、需求清晰,操作具体、并且内容详尽的。推荐同学观看吴恩达教授的prompt课程进行学习[31]。此外,LLMs可以通过In-context learning的方式进一步提高下游任务上的性能,是一种非常有效的学习方法[13]。

Task Planning

任务规划模块主要是依托于LLMs强大的任务处理能力,将复杂任务分解为多个简单的子任务,然后逐个解决每个子任务。同时,在任务的规划-执行过程中引入一系列的反馈,对每个任务的目标进行完善。该模块通过LLM赋予了AI Agents解决复杂任务的能力。

(1)Task Decomposition

任务分解模块主要是通过prompt的使用,由LLMs来为复杂任务生成一系列的规划序列,从而提高AI Agents执行复杂任务的能力。Chain of Thought (CoT) [32]提出了一种简单有效的方法,通过在prompt中提供少量逐步解决复杂推理问题的示例,极大提升了LLMs解决复杂任务的能力。Zero-shot-CoT[33]方法则是利用启发式的prompt:“Let’s think step by step.”,使得LLM在零样本的情况下自主生成复杂问题的推理过程,并保证了一定的性能稳定。Least-to-Most CoT[34]则是初步尝试了任务分解,将原问题分解为一系列简单的子问题,并串行化解决这些相关联的子问题。Decomposed Prompting[35]方法同样采用了类似的思路。

以上的CoT方法通常是以单一线性的方式进行任务分解,然而复杂任务的多个子任务很可能存在依赖并且分解结果不唯一。考虑到每个复杂问题会有多种推理方式来得到最终答案,Self-consistent CoT (CoT-SC)[37]使用CoT生成多个推理路径和答案,选择出现最多次数的答案作为最终答案输出。Tree of Thoughts (ToT)[38]则是以树状的形式进行任务分解,而后通过广度优先和深度优先搜索等搜索算法进行回溯,以得到一个较为可行的全局规划。这些方法提高了LLM在复杂推理任务上的性能。此外,也有部分工作在子任务生成过程中引入额外的prompt对路径的进行选择,在受约束的情况下进行任务规划[39][40]。

从大语言模型到智能Agents_第3张图片

图3 主流的CoT方法示意图[38]

然而,自然语言通常是复杂多义的,基于自然语言的任务规划无法保证准确执行。虽然有些方法通过语义映射将生成的规划限制到更小的结果空间中[41],仍可能会导致规划正确但执行失败的情况。为了生成更便于验证的任务规划,部分工作选择以可执行代码为生成形式。Faithful CoT[43]、LLM+P[44]等方法使用形式化的规划领域定义语言(PDDL)作为目标输出。PAL[45]和PROGPROMPT[46]则是利用LLMs直接生成Python格式的任务规划。然后由Agents根据生成的可执行代码来解决问题。

(2)Refinement

为了进一步完善目标任务,AI Agents需要学会接受外部反馈,从而提高其整体的任务规划能力。最常见的反馈来自于Agent自身。ReAct[47]在任务规划的过程中引入了行动反馈,其明确定义推理和行动是顺序执行的,如果某个行动的没有获得正确反馈时,将对规划重新进行推理,直到获得正确答案。RAP[48] 则是通过评估每个候选计划导致任务成功的可能性进行选择。当前环境状态信息同样可以帮助改善任务规划结果[49]。除Agent环境外,反馈也可以来自于人类[50][51]。

此外,为了处理长期任务,可以结合记忆模块将反馈存入长期记忆库。例如,Reflexion [52]将反馈存储到内存中以便检索。此外,部分方法引入技能库,用于存储正确执行的任务规划,同时这些规划可以被重用或合成为更复杂的任务计划[53]。总之,通过反馈信息的使用,特别是行动执行结果的反馈,极大增强了任务规划的成功概率。

Memory Utilization

记忆模块通常负责存储Agents运行中的历史信息及额外的外部知识,为LLMs的任务规划提供帮助,提高整个Agents环境运行的准确性。根据类型通常可以分为短期记忆和长期记忆。其中短期记忆可以通过prompt注入或调用临时历史信息实现。而长期记忆则通常需要使用外部向量数据库进行存储和快速检索。因此,可以通过记忆读取及存储的工程化实现,达到利用短期或长期记忆来改进LLMs和AI Agents的相关能力。

通常来说,长期记忆保存着Agent对整个环境的认知与总结,而短期记忆则是有关于某个事件的感知与体会。比如,Generative Agents[54]采用双层的内存结构来分别存储Agent的短期记忆与长期记忆。而AgentSims[55]则是把Agent的短期记忆存储到LLMs的历史对话中。当然,有些工作不会对短期记忆和长期记忆加以区分,而是使用统一的方式进行管理。比如Atlas 基于双向编码器模型来检索相关的文档记忆[56]。增强型LLM 则使用统一的外部媒介来存储其记忆,并使用prompt的方式进行访问[57]。通过记忆的存储、读取可以实现Agent的自我反思。

而记忆的存储方式也多种多样。自然语言的形式可以实现方便快捷的存储,同时保证记忆的语义丰富性[52]。Embedding的使用则可以大幅度提高记忆的检索和匹配效率,虽然进行存储的时候会花费额外的编码时间[58]。常见的向量数据库有weaviate[59]和milvus[60]。此外结构化列表[61]和传统数据库[62]也可作为记忆存储的载体。

Tools Calling

外部工具调用模块则是通过使用外部工具完成规划中的任务。作为AI Agents的手和脚,其 直接与真实世界发生交互,并为LLMs提供重要的执行反馈信息。通过将可用工具封装为API调用,Agent可以具备访问和使用各种模型、数据库、Web应用程序和其他外部工具的能力。

(1)External Tools

WebGPT[63]可以在使用ChatGPT时将从网站检索到的相关结果合并到提示中,从而实现更准确和及时的响应。MRKL[64]则是包含了一组“专家”模块,通过LLM充当路由器,将查询路由到最适合的专家模块(这些模块可以是例如深度学习模型、数学计算器、货币转换器或天气查询API),以增强LLMs在若干特定任务上的性能。ChemCrow[65]则是一个化学领域的特定Agent,旨在借助十七种专家设计的工具完成有机合成、药物发现和材料设计等领域的任务。此外,Toolformer[66]以自监督的方式微调语言模型,在不失模型的通用性下,让模型学会自动调用一系列API,包括计算器、问答系统、搜索引擎、翻译系统和日历等,实质性改进了模型在下游任务上的零样本性能。

此外,针对大量的模型API,HuggingGPT[67]则是利用LLM将Hugging Face社区中的多样化AI模型连接起来,以解决复杂的AI任务。HuggingGPT通过训练LLM进行任务分解,从而生成一系列的代码片段,然后使用这些片段从外部社区中调用所需的模型来完成任务。Gorilla[68]则是收集了三个主要的神经网络模型网站:Torch Hub、TensorFlow Hub 和 HuggingFace的API调用文档,并进行了数据清洗及增强,在7B规模的模型微调后能够有效地实现适当的API调用。OpenAI在ChatGPT中同样支持了插件的使用,这些插件可以为LLMs提供超越语言建模的更广泛能力。

(2)Evaluation

API-Bank[69]是一个用于评估工具增强型LLM性能的测试集。它包含53个常用的API工具、完整的工具增强型LLM工作流程以及264个涉及568个API调用的带注释的对话。API的选择非常多样化,包括搜索引擎、计算器、日历查询、智能家居控制、日程管理、健康数据管理、帐户验证工作流程等。由于API数量众多,LLM首先可以访问API搜索引擎来查找要调用的正确API,然后使用相应的文档来进行调用。ToolBench[70]收集了一个包含上万种API调用的数据集,可用于LLMs的微调工作。同时,其提出了一个通用框架ToolLLM用于数据构建、模型训练以及一个自动评估器ToolEval用于评估模型的API调用能力。

开源框架

随着人们对AI Agents的逐渐重视,部分项目致力于创建自主通用AI代理框架,以期开发人员能够快速且可靠地构建、管理和运行AI Agents。LangChain [71]是一个开源框架,旨在能够自动化完成编码、测试、调试和文档生成任务。其通过prompt保证多个Agent之间的协作工作,实现了高效的软件开发。AutoGPT[72] 则是一个完全自动化的Agent框架,可以对目标任务实现自动分解及动作执行,返回最终结果,但是可能会由于任务规划错误导致陷入死机状态。BMTools[73] 则是一个基于语言模型的开源可扩展工具学习平台。研究团队将各种各样的工具(例如文生图模型、搜索引擎、股票查询等)的调用流程都统一到一个框架上,使整个工具调用流程标准化、自动化。使得开发者可以通过 BMTools给所用的模型(如ChatGPT、GPT4)调用多种多样的工具接口,实现特定的功能。

问题与挑战:

(1)LLM的鲁棒性

LLM的鲁棒性对于确保AI代理的整体稳定性至关重要。作为AI代理的大脑,LLM以自然语言为接口,并通过prompt保证内部模块通信并与外部世界进行交互,以确保整个系统的正确运行。然而,LLM对提示非常敏感,一些研究表明,即使对prompt进行微小的更改,便可能产生完全不同的结果。特别是在AI agent的框架下,这种敏感性尤为显著,因为一个模块的提示变化可以直接影响其他模块的性能表现,甚至导致整个代理的崩溃。此外,不同LLMs的有效提示是不同的,这使得AI代理和LLM之间具有高度的耦合性。更换LLM时,便需要手动重新编写大量prompt。因此,高效生成各种LLM的稳定提示框架是这个领域的重要挑战。此外,现有的LLM经常存在幻觉问题,会引起性能下降甚至系统的崩溃,对实际部署造成潜在风险[74]。识别幻觉并在LLM的使用中避免它们也至关重要。

(2)垂直领域表现不佳

尽管LLM已经学会生成连贯的文本,并在一般领域取得了令人称赞的结果,但在处理专业领域或任务时,它们的生成能力可能会受到限制。领域知识对于模型的专业化非常重要,然而将这种专业知识注入LLM并不容易。由于神经网络训练中的灾难性遗忘问题,当LLM被用于特定领域时,可能会损害其在别的领域上的性能。比如OpenAI指出,在使LLM与人类的价值观保持一致的过程中可能需要支付“对齐税”(即上下文学习能力的损失)。因此,构建特定领域的AI代理的一个关键挑战是如何增强LLM的专业化能力。

(3)安全性

尽管LLM具有出色的能力,但它们也面临着更大的安全挑战。LLM可能生成有害、偏见或有毒的文本,可能会被恶意系统滥用[75]。虽然基于人类反馈的强化学习方法(RLHF)已经可以将LLM与人类需求进行一定程度的对齐,但仍然可以通过一些提示注入规避现有的安全措施。总之,由于AI代理具有与外部环境互动的能力,可以自主制定规划并调用外部工具,因此安全性应始终是其开发的主要关注点。

总结

本文针对基于LLMs的AI Agents的构建进行了简要的综述。首先描述了AI Agents的基本框架构成以及LLMs的基础知识。同时对于AI Agents的关键模块:Task Planning、Memory Utilization、Tools Calling的部分相关工作分别进行了介绍,希望能为对该领域感兴趣的读者带来一些帮助。


进NLP群—>加入NLP交流群

你可能感兴趣的:(语言模型,人工智能,自然语言处理)