BMW 智体 - 通过多智体协作实现任务自动化的框架

24年6月来自BMW集团的论文“BMW Agents - A Framework For Task Automation Through Multi-Agent Collaboration”。

由大语言模型 (LLM) 驱动的自主智体为自动化提供了巨大的潜力。该技术的早期证据可以在智体解决复杂任务、与外部系统交互以增强其知识以及触发操作的各种演示中找到。特别是,涉及多个智体以协作方式解决复杂任务的工作流,体现了它们在不太严格和定义不太明确的环境中运行的能力。因此,多智体方法具有很大的潜力,可以作为许多工业应用的支柱,从复杂的知识检索系统到下一代机器人过程自动化。鉴于当前一代 LLM 的推理能力,复杂过程需要多步骤方法,其中包括明确定义和模块化任务的计划。根据复杂程度,这些任务可以由单个智体或一组智体执行。这项工作专注于设计一个灵活的智体工程框架,并仔细关注规划和执行,能够处理跨各个领域的复杂用例应用程序。所提出的框架为工业应用提供了可靠性,并提供技术来确保一个多自主智体共同解决任务的可扩展、灵活和协作工作流程。

在快速发展的人工智能 (AI) 领域,生成式 AI 模型的部署标志着一项重大的技术进步,它改变了企业和组织对 AI 价值及其自动化复杂任务潜力的认识。虽然大语言模型 (LLM) 的涌现能力令人印象深刻,但它们在工业环境中的应用仅限于当前这一代模型。LLM 本身无法访问机密和专有业务信息,而这些信息对于开发强大且高质量的 AI 驱动应用程序是必不可少的。虽然可以使用公司特定的数据对这些模型进行微调,但必须仔细考虑与这种方法相关的挑战,例如数据准备和可维护性。此外,还有一个庞大的 IT 生态系统,可以在其中利用现有的工具和应用程序而无需复制数据。这些限制凸显了使用 AI 智体进行 AI 应用程序设计需要采用更动态的方法 [1]。

将多个 AI 智体集成到一个有凝聚力的工作流中,代表着从传统的单一 AI 应用程序到更具动态、相互关联的框架的范式转变。这种方法不仅放大了每个智体的个体能力,这些智体现在可以拥有狭窄的专业知识并稳健地运行,而且还协调了推动复杂任务完成的交互工作流 [2, 3]。
随着旨在完成非常通用任务的专用框架出现,AI 智体研究的轨迹(尤其是以 LLM 为重点的研究)发生了显着转变。随着 AutoGPT [5] 和 BabyAGI [6] 等项目的推出,对 AI 智体的兴趣从学术研究环境扩展到更广泛的社区。这两个项目都能够证明复杂的任务可以分解为更简单的步骤。通过以编程方式协调每个单独步骤的解决方案,可以实现更复杂任务的解决方案。在由 LLM 驱动的 AI 智体领域,围绕任务分解、规划和使用工具执行任务的理念已经出现,以克服现有 LLM 的局限性 [3]。

下表是现有智体依赖工作流的框架方法:AutoGen、LlamaIndex、MetaGPT、Agentverse、和BabyAGI等。

添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
智体工作流的结构,可以支持单智体和多智体执行。本文所说的工作流将遵循三个主要阶段:

  1. 规划 - 将输入分解为具有明确定义操作顺序的简单逻辑步骤。
  2. 执行 - 智体解决简单任务并产生结果,完成步骤 (1) 中规划的工作。
  3. 验证 - 独立检查步骤 (2) 中是否已实现原始目标。

如图说明了从用户提供的(或一般而言,外部提供的)输入开始整个流程。

添加图片注释,不超过 140 字(可选)

智体是一个目标,它使用指定的提示策略进行 LLM 调用以实现特定结果。智体包括一个定义其知识和行动范围的角色。智体可能可以访问一组工具,每个工具都可以采取特定的行动。任何可用的工具都会有一个简短的描述以及智体提示中包含的输入模式的说明。

智体单元是一个容器,它包含一个或多个旨在共同解决任务的智体。智体单元负责在解决任务的每次迭代中选择单个智体。选择策略可以从简单的模式到使用 AI 更动态的方法。在工作流中,可以使用多个智体单元来促进复杂而专业的协作模式。

匹配器是一个抽象层,用于启用基于某些标准选择项目的各种方法。匹配器的一个潜在用途是为给定任务选择合适的智体单元。匹配可以通过简单的方法(例如列表迭代)或通过涉及 AI 的更高级方法进行。

执行器是通过与智体单元交互来协调所有智体相关操作的组件。它还负责将与当前正在运行的任务相关的信息传递给单元中的智体。

工具是提供给智体以完成任务的外部功能。这可以包括对数据库、文件系统和 API 的访问。这些工具集共同构成了智体的工具箱。

工具箱细化器负责在智体循环执行期间将一组工具过滤到相关子集中。这可以通过限制工具选项的数量来提高智体的准确性和性能。

协调器协调智体工作流程并执行规划、执行和验证数据流所需的所有组件。

规划器是智体的一个实例,专门用于将用户指令分解为几个更简单的任务。它以结构化格式提供一组任务及其依赖关系。

任务队列是用于保存规划器创建的任务容器。任务完成后,任务队列负责在任务之间传播相关结果。它还负责在解决所有依赖关系后释放任务以供执行。

验证器是智体的一个实例,其任务是独立验证智体工作流结果是否符合原始用户指令和总体目标。验证器智体的输出是一个布尔值,表示工作流结果是否满足请求。如果结果被认为不令人满意,工作流将进入重新规划阶段以改进结果。

任何智体的核心都是 LLM、提示策略和其过去操作的历史记录(称为短期记忆)。如图说明了构成智体目标并参与其执行的组件。虽然此图显示了单个智体,但此结构通过智体单元扩展到多个智体。提示策略是抽象的,因此可以在不修改智体的情况下使用简单和迭代策略。

添加图片注释,不超过 140 字(可选)

最基本的提示策略是简单的一次性 LLM 调用。在所有的策略中,都包含一个模板系统消息,其中包含可以修改的变量。默认模板包括角色和目标变量,并存储在调用提示策略时呈现的纯文本模板文件中。

如图 (a) 显示了简单提示策略中使用的消息类型。“系统”和“用户”消息是输入,“助手”消息代表来自 LLM 的响应。包括一个后处理步骤,负责根据策略解析原始模型输出并构建修订的助手消息。此修订的助手消息可确保迭代提示策略在短内存中具有一致的结构,以便进行后续的 LLM 调用迭代。

对于不需要使用 LLM 进行迭代处理的智体工作流组件来说,基本策略已经足够了。可以利用基本策略的两个此类智体示例是规划器智体和验证器智体。这些智体可以为其独特的目标和后处理功能提供专门的模板。

使用非迭代提示策略的一个例子是简单的任务规划。任务分解是成功的智体工作流程中关键要素。规划器智体的目的是接收用户的指令,将其分解为简单的任务,并以有向无环图 (DAG) 的形式识别任务之间的依赖关系。这种简单的非交互式提示策略只进行一次 LLM 调用,不会进一步细化其任务列表。LLM 被指示以结构化的 JSON 格式生成响应,该响应将被解析以提取所有任务并填充任务队列。图 (b) 显示了此提示策略的数据流,从用户指令到任务 DAG,再到最终结果。

即使经过规划阶段,也无法保证智体工作流程会成功。规划可能无法正确完成,或者创建的规划可能不够简单而无法可靠。为了给自主任务执行提供保障机制,需要一个验证智体,其任务是确保最终结果充分满足用户的指令。图 © 显示了采用简单提示策略时验证智体提示的结构。智体推理工作流程的结果并返回真/假值。为了防止验证出现偏差,验证是在不了解创建的规划或执行期间完成的部分结果情况下进行的。

添加图片注释,不超过 140 字(可选)

事实证明,LLM 可以通过使用工具生成操作并自动执行任务 [33–35]。这些早期的演示主要集中在网页浏览或机器人技术上,但很快就得到了推广,并被纳入了连贯的 ReAct 提示策略 [20]。Gorilla [22] 和其他 [21、36、37] 提出了大量使用工具的替代方法。

工具使用是智体工作流程的关键要素,重点是可扩展和可靠的使用。

非迭代提示对于不需要从外部来源获取任何额外信息即可完成的任务非常有用。然而,任何智体工作流的主要部分都需要通过使用工具与外部世界进行交互。工具执行的结果将作为新信息返回给智体,然后再进行另一个 LLM 调用。

ReAct 提示策略 [20] 提供了一个极好的例子,说明如何使用 LLM 来反思给定的任务并与一组外部操作进行交互。在初始指令之后,ReAct 策略循环经过思考、行动和观测阶段,每个阶段都有特定的用途。思考阶段为 LLM 提供了一个反思给定任务和必要措施的地方。在行动阶段,LLM 以 JSON 结构定义所选工具和此工具的适当输入。观测阶段不会发生在 LLM 调用内部,而是使用指定输入执行工具的结果,并以用户消息的形式返回给 LLM。此后,模型返回到思考阶段,由于工具执行而获得了更多信息,为下一个逻辑步骤做准备。

如图说明了 ReAct 提示迭代结构中采用的步骤。从系统消息和初始指令作为第一个用户消息开始,进入思考和行动的循环,作为其助手消息和“观测-作为-用户”消息。标记用户消息和助手消息空间,表示策略的哪些部分是由 LLM 生成以及哪些部分是提供外部信息的占位符。

添加图片注释,不超过 140 字(可选)

还实现了 ReAct 提示策略的专版,该策略明确包含一个规划步骤作为迭代序列的一部分。PlanReAct [38] 策略与原始 ReAct 的不同之处在于,它增加了一个步骤,负责创建明确的规划并在每一步重规划。这种提示策略并非旨在取代规划智体,而是通过在原始任务仍然过于复杂的情况下提供额外的任务分解来协同工作。

引入一种称为可编程提示的可配置提示策略,将 ReAct 和 PlanReAct 策略进行概括。该配置将包括一个迭代序列,该序列由预定义的步骤 A…X 组成,其中每个字母代表 LLM 应采取的一个阶段,例如 ReAct 的思考、行动、观察或 PlanReAct 的计划、思考、行动、观察。如图显示了这种通用提示策略:

注:这些策略可能模仿人类的决策策略,例如观察、定位、决定、行动(OODA)、规划、执行、检查、行动(PDCA),或类似衍生和模仿。

添加图片注释,不超过 140 字(可选)

为了全面了解初始指令是如何解决的,需要考虑如何将指令分解为更简单的任务,以及信息如何在工作流中传播。如图的序列框图说明了规划-执行-验证模型中的操作顺序。其中工作流主要从用户传递给协调器的指令开始,协调器协调整个工作流并将最终结果返回给用户。

请添加图片描述

对可靠性的需求促使工作流从单智体推广到多智体。如果 LLM 被指示模仿具有专业知识的某些个性,它们会更可靠地执行专门的任务。LLM 系统提示中的专业知识规范消除了解释给定任务时的任何歧义。这一观察适用于简单的人为驱动交互,并直接转化为基于智体的应用程序。指定智体的个性,重点关注一个狭窄的领域,可以实现更可靠的性能,符合人类的偏好。

在定义一组专门用于解决特定任务的智体后,考虑几种如何编排工作流的策略。这些选择将间接模仿人类针对复杂问题的工作组织。
在多智体工作流的一般情况下,面临三个问题,首先是为给定任务选择智体单元,其次是选择智体来开始执行给定任务的工作,第三是动态选择将在下一次迭代中继续的智体。解决这些问题的关键组件是匹配机制。匹配器是一个通用组件,它使用专用于工作流的标准执行选择,例如迭代匹配、语义匹配或提及匹配。

在规划器创建一组任务后,使用匹配函数来确定哪个智体单元应该解决给定任务。由于每个智体单元由一个或多个智体组成,因此还需要一种机制来为任务执行的每次迭代选择智体。在执行智体提示策略的一次迭代之前,再次调用匹配函数来选择将用于此迭代的智体。
通过组件智体单元和匹配器实现的五种不同多智体工作流策略,这些策略适用于解决复杂任务的“规划-执行-验证”方式,即 1) 独立、2) 顺序、3) 联合、4) 分层和 5) 广播。在每种策略中,仅考虑工作流的执行部分,并假设协调器正在解决以 DAG 形式组织的一组任务。

如图所示是1)和2)的工作流策略示例:
在这里插入图片描述

如图所示是3)和4)的工作流策略示例:

添加图片注释,不超过 140 字(可选)

如图是5)的工作流策略:

添加图片注释,不超过 140 字(可选)

LLM,尤其是其聊天优化版本,本质上是为遵循成对交互而设计的。这种成对交互已被推广,可使用 ReAct [20] 等包含动作/观测对的提示策略实现与外部世界的自动交互。虽然 ReAct 和 PlanReAct 可以与外部函数交互,但它们无法在操作和规划步骤中启用任何对话,例如为实现多智体对话而提出的技术 [12–15, 29]。为了解决这个问题,采用一种旨在推广 PlanReAct 提示并实现多个智体之间动态对话的策略,如图所示。

添加图片注释,不超过 140 字(可选)

选择基于 ReAct 的迭代方法有几个原因。首先,ReAct 循环提供了一种稳定的执行模式,LLM 在连续迭代中可靠地遵循该模式。其次,它实现了动作/观测的自然形式和执行外部函数的能力。第三,迭代序列对小偏差具有弹性,例如在观测阶段缺少新数据或使用“Continue”语句而不是提供其他信息。第四,将 ReAct 推广到 PlanReAct 使其能够执行具有更长执行序列的更复杂的任务。

在多智体策略中,需要考虑一种在任务执行过程中向智体提供人工反馈的方法。从自主智体工作的角度考虑两种类型的人工反馈:有意的和偶然的。

示例应用给出三个:QA、文本编辑和编码。

检索增强生成 (RAG) 系统已被证明是一种很有前途的解决方案,可以为 LLM 带来更多信息。RAG 方法对工业应用特别有益,因为它们为内部知识提供了解决方案,而无需微调或重新训练 LLM。这确保了模型可以始终以最少的维护访问相关信息,以实现生产部署。已经提出了许多 RAG 算法来改进简单的 RAG 方法。在这个例子中,专注于基于智体问答系统 RAG 方法的实现:单智体系统

请添加图片描述

通过两个智体(Editor 和 Critic)编辑文档,遵循参与者/评论家执行模型。不使用 Planner 智体,而是执行已预定义的规划,作为编辑文档的一组规则。这组规则将转换为具有线性依赖关系的任务,并一个接一个地执行:

请添加图片描述

软件开发工作流从传递给规划器智体的用户请求开始,创建一组填充任务队列的任务。智体单元由三个具有不同职责的智体组成:1) 编码员使用文件 I/O 工具负责所有软件工程任务,2) 架构师使用 Web 搜索工具创建开发架构,3) 测试员使用代码执行工具负责测试代码。所有智体都知道其他智体的存在和专业知识。智体单元通过语义和提及匹配功能的组合进行迭代,选择下一个智体。语义匹配器为给定任务选择最合适的智体,提及匹配器确保通过消息传递正确执行对话策略。

请添加图片描述

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布时滞是指在多智体系统中,由于通信传输的延迟或者计算时间等因素导致不同智体之间的信息传递存在一定的时间差。这种时滞在多智体系统的控制中是非常常见的,因为它会影响系统的稳定性和性能。 在Matlab中,可以使用一些工具箱或者自己编写程序来模拟含时滞的多智体一致性分析。以下是一个简单的例子,其中有两个智体,它们之间的通信存在时滞。 ```matlab % 定义系统参数 n = 2; % 智体数目 A = [1 1; 1 -1]; % 系统矩阵 B = [0.5 0; 0 0.5]; % 输入矩阵 C = [1 0; 0 1]; % 输出矩阵 D = zeros(n); % 直通矩阵 tau = 0.5; % 时滞 % 定义控制器参数 K = [1 0; 0 1]; % 控制器增益矩阵 L = [0.5 0; 0 0.5]; % 时滞补偿矩阵 % 定义状态空间模型 sys = ss(A-B*K-L*C,B,C,D); % 定义时滞状态空间模型 sys_tau = pade(sys,tau); % 定义初始状态 x0 = [1; 1]; % 模拟系统响应 tspan = 0:0.1:10; [u, t] = gensig('square', 10, tspan(end), 0.1); [y, t, x] = lsim(sys_tau,u,t,x0); % 画出系统响应曲线 subplot(2,1,1); plot(t, y(:,1), 'r', t, y(:,2), 'b'); legend('智体1', '智体2'); xlabel('时间'); ylabel('输出'); title('含时滞多智体一致性分析'); subplot(2,1,2); plot(t, x(:,1), 'r', t, x(:,2), 'b'); legend('智体1', '智体2'); xlabel('时间'); ylabel('状态'); title('含时滞多智体一致性分析'); ``` 代码中包含了一些基本的矩阵运算和Matlab内置函数,主要实现了以下几个步骤: 1. 定义系统矩阵A、输入矩阵B、输出矩阵C和直通矩阵D,以及时滞参数tau; 2. 定义控制器增益矩阵K和时滞补偿矩阵L; 3. 根据系统参数和控制器参数定义状态空间模型,使用pade函数将其转换为时滞状态空间模型; 4. 定义初始状态x0,并使用lsim函数模拟系统响应; 5. 画出系统响应曲线。 需要注意的是,本例只是一个简单的示例,实际的多智体一致性分析可能会更加复杂。同时,时滞的大小和分布方式也会对系统的稳定性和性能产生影响。因此,在实际应用中,需要根据具体情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值