跳到主要内容

LLM 代理

基于 LLM 的代理,以下简称为 LLM 代理,涉及使用将 LLM 与规划和记忆等关键模块相结合的架构来执行复杂任务的LLM应用。在构建LLM代理时,LLM充当主要控制器或“大脑”,控制完成任务或用户请求所需的操作流程。LLM代理可能需要规划、记忆和工具使用等关键模块。

为了更好地激发LLM代理的实用性,假设我们有兴趣构建一个系统,可以帮助回答以下问题:

美国2023年的平均每日卡路里摄入量是多少?

上述问题可能可以使用已经具备回答问题所需知识的LLM来回答。如果LLM没有相关知识来回答问题,可以使用简单的RAG系统,其中LLM可以访问与健康相关的信息或报告。现在让我们给系统一个更复杂的问题,如下所示:

在过去十年中,美国成年人的平均每日卡路里摄入量的趋势如何变化,这可能对肥胖率产生什么影响?此外,您能提供在此期间肥胖率趋势的图形表示吗?

要回答这样的问题,仅仅使用LLM是不够的。您可以将LLM与外部知识库结合起来形成一个RAG系统,但这仍然可能不足以回答上面复杂的查询。这是因为上面复杂的问题需要LLM将任务分解为子部分,可以使用工具和操作流程来解决,从而得到期望的最终响应。一个可能的解决方案是构建一个LLM代理,该代理可以访问搜索API、与卡路里摄入量和肥胖有关的出版物以及公共/私人健康数据库,以提供与卡路里摄入量和肥胖相关的信息。

此外,LLM将需要访问一个“代码解释器”工具,该工具有助于获取相关数据以生成有用的图表,帮助理解肥胖趋势。这些是假想LLM代理的可能高级组件,但仍然有重要考虑因素,如制定计划以解决任务和可能访问帮助代理跟踪操作流程状态、观察和整体进展的记忆模块。

LLM 代理框架

"LLM 代理框架"

一般来说,LLM代理框架可以包括以下核心组件:

  • 用户请求 - 用户问题或请求
  • 代理/大脑 - 充当系统协调员的代理核心
  • 规划 - 协助代理规划未来行动
  • 记忆 - 管理代理的过去行为

代理

具有通用功能的大型语言模型(LLM)充当系统的主要大脑、代理模块或协调员。该组件将使用包含有关代理操作方式和其将访问的工具(以及工具详细信息)的提示模板来激活。

虽然不是强制性的,代理可以被描述或分配一个角色来定义其角色。这些描述信息通常写在提示中,可以包括特定细节,如角色详细信息、个性、社交信息和其他人口统计信息。根据[Wang等人,2023年],定义代理配置文件的策略包括手工制作、LLM生成或数据驱动。

规划

无反馈规划

规划模块有助于将代理将单独解决以回答用户请求的必要步骤或子任务分解。这一步骤对于使代理更好地思考问题并可靠地找到解决方案至关重要。规划模块将利用LLM来分解详细计划,其中将包括帮助解决用户问题的子任务。任务分解的流行技术包括Chain of ThoughtTree of Thoughts,分别可以归类为单路径推理和多路径推理。下面是一幅比较不同策略的图,正如Wang等人,2023年所规范化的那样:

"LLM代理规划"

带反馈规划

上述的规划模块不涉及任何反馈,这使得实现长期规划以解决复杂任务变得具有挑战性。为了解决这一挑战,可以利用一种机制,使模型能够根据过去的行动和观察,迭代地反映和完善执行计划。目标是纠正和改进过去的错误,有助于提高最终结果的质量。这在复杂的现实环境和任务中尤为重要,其中试错是完成任务的关键。用于这种反思或批评机制的两种流行方法包括 ReActReflexion

以 ReAct 为例,它结合了推理和行动,旨在使 LLM 能够通过交替执行一系列步骤(重复 N 次):思考行动观察 来解决复杂任务。ReAct 以观察的形式从环境中接收反馈。其他类型的反馈可以包括人类和模型的反馈。下图展示了 ReAct 的示例以及执行问答任务所涉及的不同步骤:

"ReAct Agent"

了解更多关于 ReAct 的信息,请点击这里:

ReAct Prompting

记忆

记忆模块有助于存储代理的内部日志,包括过去的思考、行动和来自环境的观察,以及代理和用户之间的所有互动。在 LLM 代理文献中报告了两种主要的记忆类型:

  • 短期记忆 - 包括有关代理当前情况的上下文信息;这通常通过上下文学习来实现,这意味着由于上下文窗口的限制,它是短暂且有限的。
  • 长期记忆 - 包括需要保留并在较长时间内召回的代理过去行为和思考;这通常利用外部向量存储器,通过快速和可扩展的检索来为代理提供所需的相关信息。

混合记忆整合了短期记忆和长期记忆,以提高代理进行长期推理和经验积累的能力。

在构建代理时还需考虑不同的记忆格式。代表性的记忆格式包括自然语言、嵌入、数据库和结构化列表等。这些格式也可以结合使用,比如在《我的世界》中的 Ghost(GITM)中,它利用键-值结构,其中键由自然语言表示,值由嵌入向量表示。

规划和记忆模块都使代理能够在动态环境中运作,并使其能够有效地回忆过去的行为并规划未来的行动。

工具

工具对应于一组工具,使 LLM 代理能够与外部环境进行交互,例如维基百科搜索 API、代码解释器和数学引擎。工具还可以包括数据库、知识库和外部模型。当代理与外部工具交互时,它通过工作流来执行任务,帮助代理获取观察或完成子任务并满足用户请求所需的信息。在我们的初始健康相关查询中,代码解释器就是一个执行代码并生成用户请求的必要图表信息的工具示例。

LLM 以不同的方式利用工具:

  • MRKL 是一个将 LLM 与专家模块(LLM 或符号计算器或天气 API)结合的框架。
  • Toolformer 对 LLM 进行微调,以使用外部工具 API。
  • Function Calling - 增强 LLM 的工具使用能力,包括定义一组工具 API 并将其作为请求的一部分提供给模型。
  • HuggingGPT - 一种利用 LLM 作为任务规划器的代理,将各种现有的 AI 模型(基于描述)连接起来以解决 AI 任务。

"HuggingGPT"

LLM 代理应用

"ChemCrow" ChemCrow 代理旨在完成有机合成、药物发现和材料设计等任务。图片来源:Bran 等人,2023

在本节中,我们重点介绍了基于 LLM 的代理已经被有效应用的领域和案例研究示例,这是由于它们复杂的推理和常识理解能力。

显著的基于 LLM 的代理

  • Ma 等人(2023) 分析了用于心理健康支持的对话代理的有效性,并发现该代理可以帮助用户应对焦虑,但有时可能会产生有害内容。
  • Horton (2023) 在模拟场景中赋予基于LLM的代理人禀赋、偏好和个性,以探索人类经济行为。
  • 生成式代理AgentSims 都旨在通过构建多个代理人来模拟虚拟城镇中的人类日常生活。
  • 盲审判 运用多个语言模型来模拟多名法官的决策过程;以比随机更准确的准确率预测现实世界最高法院的决定。
  • Ziems等人 (2023) 提出了可以协助研究人员进行生成摘要、脚本编写和关键词提取等任务的代理人。
  • ChemCrow 是一个利用与化学相关的数据库来自主规划和执行驱虫剂、三种有机催化剂的合成以及引导发现新型色团的LLM化学代理。
  • [Boiko等人 (2023)] 结合多个LLM自动化设计、规划和执行科学实验。
  • 数学代理 协助研究人员探索、发现、解决和证明数学问题。EduChatCodeHelp 是设计用于教育的LLM代理的另外两个值得注意的例子。
  • Mehta等人 (2023) 提出了一个交互框架,使人类建筑师能够与AI代理在3D模拟环境中构建结构。
  • ChatDevToolLLMMetaGPT 是AI代理展示潜力自动化编码、调试、测试,并协助其他软件工程任务的显著例子。
  • D-Bot 是一个基于LLM的数据库管理员,不断获得数据库维护经验,并为数据库提供诊断和优化建议。
  • IELLM 应用LLM解决石油和天然气行业的挑战。
  • Dasgupta等人 2023 提出了一个统一的代理系统,用于具身推理和任务规划。
  • OS-Copilot 是一个框架,用于构建能够与操作系统(OS)中的综合元素(包括网络、代码终端、文件、多媒体和各种第三方应用程序)进行交互的通用代理。

LLM代理工具

"AutoGen" AutoGen功能;图片来源:https://microsoft.github.io/autogen

以下是用于构建LLM代理的工具和框架的显著例子:

  • LangChain:用于开发由语言模型驱动的应用程序和代理的框架。
  • AutoGPT:提供构建AI代理的工具。
  • Langroid:简化了使用多代理编程的LLM应用程序的构建:代理作为第一类公民,通过消息协作完成任务。
  • AutoGen:一个框架,通过多个代理之间对话解决任务,实现LLM应用程序的开发。
  • OpenAgents:一个开放平台,用于在各种应用程序中使用和托管语言代理。
  • LlamaIndex - 一个用于将自定义数据源连接到大型语言模型的框架。
  • GPT Engineer:自动化代码生成以完成开发任务。
  • DemoGPT:用于创建交互式Streamlit应用程序的自主AI代理。
  • GPT Researcher:专为各种任务的全面在线研究设计的自主代理。
  • AgentVerse:旨在促进在各种应用程序中部署多个基于LLM的代理。
  • Agents:用于构建自主语言代理的开源库/框架。该库支持长短期记忆、工具使用、网络导航、多代理通信等功能,以及包括人-代理交互和符号控制在内的全新功能。
  • BMTools:使用工具扩展语言模型,并作为一个平台,供社区构建和分享工具。
  • crewAI:为工程师重新构想的AI代理框架,提供强大的功能和简单性,用于构建代理和自动化。
  • Phidata:使用函数调用构建AI助手的工具包。

LLM 代理评估

"" AgentBench基准测试用于评估LLM作为代理在真实挑战和8个不同环境中的表现。图源:Liu等人,2023

与评估LLM本身类似,评估LLM代理是一项具有挑战性的任务。根据Wang等人(2023)的研究,常见的评估方法包括:

  • 人工标注:包括人类评估员直接对LLM代理在诚实性、帮助性、参与度、公正性等应用中重要方面的结果进行评分。
  • 图灵测试:要求人类评估员比较真实人类和代理的结果,如果无法区分结果,则表示代理可以达到类似人类的表现。
  • 度量标准:这些是精心设计的反映代理质量的度量标准。值得注意的度量标准包括任务成功度量、人类相似度度量和效率度量。
  • 协议:对应于确定如何使用度量标准的常见评估协议。示例包括真实世界模拟、社交评估、多任务评估和软件测试。
  • 基准测试:已设计了几个基准测试来评估LLM代理。值得注意的示例包括ALFWorldIGLUTachikumaAgentBenchSocKETAgentSimsToolBenchWebShopMobile-EnvWebArenaGentBenchRocoBenchEmotionBenchPEBClemBenchE2E

挑战

LLM代理仍处于起步阶段,因此在构建它们时存在许多挑战和限制:

  • 角色扮演能力:基于LLM的代理通常需要适应一个角色才能有效地完成领域中的任务。对于LLM无法很好刻画的角色,可以通过在代表不常见角色或心理角色的数据上对LLM进行微调。
  • 长期规划和有限上下文长度:规划长时间历史仍然是一个挑战,可能导致代理无法从中恢复的错误。LLM在支持的上下文长度方面也存在限制,这可能导致限制代理能力的约束,如利用短期记忆。
  • 广义人类对齐:将代理与多样化的人类价值观对齐也是具有挑战性的,这在标准LLM中也很常见。一个潜在的解决方案涉及通过设计先进的提示策略重新对齐LLM。
  • 提示的稳健性和可靠性:LLM代理可能涉及设计用于支持不同模块(如记忆和规划)的多个提示。即使对提示进行微小更改,也很常见在LLM中遇到可靠性问题。LLM代理涉及整个提示框架,这使得它更容易受到稳健性问题的影响。潜在的解决方案包括通过试错方式制定提示元素、自动优化/调整提示,或使用GPT自动生成提示。LLM中的另一个常见问题是幻觉,这在LLM代理中也很普遍。这些代理依赖自然语言与可能引入冲突信息的外部组件进行交互,导致幻觉和真实性问题。
  • 知识边界:类似可能导致幻觉或真实性问题的知识不匹配问题,控制LLM的知识范围也具有挑战性,这可能会显著影响模拟的有效性。具体而言,LLM的内部知识可能引入偏见或利用用户未知知识,这可能会影响代理在特定环境中的行为。
  • 效率:LLM代理涉及大量由LLM处理的请求,这可能会影响代理行动的效率,因为它将严重依赖LLM的推理速度。在部署多个代理时,成本也是一个问题。

参考文献