引言:
LLM Agent 已经成为大语言模型中最有价值的探索方向,也更趋于最前沿的通用人工智能。构建企业自己的 LLM Agent 有助于企业在最前沿的人工智能领域探索具有完全自主性的智能化能力,包括基于企业知识库、企业工具 API(如:会议、审核、报表等)实现完全智能化的操作能力的探索。
灵雀云在 Alauda MLOps(AML)的升级版本中将 Agent 作为 Prompt 工程的重要子功能加入。AI Agent 通过结合手动 Chain 和基于 LLM 的自动 Chain 生成,同时,Agent 集成了知识库、日志和搜索等本地工具,可以快速构建企业自己的 AI Agent,探索 Agent 带来的完全智能自动化流程的能力。
那么,什么是LLM Agent?附上一篇内容详解,带您全面了解它。
具现化AI环境及应用(Embodied environments)提出了一项挑战,需要逻辑推理来解决复杂的顺序决策任务。为了克服这些障碍,一种常见的策略是采用强化学习(RL),其中代理(Agent)可以从现实世界的经验中学习。尽管深度强化学习技术取得了重大发展,但高效、安全地解决这些困难任务的复杂性仍然很具有挑战性。
与此同时,大语言模型(LLM)的最新进展带来了一些希望。某些著名论文(Radford et al. (2019), ChatGPT 3 [Brown et al.2020], and Wei et al. (2022) )声称LLM具有推理能力,其背后的研究也证明了这一点。这使LLM成为解决某些复杂的序列决策问题的潜在竞争者。
虽然存在某些将预训练的LLM纳入实体代理的研究,但研究仍需进一步深入。同时,由于现实世界问题的不确定性,根据LLM预测采取行动可能存在风险。
什么是LLM 代理?
LLM 代理是一种超越简单文本生成的人工智能系统。它使用LLM作为其中央计算引擎,使其能够进行对话、执行任务、推理并实现一定程度的自主权。
精心设计的提示对身份、指令、授权和上下文进行编码,指导 LLM 代理的回复和行为。
LLM 代理的组成部分
下图展示了LLM 代理的组成部分:
1. 作为核心的 LLM
LLM 代理的基础核心是其构建的大型语言模型。该模型使用大量数据集进行训练,可以生成并理解简单的文本。LLM的规模和设计决定了LLM 代理的初始能力和局限性。
2. 提示词
激活和指导LLM的提示词也至关重要。代理的身份、专业知识、行为和目标都是通过精心准备的提示词传递给它的。提示词一般都使用预定义的模板,其中包含了重要的说明、上下文信息和参数,以方便模型给出最准确的答案。
聊天类型的代理需要在提示词中区分出不同角色,从而方便从不同角度进行回复。提示词通过澄清目标、提供相关信息和制定指令来帮助以任务为导向的代理去完成特定任务。
3. 记忆
代理的记忆至关重要,因为它提供了一个时间框架并存储与特定用户或任务相关的细粒度细节。代理主要使用两种类型的记忆来提高其性能:
-
第一种对应着我们天生的短期记忆能力,这是LLM的核心,可确保我们永远不会忘记正在进行的对话或最近的行为。代理的短期存储充当了一个不断变化的上下文窗口,帮助LLM随时掌握当前对话的上下文信息。
-
第二种记忆是长期记忆,通过采用外部数据库与LLM相结合,大大提高了其记住大量数据的能力。这一增强功能拓宽了代理的记忆范围,使其能够包含较长时期内的信息、对话和其他事物。通过纳入这种形式的长期记忆,代理就可以充分利用积累的知识和见解。
将这两种信息放在一起时,代理可以牢牢掌握有关当前用户的历史情况和上下文知识。这种做法通过参考之前的交互,为和代理的对话增添了人情味,并提高了代理在执行复杂程序时的可靠性和技能。简而言之,拥有记忆能力的代理能够提供更加个性化和有趣的对话交互,从而加深联系并取得更好的效果。
4. 知识
在LLM代理中,有两个不同的领域对塑造他们的能力发挥着至关重要的作用:记忆和知识。虽然记忆涉及在时间框架内保留用户交互和特定任务相关的细节,但知识代表了可以跨不同用户和任务应用的更广泛的专业知识。知识可以增强并拓宽了模型固有参数所定义的基础。
专业知识是补充人工智能核心架构的重要方面。它引入了针对特定主题或领域进行微调的特定领域术语、概念和推理模式。这种增强使人工智能能够更深入、更准确地参与与这些专业领域相关的讨论,使其成为寻求这些领域专业知识的用户更有价值的信息来源。
常识知识是丰富人工智能能力的另一个维度。它通过介绍有关社会、文化、科学和其他各个领域的事实和见解,传授该模型可能缺乏的对世界的一般理解。这一层知识有助于人工智能生成符合人类常识的响应,使交互更加具体和现实。
程序性知识使人工智能具备完成特定任务所需的实用技能和方法。无论是理解复杂的工作流程、采用分析技术还是参与创造性过程,程序知识都使人工智能能够提供实用的指导和解决方案。
将知识集成到人工智能的架构中可以扩展其理解和参与有意义的讨论的能力。即使人工智能的记忆被重置或适配去完成不同的任务,知识仍然是相关的。这种和谐的结合使得人工智能代理拥有大量的个性化记忆和丰富的相关专业知识。这种记忆和知识的融合将人工智能转变为知识渊博的对话伙伴,能够满足不同的用户需求。
5. 工具集成
工具集成允许代理使用其他服务和 API 来履行其职责,而不是完全依赖语言生成。例如,像 OpenAi 这样的代码解释器可以被代理用作代码执行工具来执行提示中提到的软件操作。
代理架构和类型
1. 网络LLM代理
在人工智能研究的最新进展中,出现了两个关键维度——网络LLM代理和工具LLM代理。网络LLM代理训练 AI 模型以实现高效的页面信息浏览,用于信息收集和通信。早期的研究者探索了模拟环境中的网络LLM代理训练,最近,语言动作代理(LAA)的集成带来了创新的解决方案。
值得注意的例子包括 MIND2Web(它改进了用于生成可执行 Web 操作的语言模型)和 WebAgent(它将任务指令分解为子任务以直接生成用于 Web 导航的可执行 Python 程序)。现实的任务模拟(如 WebArena 中所示)以及无缝 Web 集成插件(如 Langchain 和 ChatGPT)表明,Web 导航作为一项基本任务的重要性与日俱增,而语言动作代理正在其中大放异彩。
2. 工具LLM代理
工具LLM代理的概念受到日益重视,它演示了人工智能模型如何利用外部工具来增强其解决问题的能力。像 “Gorilla” 这样的开创性实践掌握了生成 API 调用代码并实时适应 API 文档变化的能力。“ToolLLM” 框架已成为一种开源解决方案,可与各种工具(特别是 API)进行有效交互,以执行复杂的任务。该框架包括 ToolBench,一个旨在利用工具的微调指令数据集。
最近人工智能模型的训练重点在使用新工具方面发生了转变,开始提倡使用工具文档。从这个角度来看的经验证据表明,仅依靠包含了详细工具文档的零样本提示就可以与使用少量样本训练得到的模型性能相媲美。这些不断发展的进步凸显了人工智能与工具协作来创新、高效地完成复杂任务的格局。
LLM 代理的典型应用
1. AutoGPT
开源 Python 程序 AutoGPT 是在与 GPT-4 相同的框架上从头开始开发的。它最近发布在 GitHub 上,由 Toran Bruce Richards 创建。核心概念是无需用户干预即可执行日常任务。在收到用户的目标提示后,AutoGPT 将执行必要的程序来实现该目标。AutoGPT 框架基于所谓的“人工智能代理”,它使用在线访问来执行活动,无需人工干预。
AutoGPT 和 ChatGPT 都是构建在 GPT-4 基础上。然而,我们却不太知道如何区分这两种语言模型。
AutoGPT 与 ChatGPT
-
ChatGPT 提供信息并响应个人查询,而 AutoGPT 则根据收到的指令自动执行整个作业。
-
AutoGPT 可以执行更大的任务,因为它可以获取来自互联网、社交媒体、处理后的数据、市场趋势和客户行为的数据,所有这些都可以为其决策提供信息。与之相对比的是,ChatGPT 需要每个步骤的详细说明才能提供必要的数据。
-
AutoGPT 比 ChatGPT 提供了更多的独立性,ChatGPT 只能使用其训练数据来回答问题。
2. BabyAGI
BabyAGI 借鉴人类学习方式,是一个开源人工智能平台,旨在于模拟环境中训练和评估不同的人工智能代理。该平台旨在结合强化学习、语言习得和认知发展,帮助人工智能代理学习和执行困难的任务。
BabyAGI 使用 GPT-4、LangChain 的连接和代理功能、OpenAI API 和 Pinecone 等强大的技术。这些技术侧重于强化学习和语言,可促进有效的任务完成、开发、优先级划分和存储。
-
执行代理
-
任务创建代理
-
优先级代理
任务生成代理使用 OpenAI 的 API 调用将人类定义的目标分解为一系列任务。然后,优先级代理按重要性顺序对任务进行排名和存储。最后,执行代理按照定义好的优先级来完成每个具体的任务,并且及时更新下一个任务并将其排队。当优先级重新排列后,循环再次开始。下图描述了这个多代理(multi-agent)过程。
3. CensusGPT
借助人工智能驱动的搜索引擎 CensusGPT,用户可以轻松访问和探索美国人口普查数据库。在这里,用户可以使用自然语言进行用户查询,从而提供快速、轻松的搜索体验。
在收到查询后,CensusGPT 直接将底层数据以表格和图表的形式进行展示。研究人员、经济学家和任何有兴趣使用免费人口普查数据来解决人口统计、种族和财富问题的人都会发现这个工具非常好用。CensusGPT 基于公共领域的 TextSQL 项目,该项目使用人工智能将查询转换为 SQL,以便用户可以用其母语与任何数据集“对话”。
如何实现 LLM 代理?
1. 数据收集
编译一个相关领域的大量且多样化的文本语料库,后面将使用该数据集来训练语言模型。
2. 数据预处理
通过消除噪音、不一致的格式和多余的信息来清理和预处理收集到的文本数据;然后对文本进行标记并将其分解为更易于管理的块以进行模型训练。
3. 训练语言模型
使用机器学习的方法,特别是自然语言处理相关的策略,使用预处理好的数据集来训练语言模型。Transformer 模型和其他深度学习架构对于训练LLM代理非常有用。在训练过程中,文本序列被输入到语言模型中,同时优化其参数以学习数据中发现的统计关系和模式。
4. 微调
要提高性能并使预训练的语言模型适应您的预期用例,请将其微调到更具体的任务或领域上。为了实现这一目标,模型必须在该工作特有的数据集上进行训练,同时保留先验知识。
5. 评估和迭代
使用适当的指标(例如困惑度或准确性)评估 LLM 代理的效果,并进行必要的模型修订。通过迭代训练和微调过程,随着时间的推移提高代理的能力。
6. 部署与集成
在其性能令人满意后,将 LLM 代理部署到生产环境中,或者将其集成到想要集成的平台或应用程序中。
7. 持续学习和改进
使用最新知识定期更新和重新培训 LLM 代理。通过这样做,代理可以保持最新状态并随着时间的推移保持相关性。
LLM 代理面临的挑战
1. 用户体验问题
当前的代理系统使用自然语言将LLM与记忆和工具等其他组件连接起来。然而,LLM可能会出现格式错误,并且偶尔会表现出叛逆行为(例如,拒绝遵守命令),因此很难完全相信这些模型的结果。因此,相当一部分的代理演示代码都是用于分析模型输出的。
2.长期规划和任务分解
长期规划和完整遍历所有的解决方案仍然是巨大的障碍。同时,LLM的容错性不如那些反复试错的人,因为他们无法在面对不可预见的错误时改变计划。
3. 信任和隐私
用户对于何时执行工具(LLM 执行)或如何调用工具都没有发言权。使用任何旧的第三方插件或工具有风险吗?如果程序可以访问敏感信息或独立执行“管理”级任务(例如发送电子邮件),这就是一个严重的问题了。我们如何确保第三方插件和工具不存在恶意行为或不会向系统中植入后门?
4. 工具质量
上下文长度是有限的,因此可以包含多少背景数据、具体指引、API调用上下文以及后续响应都有限制。虽然从过去的错误中吸取教训的自我反思等过程将大大受益于扩展或无限的上下文窗口,但系统的设计必须与可用的通信能力相结合。通过向量存储和检索可以获取更广泛的知识体系。然而,这并不意味着它们在代表知识体系方面与集中注意力一样有效。