LLM 智能体
基于 LLM 的智能体,以下简称 LLM 智能体,是指利用结合了 LLM 与规划、记忆等关键模块的架构,能够执行复杂任务的 LLM 应用。在构建 LLM 智能体时,LLM 充当主控制器或“大脑”,控制完成任务或用户请求所需的操作流程。LLM 智能体可能需要规划、记忆和工具使用等关键模块。
为了更好地说明 LLM 智能体的用处,假设我们想构建一个系统来帮助回答以下问题
2023 年美国人均每日卡路里摄入量是多少?
上面的问题可能可以直接使用一个已经具备所需知识的 LLM 来回答。如果 LLM 没有相关的知识,可以使用简单的 RAG 系统,其中 LLM 可以访问健康相关的信息或报告。现在,让我们给系统一个更复杂的问题,如下所示
过去十年中,美国成年人日均卡路里摄入量的趋势如何变化,这可能对肥胖率产生什么影响?此外,您能否提供此期间肥胖率趋势的图表表示?
要回答这样的问题,仅使用 LLM 是不够的。您可以将 LLM 与外部知识库结合形成 RAG 系统,但这可能仍然不足以回答上述复杂查询。这是因为上述复杂问题需要 LLM 将任务分解为子部分,这些子部分可以使用工具和操作流程来解决,从而得出所需的最终响应。一个可能的解决方案是构建一个 LLM 智能体,该智能体可以访问搜索 API、健康相关出版物以及公共/私人健康数据库,以提供与卡路里摄入量和肥胖相关的有用信息。
此外,LLM 需要访问一个“代码解释器”工具,该工具可以获取相关数据以生成有用的图表,帮助理解肥胖趋势。这些是假设的 LLM 智能体可能的高级组件,但仍有一些重要的考虑因素,例如制定解决任务的计划以及可能访问记忆模块,该模块帮助智能体跟踪操作流程的状态、观察结果和总体进度。
在我们的新 AI 课程中了解更多关于基于 LLM 的智能体和高级提示方法。立即加入!(在新标签页中打开)
使用代码 PROMPTING20 额外享受 20% 折扣。
LLM 智能体框架
一般来说,LLM 智能体框架可以包含以下核心组件
- 用户请求 - 用户的问题或请求
- 智能体/大脑 - 作为协调者的智能体核心
- 规划 - 协助智能体规划未来行动
- 记忆 - 管理智能体过去的行动
智能体
具有通用能力的大型语言模型 (LLM) 作为系统的主体大脑、智能体模块或协调者。这个组件将使用一个提示模板来激活,该模板包含关于智能体如何操作以及它可以访问哪些工具(以及工具细节)的重要信息。
虽然不是强制性的,但可以为智能体进行画像或分配一个角色来定义其作用。这种画像信息通常写在提示中,可以包括诸如角色细节、个性、社交信息和其他人口统计信息等具体细节。根据 [Wang et al. 2023],定义智能体画像的策略包括手工制作、LLM 生成或数据驱动。
规划
无反馈规划
规划模块有助于将智能体为回答用户请求而需要单独解决的必要步骤或子任务分解开来。这一步骤对于使智能体更好地对问题进行推理并可靠地找到解决方案至关重要。规划模块将利用 LLM 分解详细计划,其中将包含帮助解决用户问题的子任务。流行的任务分解技术包括 思维链(Chain of Thought)(在新标签页中打开) 和 思维树(Tree of Thoughts)(在新标签页中打开),它们分别可以归类为单路径推理和多路径推理。下图比较了 Wang et al., 2023(在新标签页中打开) 中形式化的不同策略
有反馈规划
上述规划模块不包含任何反馈,这使得实现长期规划以解决复杂任务具有挑战性。为了应对这一挑战,可以利用一种机制,使模型能够根据过去的行为和观察结果迭代地反思和完善执行计划。目标是纠正和改进过去的错误,这有助于提高最终结果的质量。这在复杂现实世界的环境和任务中尤其重要,在这些环境中,试错是完成任务的关键。这种反思或批评机制的两种流行方法包括 ReAct(在新标签页中打开) 和 Reflexion(在新标签页中打开)。
例如,ReAct 结合了推理和行动,旨在通过在一系列步骤(重复 N 次)之间交替进行,使 LLM 能够解决复杂任务:Thought
、Action
和 Observation
。ReAct 以观察结果的形式接收来自环境的反馈。其他类型的反馈可以包括人类反馈和模型反馈。下图展示了 ReAct 的一个示例以及执行问答所涉及的不同步骤
在此了解更多关于 ReAct 的信息
记忆
记忆模块有助于存储智能体的内部日志,包括过去的思考、行动和来自环境的观察,以及智能体与用户之间的所有交互。在 LLM 智能体文献中报告了两种主要的记忆类型
- 短期记忆 - 包括关于智能体当前情况的上下文信息;这通常通过上下文学习实现,这意味着由于上下文窗口的限制,它是短暂且有限的。
- 长期记忆 - 包括智能体在较长时间内需要保留和回忆的过去行为和思考;这通常利用可通过快速且可扩展的检索访问的外部向量存储,以便在需要时为智能体提供相关信息。
混合记忆结合了短期记忆和长期记忆,以提高智能体进行远程推理和经验积累的能力。
在构建智能体时,还需要考虑不同的记忆格式。代表性的记忆格式包括自然语言、嵌入、数据库和结构化列表等。这些也可以组合使用,例如在 Minecraft 中的幽灵(GITM(在新标签页中打开))中,它利用键值结构,其中键由自然语言表示,值由嵌入向量表示。
规划和记忆模块都使智能体能够在动态环境中运行,并使其能够有效地回忆过去的行为和规划未来的行动。
工具
工具对应于一组工具,使 LLM 智能体能够与外部环境交互,例如 Wikipedia 搜索 API、代码解释器和数学引擎。工具还可以包括数据库、知识库和外部模型。当智能体与外部工具交互时,它通过工作流程执行任务,这些工作流程协助智能体获取观察结果或必要信息以完成子任务并满足用户请求。在我们最初的健康相关查询中,代码解释器就是一个工具示例,它可以执行代码并生成用户请求的必要图表信息。
LLM 以不同方式利用工具
- MRKL(在新标签页中打开) 是一个将 LLM 与专家模块相结合的框架,专家模块可以是 LLM 或符号模块(计算器或天气 API)。
- Toolformer(在新标签页中打开) 微调 LLM 以使用外部工具 API。
- 函数调用(Function Calling)(在新标签页中打开) - 增强 LLM 的工具使用能力,这涉及定义一组工具 API 并将其作为请求的一部分提供给模型。
- HuggingGPT(在新标签页中打开) - 一个由 LLM 驱动的智能体,它利用 LLM 作为任务规划器,连接各种现有的 AI 模型(基于描述)来解决 AI 任务。
LLM 智能体应用
ChemCrow 智能体,旨在完成有机合成、药物发现和材料设计等任务。图源:Bran et al., 2023
在本节中,我们将重点介绍基于 LLM 的智能体由于其复杂的推理和常识理解能力而被有效应用的领域和案例研究。
值得关注的基于 LLM 的智能体
- Ma et al. (2023)(在新标签页中打开) 分析了对话式智能体在心理健康支持方面的有效性,发现智能体可以帮助用户应对焦虑,但有时也会产生有害内容。
- Horton (2023)(在新标签页中打开) 赋予基于 LLM 的智能体禀赋、偏好和个性,以在模拟场景中探索人类经济行为。
- 生成式智能体(Generative Agents)(在新标签页中打开) 和 AgentSims(在新标签页中打开) 都旨在通过构建多个智能体来模拟虚拟城镇中的人类日常生活。
- Blind Judgement(在新标签页中打开) 使用多个语言模型来模拟多个法官的决策过程;预测现实世界最高法院判决的准确率高于随机水平。
- Ziems et al. (2023)(在新标签页中打开) 提出了可以协助研究人员完成诸如生成摘要、编写脚本和提取关键词等任务的智能体。
- ChemCrow(在新标签页中打开) 是一个 LLM 化学智能体,它利用化学相关数据库自主规划并执行驱虫剂、三种有机催化剂的合成,并指导发现新型发色团。
- [Boiko et al. (2023)] 结合多个 LLM,实现科学实验的设计、规划和执行自动化。
- 数学智能体(Math Agents)协助研究人员探索、发现、解决和证明数学问题。EduChat(在新标签页中打开) 和 CodeHelp(在新标签页中打开) 是另外两个值得关注的专为教育设计的 LLM 智能体示例。
- Mehta et al. (2023)(在新标签页中打开) 提出了一种交互式框架,使人类建筑师能够与 AI 智能体互动,在 3D 模拟环境中构建结构。
- ChatDev(在新标签页中打开)、ToolLLM(在新标签页中打开)、MetaGPT(在新标签页中打开) 是 AI 智能体在自动化编码、调试、测试以及协助其他软件工程任务方面展现潜力的显著示例。
- D-Bot(在新标签页中打开) 是一个基于 LLM 的数据库管理员,持续获取数据库维护经验并为数据库提供诊断和优化建议。
- IELLM(在新标签页中打开) 将 LLM 应用于解决石油和天然气行业的挑战。
- Dasgupta et al. 2023(在新标签页中打开) 提出了一个统一的具身推理和任务规划智能体系统。
- OS-Copilot(在新标签页中打开) 一个构建通用智能体的框架,该智能体能够与操作系统 (OS) 中的各种元素进行交互,包括网页、代码终端、文件、多媒体和各种第三方应用程序。
LLM 智能体工具
AutoGen 功能;图源:https://msdocs.cn/autogen(在新标签页中打开)
以下是用于构建 LLM 智能体的值得关注的工具和框架示例
- LangChain(在新标签页中打开): 一个用于开发由语言模型驱动的应用和智能体的框架。
- AutoGPT(在新标签页中打开): 提供构建 AI 智能体的工具。
- Langroid(在新标签页中打开): 通过多智能体编程简化 LLM 应用的构建:将智能体作为一等公民,通过消息协作完成任务。
- AutoGen(在新标签页中打开): 一个框架,支持使用多个可以相互对话以解决任务的智能体来开发 LLM 应用。
- OpenAgents(在新标签页中打开): 一个用于在野外使用和托管语言智能体的开放平台。
- LlamaIndex(在新标签页中打开) - 一个用于将自定义数据源连接到大型语言模型的框架。
- GPT Engineer(在新标签页中打开): 自动化代码生成以完成开发任务。
- DemoGPT(在新标签页中打开): 自主 AI 智能体,用于创建交互式 Streamlit 应用。
- GPT Researcher(在新标签页中打开): 一个自主智能体,旨在针对各种任务进行全面的在线研究。
- AgentVerse(在新标签页中打开): 旨在促进在各种应用中部署多个基于 LLM 的智能体。
- Agents(在新标签页中打开): 一个用于构建自主语言智能体的开源库/框架。该库支持长期短期记忆、工具使用、网页导航、多智能体通信等功能,以及人机交互和符号控制等全新功能。
- BMTools(在新标签页中打开): 使用工具扩展语言模型,并作为一个平台供社区构建和共享工具。
- crewAI(在新标签页中打开): 专为工程师重新构想的 AI 智能体框架,提供强大且易于使用的能力来构建智能体和自动化流程。
- Phidata(在新标签页中打开): 一个使用函数调用构建 AI 助手的工具包。
LLM 智能体评估
AgentBench 基准,用于评估 LLM 作为智能体在现实世界挑战和 8 个不同环境中的表现。图源:Liu et al. 2023
与评估 LLM 本身类似,评估 LLM 智能体也是一项具有挑战性的任务。根据 Wang et al., (2023) 的研究,常见的评估方法包括
- 人工标注:包括人工评估员,他们直接根据应用中重要的不同方面对 LLM 结果进行评分,例如诚实性、帮助性、参与度、无偏性等。
- 图灵测试:要求人工评估员比较真实人类和智能体的结果,如果结果无法区分,则意味着智能体可以达到人类水平的表现。
- 指标:这些是精心设计的、反映智能体质量的指标。值得关注的指标包括任务成功指标、人类相似度指标和效率指标。
- 协议:对应于确定如何使用指标的常见评估协议。示例包括现实世界模拟、社会评估、多任务评估和软件测试。
- 基准:已经设计了一些基准来评估 LLM 智能体。值得关注的示例包括 ALFWorld(在新标签页中打开)、IGLU(在新标签页中打开)、Tachikuma(在新标签页中打开)、AgentBench(在新标签页中打开)、SocKET(在新标签页中打开)、AgentSims(在新标签页中打开)、ToolBench(在新标签页中打开)、WebShop(在新标签页中打开)、Mobile-Env(在新标签页中打开)、WebArena(在新标签页中打开)、GentBench(在新标签页中打开)、RocoBench(在新标签页中打开)、EmotionBench(在新标签页中打开)、PEB(在新标签页中打开)、ClemBench(在新标签页中打开) 和 E2E(在新标签页中打开)。
挑战
LLM 智能体仍处于起步阶段,因此在构建它们时仍然存在许多挑战和限制
- 角色扮演能力:基于 LLM 的智能体通常需要适应一个角色才能在特定领域有效完成任务。对于 LLM 不擅长刻画的角色,可以对代表不常见角色或心理特征的数据进行 LLM 微调。
- 长期规划和有限的上下文长度:跨越漫长历史进行规划仍然是一个挑战,可能导致智能体无法恢复的错误。LLM 支持的上下文长度也有限,这可能会限制智能体的能力,例如利用短期记忆。
- 广义人类对齐:将智能体与多样化的人类价值观对齐也具有挑战性,这在标准 LLM 中也很常见。一个潜在的解决方案涉及通过设计高级提示策略来重新对齐 LLM 的可能性。
- 提示的鲁棒性和可靠性:LLM 智能体可能包含多个旨在为记忆和规划等不同模块提供动力的提示。LLM 中常见的问题是即使对提示做最微小的更改也可能导致可靠性问题。LLM 智能体涉及整个提示框架,这使得它更容易出现鲁棒性问题。潜在的解决方案包括通过试错精心设计提示元素,自动优化/调优提示,或者使用 GPT 自动生成提示。LLM 的另一个常见问题是幻觉,这在 LLM 智能体中也很普遍。这些智能体依赖自然语言与外部组件交互,这可能会引入冲突信息,导致幻觉和事实性问题。
- 知识边界:类似于可能导致幻觉或事实性问题的知识不匹配问题,控制 LLM 的知识范围具有挑战性,这可能会显著影响模拟的有效性。具体来说,LLM 的内部知识可能会引入偏见或利用用户未知的知识,从而影响智能体在特定环境中运行时的行为。
- 效率:LLM 智能体涉及大量由 LLM 处理的请求,这可能会影响智能体行动的效率,因为它很大程度上取决于 LLM 的推理速度。部署多个智能体时,成本也是一个问题。
参考文献
- LLM 驱动的自主智能体(在新标签页中打开)
- MRKL 系统:一种模块化、神经符号架构,结合了大型语言模型、外部知识源和离散推理(在新标签页中打开)
- 大型语言模型自主智能体综述(在新标签页中打开)
- 基于大型语言模型的智能体的兴起与潜力:一项调查(在新标签页中打开)
- 基于大型语言模型的多智能体:进展与挑战综述(在新标签页中打开)
- 语言智能体的认知架构(在新标签页中打开)
- LLM 智能体介绍(在新标签页中打开)
- LangChain 智能体(在新标签页中打开)
- 构建您的第一个 LLM 智能体应用(在新标签页中打开)
- 构建用于生产环境的 LLM 应用(在新标签页中打开)
- 优秀的 LLM 智能体(在新标签页中打开)
- 优秀的 LLM 驱动智能体(在新标签页中打开)
- 使用 LangChain 的函数、工具和智能体(在新标签页中打开)