[论文] 阿里提出AgentScope:灵活强大的智能体框架
发布时间:2024年07月23日
大型语言模型(LLMs)的快速发展是的多智能体(Multi-Agent)应用取得了显著进展。然而,协调智能体合作的复杂性以及 LLMs 不稳定的表现为开发健壮且高效的多智能体应用方面带来了显著挑战。为了应对这些挑战,本文提出了AgentScope:一个以消息交换为核心通信机制的多智能体平台。结合丰富的语法工具、内置资源和用户友好的交互,AgentScope 的通信机制显著降低了开发和理解的障碍。为了实现健壮和灵活的多智能体应用,AgentScope 提供了内置和可定制的容错机制,同时也具备系统级支持多模态数据生成、存储和传输的能力。此外,本文设计了一个基于 actor 的分布式框架,使得本地和分布式部署之间的轻松转换以及自动并行优化成为可能,无需额外努力。通过这些特性,AgentScope 赋予开发者构建充分发挥智能代理潜力的应用程序的能力。作者已经在https://github.com/modelscope/agentscope[1]发布了
AgentScope,并希望 AgentScope 能够邀请更广泛的参与和创新,在这个快速发展的领域中发挥作用。
Introduction
多智能体系统与单智能体系统不同,需要多个智能体协同工作。随着大型语言模型(LLMs)的发展,多智能体应用在研究和工业界都取得了巨大进展,包括软件工程、社会模拟和智能助手。尽管在多智能体场景中取得了显著进展,多智能体应用开发仍面临一些主要挑战。
开发多智能体应用的复杂性显著增加。与单智能体设置不同,多智能体场景下的开发需要仔细创建和管理多个模型和智能体。这对平台的通用性和易用性提出了高要求。特别是,多智能体应用中的智能体可以通过不同的初始配置专门执行不同的功能;多智能体应用可能要求智能体按照标准化操作程序(SOP)或更动态的工作流程执行;智能体之间的通信模式可能从一对一到广播(例如,智能体的讨论组)不等。因此,从开发者的角度来看,他们希望有一个易于使用的平台,能够在处理所有这些方面时提供简洁明了的编程模式,加速和简化开发周期。
然而,同时实现通用性和易用性需要精心设计和权衡。在多智能体系统中,异常情况是潜在的风险点。尽管大型语言模型发展迅速,但它们仍然面临幻觉和指令遵循不足等问题。此外,智能体可以配备各种工具,但这些工具引入了额外的不确定性(例如,对数据库或互联网的可访问性)。从多智能体系统鲁棒性的角度来看,单个意外的错误或响应可能会传播到整个系统,如果处理不当,可能会引发一系列连锁效应。因此,对于多智能体应用来说,自主检测和处理来自 LLMs 的错误响应至关重要。虽然 LLMs 可能协助识别和管理这些错误,但确定它们是否能够自行解决问题并自动提供纠正错误的信息仍然是一个挑战。因此,在多智能体应用开发中,设计包含 LLMs 的容错系统是一个关键挑战。
多智能体应用的另一个挑战是多模态数据的兼容性。越来越多的智能体或
LLM 应用针对多模态内容生成。在多智能体应用中支持多模态数据需要一种全面和系统化的方法。这包括对数据存储、呈现、用户交互、消息传输和通信等方面的考虑。然而,满足这些要求带来了新的挑战,包括确保不同格式间的数据一致性、在数据传输和智能体通信过程中保持高性能,以及避免为开发者和用户引入复杂概念。尽管有针对特定应用的解决方案,但目前还没有通用的平台级编程接口来支持多模态应用。
分布式应用带来了额外的编程困难和系统设计挑战。多智能体应用的工业导向场景是,智能体由不同组织拥有并在不同机器上运行,因为智能体配备了独特的私有知识或专利工具。为了支持这样的应用,通常需要应用开发者在设计阶段具备分布式系统编程和优化的专业知识。此外,分布式应用通常需要在开发和测试过程中付出额外的努力,特别是在调试和诊断分布在分布式过程或智能体中的问题时。此外,集成高级功能,如多模态数据处理,在分布式环境中带来了额外的挑战,当智能体需要不同的时间来完成子任务或生成的内容非常异构时。糟糕的设计决策可能导致智能体之间的通信开销过大。因此,对于开发者来说,有效地解决这些问题以确保有效的系统运营是一个挑战。
为了应对这些挑战,本文引入了 AgentScope,这是一个为开发者设计的新型多智能体平台,旨在解决上述问题。AgentScope 的设计重点在于易用性、鲁棒性和效率。 AgentScope 有特点:
·对开发者的卓越易用性:AgentScope 特别注重易用性,尤其是对于具有不同专业水平的开发者。通过实施面向过程的消息交换机制,AgentScope 确保了平滑的学习曲线。为了进一步减轻编程负担,AgentScope
提供了广泛的语法工具,包括各种管道和信息共享机制。结合丰富的内置资源和集成的用户交互模块,AgentScope
使编程多智能体应用比以往任何时候都更加愉快。
·针对不同 LLMs 和 APIs 的鲁棒容错:随着模型和 APIs 的规模和范围的扩大,多智能体应用中的鲁棒容错机制变得至关重要。AgentScope
集成了全面的服务级重试机制,以维护 API 的可靠性。AgentScope
配备了一套基于规则的校正工具,以处理 LLMs 响应中的一些明显格式问题。此外,AgentScope 提供了可定制的容错配置,使开发者能够通过参数(如
parse_func、fault_handler 和
max_retries)定制自己的容错机制。虽然诚然,不是所有的错误都可以通过上述机制处理,但本文提出了一个针对多智能体应用的定制日志系统作为 AgentScope 的最后保障。
·多模态应用的广泛兼容性:随着大规模多模态模型的显著进展,AgentScope
支持多模态数据(例如文件、图像、音频和视频)在对话呈现、消息传输和数据存储中的使用。具体来说,AgentScope
通过消息中的统一 URL-based 属性解耦了多模态数据传输和存储。在消息传输过程中,AgentScope 只将 URL 附加到消息上,从而最小化了每个智能体内存中消息副本引起的内存使用。这种策略确保多模态数据仅在必要时加载,例如在 Web UI 中呈现或由模型包装器调用时。优化分布式多智能体操作的效率:认识到分布式部署的重要性,AgentScope 引入了基于 actor 的分布式机制,使得复杂分布式工作流的集中式编程和自动并行优化成为可能。特别是,本地和分布式部署的工作流完全相同,表明在迁移应用程序到集中式和分布式环境之间几乎没有开销。有了这样的分布框架,AgentScope 赋予开发者专注于应用设计而不是实现细节的能力。
总结来说,本文的 AgentScope 多智能体平台提供了一套面向过程的消息交换机制,并配备了一套语法特性,以促进多智能体编程;AgentScope 的容错设计使开发者能够优雅地处理应用程序中的错误;对多模态应用的支持减少了异构数据生成和传输的开销;AgentScope 基于 actor 的分布式模式可以帮助无缝开发高效可靠的分布式多智能体应用。
概览
▶AgentScope 中的基本概念
本节介绍了 AgentScope 中的主要概念:消息、智能体、服务和工作流。这四个概念贯穿于整个平台,并且所有基于它的多智能体应用都是围绕这些概念构建的。
·消息(Message):消息作为多智能体对话中信息交换的载体,封装了信息的来源和内容。在 AgentScope 中,消息被实现为具有两个必填字段(名称和内容)以及一个可选字段(url)的 Python 字典。名称字段记录生成消息的智能体的名称,内容字段包含智能体生成的基于文本的信息。url 字段旨在保存统一资源定位符(URL),通常链接到多模态数据,如图像或视频。包含此字段的消息对于与能够处理和生成多模态内容的智能体的交互特别相关。示例 1 展示了如何在 AgentScope 中创建消息,这些消息作为 AgentScope 智能体间通信的基本单元。
·智能体(Agent):智能体是多智能体应用中的主要参与者,充当对话参与者和任务执行者。在 AgentScope 中,智能体行为通过两个接口抽象:回复和观察功能。回复功能以消息为输入并产生响应,而观察功能处理传入的消息而不生成直接回复。智能体和消息之间的相互作用,如示例 2 所示,构成了 AgentScope 的操作基础,并且对于开发者在多智能体 LLMs 中建模复杂交互至关重要。
·服务(Service):AgentScope 中的服务指的是使智能体能够执行特定任务的功能 API。这些服务分为模型 API 服务,作为使用 LLMs 的渠道,以及通用 API 服务,提供各种工具功能。将这些服务集成到智能体中是执行广泛任务的关键,特别是当与可能需要外部数据或计算服务的 LLMs 接口时。
·工作流(Workflow):工作流代表智能体执行和消息交换之间的有序序列,类似于 TensorFlow 中的计算图,但具有适应非 DAG 结构的灵活性。工作流定义了智能体之间的信息流和任务处理,促进并行执行和效率提升。这个概念对于设计与 LLMs 交互的多智能体系统至关重要,因为它允许协调复杂、相互依赖的任务。
▶AgentScope 的架构
本文将 AgentScope 呈现为一个基础设施平台,以促进与 LLMs 集成的多智能体应用的创建、管理和部署。AgentScope 的架构包括三个层次的层次结构,如图 1 所示。这些层次为多智能体应用提供不同层次的支持,包括单个智能体的基本和高级功能(实用层)、资源和运行时管理(管理和包装层)以及智能体级别到工作流级别的编程接口(智能体层)。AgentScope 引入直观的抽象,旨在满足每个层次固有的多样化功能,并简化构建多智能体系统时复杂的层间依赖关系。此外,AgentScope 还提供了编程接口和默认机制,以加强多智能体系统在不同层次内对故障的韧性。
实用层(Utility Layer):作为平台的基础,AgentScope 的实用层提供了支持智能体核心功能的基本服务。这一层抽象了底层操作的复杂性,例如 API 调用、数据检索和代码执行,允许智能体专注于它们的主要任务。AgentScope
的实用层以易用性和鲁棒性为最高优先级设计,支持多智能体系统中的多种操作,并提供内置的自主重试机制,用于异常和错误处理,以应对意外中断。
管理和包装层(Manager and Wrapper
Layer):作为中介,管理和包装抽象层管理资源和 API 服务,确保资源的高可用性,并提供抵抗 LLMs 不良响应的能力。与提供默认处理程序的实用层不同,管理和包装层还根据开发者的需求和应用的具体要求提供可定制的接口,以进行容错控制。这一层负责维护智能体的操作完整性,这对于 LLMs 在多样化条件下一致地执行任务至关重要。
智能体层(Agent Layer):AgentScope 的核心是智能体抽象,它构成了多智能体工作流的主干,是负责交互和通信的主要实体。这一层旨在促进复杂工作流的构建,并提高易用性,减轻开发者的编程负担。通过集成简化的语法和工具,AgentScope 赋予开发者专注于实现和优化基于 LLMs 能力的智能体应用的能力。第 3 节将更详细地介绍编程特性和语法糖。
用户交互(User interaction):除了分层架构之外,AgentScope 还提供了面向多智能体的接口,如终端和 Web UI。这些接口允许开发者轻松监控应用的状态和指标,包括智能体通信、执行时间和财务成本。
总的来说,AgentScope 的分层结构为开发者提供了构建定制多智能体应用的基本构建块,这些应用利用了大型语言模型的先进能力。接下来的章节将深入探讨 AgentScope 的特性,这些特性增强了多智能体应用开发中的编程体验。
高可用性在 AgentScope 中
AgentScope 的设计优先考虑可用性,旨在简化与 LLMs 的多智能体开发过程,并确保对用户和开发者都流畅的交互体验。本节将深入探讨 AgentScope 如何通过引入直观的概念和特性来简化学习曲线,并通过这些特性来促进创建复杂的多智能体应用。
▶多智能体工作流的语法糖
利用第 2.1 节中介绍的基本概念,开发者可以构建复杂的多智能体应用。然而,直接编写每个智能体的消息交换可能会变得繁琐,如示例 3 所示。
认识到这一点,AgentScope 引入了两个语法工具:管道和消息中心,以抽象化复杂性并最小化重复。
Pipeline
Abstraction:管道抽象通过将消息传输的模式(包括顺序、条件和迭代交换)封装成简单、可重用的组件,减少了重复编码。有了管道,开发者可以专注于智能体交互的逻辑,而不是样板代码。示例 4 说明了如何在 AgentScope 中使用顺序管道以函数式和面向对象风格创建清晰、简洁的智能体工作流。除了示例中的顺序管道外,AgentScope 还提供了 if-else、switch、while-loop 和
for-loop 管道,以促进多智能体交互的编程。
Message Hub
for Agent Communication:在多智能体系统中,尤其是与 LLMs 集成时,有效管理智能体之间的通信至关重要。AgentScope 中的消息中心充当广播机制,简化了组交互。开发者可以通过定义参与的智能体并包含初始广播消息来启动消息中心。当智能体在消息中心内生成新消息时,它们会自动传播给其他参与者,如示例 5 所示。这种抽象对于涉及 LLMs 的多智能体场景特别有用,其中动态和情境丰富的对话很常见。
▶资源丰富的环境支持智能体开发
为了进一步提高可用性,AgentScope 配备了丰富的内置资源,包括服务、专用智能体和预配置的示例。这些资源旨在减少初始设置工作量,并实现多智能体 LLM 系统的快速原型制作和部署。
Comprehensive
Service Integration:AgentScope
集成了各种服务,如网络搜索、数据库查询和代码执行,以支持智能体的能力。这些服务对于构建具有 LLMs 的有用智能体至关重要,因为它们通常需要从外部来源获取信息或执行超出装备的 LLMs 内部知识的任务。示例 6 展示了如何将服务无缝转换为 OpenAI 兼容的 JSON 格式,简化了开发者的集成过程。
Pre-built
Agent Templates:如表 1 所列,AgentScope 提供了预构建的智能体和即用组件,用于对话管理、用户代理、多模态数据处理等任务。
▶面向多智能体的交互接口
此外,AgentScope 引入了为多智能体系统量身定制的交互接口,如图 2、图 3 和图 4 所示。这些接口提供了丰富的多模态体验,对于处理多样化数据类型的 LLMs 系统至关重要。
Agent
Differentiation in User Interfaces:为了便于用户与多个智能体交互,AgentScope 为每个智能体分配了独特的颜色和图标,增强了终端和 Web UI 中的清晰度和视觉区分。"第一人称视角"功能允许用户从指定智能体的视角体验交互,与其在应用中的角色相一致,例如在游戏中的场景。这一功能不仅丰富了多智能体体验,而且反映了 LLM 系统中人-智能体和智能体-智能体对话中发生的微妙交互。
Monitoring and
Cost Management:在大规模部署 LLMs 时,资源管理是一个重要方面。AgentScope 包括一个监控模块,用于跟踪模型和 API 使用情况,以及计算财务成本。开发者可以自定义指标并设置预算限制,在达到或超过阈值时接收自动警报。这种主动的成本管理对于可能产生高计算费用的 LLMs 尤为重要。
总的来说,AgentScope 提供了一个环境,开发者可以在其中高效地构建和部署容错的多智能体 LLM 应用。通过提供语法抽象、丰富的资源池和多智能体交互接口,AgentScope 确保了多智能体系统的复杂性被抽象化,允许开发者专注于创造创新的解决方案。
支持容错机制
在多智能体系统的领域中,尤其是那些与多样化的开源大型语言模型(LLMs)接口的系统,容错性是确保无缝操作的关键属性。AgentScope 旨在通过一个全面的容错基础设施来自动处理各种错误,该基础设施深刻理解多智能体协调和 LLM 依赖性所涉及的复杂性,并且最小化所需的人为干预。
错误分类和处理策略:此方法从将错误分为不同级别开始,每个级别都有量身定制的处理策略:
·Accessibility errors:在 AgentScope 中,智能体的功能依赖于不同类型的服务,但这些服务可能会受到暂时性的不可访问错误的影响。这些错误可能是由模型不稳定或网络条件引起的。例如,模型 API 可能在高峰时段因交通拥堵而返回超时错误,或者由于远程机器的网络中断而无法访问数据库。
·Rule-resolvable errors:由于许多多智能体应用需要服务或智能体之间的信息交换,因此遵循这些通信的协议非常重要,例如 JSON 格式。然而,由于 LLMs 的响应还不完全可控,它们的返回可能不遵循提示中要求的格式。例如,我们可能期望从 LLM 获得 JSON 格式的响应,但在返回字符串的末尾遗漏了一个右大括号,导致解析失败。
·Model-resolvable errors:当多智能体系统处理一些复杂任务时,智能体理解输入、做出决策和提供输出的能力主要取决于 LLMs 的能力。在某些情况下,LLMs 的响应处于预期格式中,但内容存在问题,例如参数错误、语义错误或编程错误。很难为多样化任务制定规则来规范这些响应,但也已经表明,这些错误可能通过与 LLMs 的进一步交互来检测和恢复。
·Unresolvable errors:最终,必须有一些无法检测或解决的错误。一个典型的例子是 LLM 的 API 密钥已过期或未授权。依赖它的智能体或系统无法解决此类错误。
容错机制:AgentScope 提供了不同的机制来应对上述错误。
·基本的自动重试机制:为了对抗可访问性错误,AgentScope 的 API 服务和模型包装器都加强了重试逻辑,开发者可以自定义,例如设置最大重试次数。这确保智能体可以从偶然的中断中恢复,并保持其操作连续性。
·基于规则的校正工具:AgentScope
引入了基于规则的校正工具,以高效和经济地处理 LLMs 响应中的一些易于修复的格式错误。例如,作者在 AgentScope 中建立了一组默认规则,可以完成不匹配的大括号,并从字符串中提取
JSON 数据。这种基于规则的校正工具可以在不再次调用 LLM API 的情况下纠正一些常见的规则可解决错误,这意味着处理时间更短,没有 LLM API 调用成本。
·可自定义的错误 handlers:AgentScope 还在模型包装器中集成了灵活的故障处理程序接口,供开发者定义如何处理
LLMs 的响应以及处理意外输出。应用开发者可以通过提供解析函数、故障处理函数和给 LLMs 的机会数量(通过可配置参数 parse_func、fault_handler 和 max_retries)来配置他们的故障处理机制。通过这种开发者友好的设计,AgentScope
可以配置性地强大,以应对规则可解决错误(当内置规则无法处理时)和一些模型可解决错误(可以由单个智能体检测和处理,例如,将冗长的摘要提炼为更简洁的版本)。
·Agent 级别的故障处理:有一些模型可解决的错误需要更高级的 LLM 使用或智能体级别的交互才能恢复。例如,检测语义错误(通常包括事实不准确、逻辑不一致、上下文不连贯、推理不合理和使用不当的词汇)是具有挑战性的,因为它们可能不会在系统现有的验证流程中立即引发红旗。开发者可以利用 AgentScope 中的智能体能力(例如,记忆模块和消息中心)来进行语义错误检查,如自我批评、成对批评和人工增强批评。
·日志系统。尽管无法解决的错误对于系统来说太棘手,AgentScope 提供了一个改进的日志系统,供开发者快速监控和识别多智能体应用中的问题。AgentScope 中的日志系统具有针对多智能体应用场景的定制功能,包括添加一个名为
CHAT 的日志级别,用于记录智能体之间的对话,提供格式化的日志和各种执行信息,以及一个 WebUI 用户界面,以便于监控。
支持多模态应用
多模态数据的整合对于推进多智能体与 LLMs 的能力和应用至关重要。AgentScope 旨在无缝支持各种数据模态,利用当代 LLMs 能够处理和产生的多样化输入和输出。
多模态数据的管理:在 AgentScope 应用中,多模态数据的生命周期被仔细管理。这包括多模态数据的生成、传输和存储——所有这些都是通过使用 URL 和本地文件管理系统的解耦架构来实现的。图 2 示例了这一过程,包括来自用户输入或模型生成的数据、数据存储和检索以及数据共享。
·
多模态数据生成:在 AgentScope 中,多模态数据有两个主要来源。一个来源是简单的本地存储的多模态文件,这些文件可以被用户代理智能体或具有访问本地文件系统权限的一般智能体使用。另一个来源是模型模态内容生成模型。AgentScope 的模型 API 和模型包装器集成了最受欢迎的多模态模型,例如 OpenAI 的 DALL-E 这样的文本到图像内容生成模型,以及相反的图像到文本图像分析模型,例如 GPT-4V。除了内置的 API,开发者还可以引入他们喜欢的多模态模型并自定义自己的模型包装器,使用本文的即用示例作为起点。这种定制过程在 AgentScope 中被简化,并且受益于作者的模块化设计,允许开发者以最小的努力连接他们的多模态服务。
·
·
多模态数据存储:正如上面提到的,多智能体应用中的多模态数据可以是来自即用本地文件,或者是通过多模态模型生成的。当一个多模态模型包装器被调用以生成多模态数据时,它首先在本地保存数据,并在从模型 API 服务接收到多模态数据时返回一个本地 URL。
·
·
多模态数据传输:AgentScope 通过允许智能体在多模态消息中封装本地或远程 URL 来简化智能体之间的多模态数据共享,这些 URL 指示数据的实际存储位置。接收智能体在准备处理这些数据时可以通过 URL 加载多模态数据。
·
引入 URL 到消息中的好处有三方面。1)它可以最小化消息大小,避免因网络带宽而潜在的错误或延迟,并使接收智能体能够按需加载数据。2)如果消息中还有其他文本信息,下游智能体可以潜在地优先处理文本信息和多模态信息的处理。3)这样的 URL 附加消息还可以促进多模态数据演示,这将在下一节中介绍。
多模态交互模式:通过实现 URL 附加消息,AgentScope 赋予用户通过可访问的接口(如终端和 Web UI)与多模态系统交互的能力。图 4 展示了用户在交互模式中与多模态数据交互的能力。在终端中,用户可以通过激活提供的 URL 方便地访问本地存储的数据。Web UI 进一步增强了用户体验,提供了一个直观的平台来查看和分析多模态内容,符合现代 Web 应用的期望。
通过 AgentScope,开发者可以定制模型 API 服务和包装器以满足他们的个人需求,锻造能够处理多样化数据模态的应用程序,并为用户提供必要的工具与多模态智能体有效互动。这种对多模态应用的全面支持使 AgentScope 成为一个多功能而强大的框架,利用多智能体 LLMs 的全部潜力,为开发者和研究人员在创建复杂和互动的 AI 系统中拓宽了视野。
基于 actor 的分布式框架
效率和可扩展性在构建多智能体系统的工业级应用时至关重要。多智能体应用中的智能体的推理速度可能会有显著差异。例如,假设一个多模态应用中的智能体采用了文本到视频的模型,那么它的响应时间可能比设计用来填充故事细节的智能体要长得多。为了提升效率,应该引入并行化的概念。此外,多智能体应用可能包括物理分布在不同机器上的智能体。一个典型的用例是,一家公司可以将其专利技术或私有知识库封装到一个智能体中,并通过互联网连接到本地机器,通过智能体交互为其他实体提供自主服务。
然而,当涉及到多智能体系统时,一个挑战是开发者需要在以下两对技术路线图中做出选择。因为没有免费的午餐,任何组合都有其优点和缺点。
·
集中式与去中心化协调:在分布式系统的背景下,集中式协调意味着多个计算节点由一个中心节点管理,例如服务器-客户端模型。具有集中式协调的多智能体机制意味着智能体的执行由中心协调组件调度,智能体之间的消息由中心组件转发。相反,去中心化协调不依赖于任何中心组件来调度或转发消息,但这种系统中的智能体可以自动被调用,并直接向下游智能体发送消息以进行进一步处理。
·
尽管集中式协调是一种直接易懂且易于调试的风格,但其缺点包括对中心节点故障的脆弱性、对中心节点造成沉重流量负担,以及在扩展或扩展到复杂应用方面的困难。相比之下,去中心化协调可能需要额外的开发和维护工作,但对任何单个节点的故障具有更高的鲁棒性。
·
·
静态与动态工作流设计:在静态计算图(如 TensorFlow 的早期版本中使用)和动态计算图(如 PyTorch 中使用)之间可以找到类似的比较。在多智能体应用的背景下,静态与动态工作流的选择类似于选择预编译和解释执行之间的区别。静态工作流设计可以启用工作流图级别的优化,以提高运行时间和资源分配。然而,静态工作流设计需要在执行前知道工作流图,这限制了其适应性,尤其是对于设计中包含循环结构的应用。相比之下,动态工作流提供了更大的灵活性,但牺牲了优化潜力。这在处理大型语言模型时特别相关,其中执行路径可以根据输入数据或模型推理结果而改变。
·
AgentScope 中的分布式模式:AgentScope 通过实现基于 actor 的分布式模式来平衡这些技术路线图,该模式考虑了多智能体 LLM 系统的独特需求,具有以下重要特点:
·
无需静态图的自动并行优化:AgentScope 利用 actor 模型实现自动并行优化,允许开发者避免静态图编程的复杂性。这种方法与 LLMs 动态和不可预测的性质无缝对接,其中计算图可以根据不断变化的上下文和对话状态而改变。
·
·
最小复杂性编排工作流:与传统的 actor 模型和 P2P(点对点)实现相比,AgentScope 简化了工作流编程,只需在 Python 函数中使用单一的过程风格。这种设计显著降低了开发者的学习曲线,使构建复杂的多智能体 LLMs 变得更加容易。
·
·
混合本地和分布式智能体支持:AgentScope 的灵活性扩展到支持混合模式,其中一些智能体在本地运行,而其他智能体是分布式的。当集成计算要求不同的 LLMs 时,这一特性特别有益,允许资源密集型模型分布,而需求较少的智能体保持本地,所有这些都不会要求开发者在实现过程中区分两者。
·
具体来说,我们可以简要描述 AgentScope 如何将 actor 模型纳入其中,如下所示。在这个概念框架中,“actor”作为一个独立的实体,在接收到所有必要的消息后进行计算处理。这种范式确保每个智能体(对应于 actor)只有在所需的输入消息准备好后才会参与计算,从而实现自动并行优化。
然而,基于 actor 模型的工作流提出了一个编程挑战:在 actors(即智能体)之间传递的变量(即消息)在开始时可能是占位符,没有任何实际意义。为了缓解这个问题,AgentScope 引入了“占位符”消息,这是一种新的数据结构,允许主进程在不阻塞的情况下继续进行,同时保留稍后检索实际值所需的信息(图 5)。这种机制对于多智能体 LLM 系统特别有利,其中执行流程必须适应语言模型的可变输出。
当在没有实际值的情况下在控制流语句(例如
if-else、循环)中使用占位符时,会出现一系列挑战。示例 7 展示了一个例子,其中需要一个占位符来做出决策。在这种情况下,AgentScope 暂时阻塞进程以检索其实际值,从而确保控制流的连续性。
AgentScope 中的基于 actor 的分布式模式不仅提供了自动并行优化和简化了开发者体验,而且还展示了对分布式多智能体 LLM 应用的高效率。它使开发者能够专注于实现智能体逻辑,特别是“回复”功能,而不必担心底层分布式复杂性。这种简化的分布式多智能体系统方法可以通过使开发、运行和调试复杂且可扩展的多智能体架构变得更容易,从而推动 LLMs 领域的发展。
应用
AgentScope 作为一个多智能体平台,专为以用户友好和容错的方式整合和协调大规模模型而优化。凭借上述章节中提到的特性,AgentScope
是各种应用的理想平台。这些应用范围从简单的对话到复杂的规则游戏(如狼人杀),再到涉及多台机器并行操作的分布式对话。在本节中,作者将详细探讨 AgentScope 的三个主要应用,每个实例都展示了框架的独特能力。所有在此提到的示例都可以在 GitHub 仓库中找到,供社区使用和贡献。
▶独立对话
AgentScope 的基本应用在于促进独立对话,其中所有智能体都在主进程中运行。这个用例为新用户提供了一个极好的起点,让他们可以熟悉框架的基本功能。启动应用程序的第一步涉及初始化智能体对象。在这个例子中,我们使用 AgentScope 内置的两个智能体,DialogAgent 和 UserAgent,来促进用户和 AI 助手之间的对话。在实例化这些智能体之前,必须通过 AgentScope 的 init 接口加载模型配置。目前,AgentScope 兼容多种平台,包括标准的 OpenAI 聊天、嵌入和 DALL-E API,HuggingFace 和 ModelScope 推理 API,以及使用 FastChat、vllm 或
Flask 本地托管的模型。此外,init 接口还允许指定文件存储目录、存储选项、日志级别和智能体配置等。设置模型配置后,开发者可以使用其各自的模型实例化智能体,如示例 8 所示。随后,可以通过交换智能体之间的消息构建对话。具体来说,对话过程被设计成一个循环,允许持续互动,直到用户选择结束对话。示例 9 展示了在 AgentScope 中的基本实现。
为了迎合更高级的应用,AgentScope 整合了管道来管理消息交换,从而为复杂的智能体交互提供了一个结构化和可扩展的框架。这里,这个独立对话应用的实现可以通过顺序管道和循环管道来简化,如示例 10 所示。此外,附录 A 通过运行上述代码展示了对话历史。
▶狼人杀
在更复杂的应用中,本小节展示如何在
AgentScope 中使用大约一百行代码编写狼人杀游戏的工作流。狼人杀是一个社交推理游戏,其中六名玩家分为两个对立的团队:狼人和村民。当所有狼人被消灭时(村民胜利),或者狼人的数量等于或超过村民时(狼人胜利),游戏结束。设置游戏涉及角色分配和智能体初始化。AgentScope 支持使用预设的智能体配置快速启动,其中包含了实例化智能体对象所需的参数。
▶分布式对话
允许分布式智能体是 AgentScope 最引人注目的特点之一。本小节中将详细说明如何在两种模式下设置分布式应用:单台机器多进程模式和多台机器多进程模式。在单台机器多进程模式下,所有智能体都在一台机器上部署,每个智能体运行在单独的进程中。为了比较,作者实现了与独立对话相同的示例,但将助手智能体部署在自己的进程中。示例 13 展示了完整的代码,其中唯一的区别是从本地部署中调用 to_dist 函数。随后,智能体在本地主机上部署,并自动分配端口。除此之外,单台机器多进程模式与本地部署本质上相同,但已优化以进行并行执行。相比之下,多台机器多进程模式要求开发者在远程机器上启动智能体服务。示例 14 展示了在远程机器上启动 DialogAgent 的示例,示例 15 详细阐述了如何在多台机器多进程模式下构建工作流。在这种情况下,开发者必须使用指定的 URL 和端口连接到智能体服务器,然后构建工作流。与单台机器多进程模式类似,工作流的代码与本地部署相同。
总之,此框架使分布式部署能够使用与本地部署相同的工作流构建,从而简化了分布式应用的开发,并促进了从本地到分布式模式的无缝过渡。
相关工作
AgentScope 的发展与利用大型语言模型(LLMs)创建语言智能体和多智能体系统的快速发展环境相一致。这里简要介绍了与 AgentScope 密切相关的两个子领域的相关工作:语言智能体框架,重点关注单个智能体的能力,以及多智能体框架,强调多个智能体之间的协作。有关更广泛的相关工作,读者可以参考(Wang 等人,2023 年;Xi 等人,2023 年)。
语言智能体框架:对于开发能够解释和使用人类语言的应用程序至关重要。Transformers 库(Huggingface,2023 年)在其最近的更新中引入了一个自然语言 API,以与其 transformer 模型接口(Transformers-Agents)。这个 API 使用一套可定制的工具,允许模型解释指令并相应地生成代码片段。它支持各种开源和专有模型端点,迎合了开发者的多样化需求。LangChain(Langchain-AI,2023 年)提供了一个框架,用于构建具有上下文感知和推理能力的应用程序。它包括库和模板,促进将多个组件集成到统一的认知架构中。LangServe 和 LangSmith 通过使框架能够作为 REST API 部署并提供开发者工具来调试和监控基于任何 LLM 框架构建的链,扩展了框架的能力。AutoGPT(AutoGPT-Team,2023 年)展示了一种不同的方法,允许 LLM 迭代执行操作并做出决策。作为一种通用智能体,AutoGPT 不是特定任务的;它旨在执行各种基于计算机的任务,反映了 LLMs 的适应性。ModelScope-Agent(Li 等人,2023 年)是一个可定制的智能体框架,利用开源 LLMs 执行任务并与外部 API 连接。它促进了与模型 API 和常见 API 的无缝集成,并提供了一个全面的基础设施,用于数据收集、工具检索和定制模型训练,旨在实现实际的现实世界应用。
多智能体框架:在个体智能体的能力基础上,多智能体框架探索了多个智能体之间的协作和互动,以解决复杂任务。
·AutoGen(2023)提供了一个通用的基础设施,允许开发者使用自然语言和代码编程交互模式。这个框架通过促进可定制的智能体之间的对话,可以利用各种 LLMs、人类输入和工具的组合,从而促进了多样化应用程序的开发。
·MetaGPT(2023)通过将标准化操作程序(SOP)编码到提示中,加强了多智能体协作。这种方法确保了工作流程的简化和错误的减少,是有效任务分解的一个例子。
·AGENTS(2023)是一个开源库,支持具有规划、记忆和多智能体通信功能自主语言智能体。它旨在对非专家友好,帮助他们部署最先进的语言智能体,并且对研究友好,具有模块化设计,便于扩展。
·OpenAgents(2023)提供了一个开放平台,通过 Web 界面使用具有实用功能的智能体。这个框架强调促进现实世界智能体的互动,并包括专门用于不同任务的智能体,如数据分析和 Web 浏览。
·ChatDev(2023)利用 LLMs 进行软件开发,创建了一个由虚拟聊天驱动的公司,遵循瀑布模型。它在开发过程的不同阶段吸引“软件智能体”,促进协作和上下文感知的通信。
·CAMEL(2023)提出了一个新颖的框架,使用角色扮演技术实现通信智能体之间的自主合作,这允许为研究智能体行为和能力生成对话数据。最后,
·AgentSims(2023)引入了一个沙盒环境,用于在基于任务的场景中评估 LLMs,为研究人员提供了一个基础设施,用于在模拟环境中测试特定 LLMs 的能力。
这些框架代表了在利用 LLMs 进行个体和协作智能体任务方面取得的重大进展。AgentScope 位于此背景下,通过解决对用户友好、容错和多功能框架的需求,旨在管理多智能体 LLM 系统中固有的复杂交互和过程。通过专注于易用性和可靠性,AgentScope 旨在促进跨领域的健壮和多功能应用程序的创建。
结论
本文提出了 AgentScope,这是一个站在多智能体系统开发前沿的平台,将用户中心设计与 LLMs 的先进能力相结合。通过其创新的通信和分布式机制,AgentScope 展示了其提升智能体协作、实现高效、容错运营和多模态交互的潜力。通过抽象复杂性并提供一系列开发工具,AgentScope 大大降低了进入门槛,培养了一个更具包容性和创造力的开发社区。
展望未来,AgentScope 为进一步的研究和开发开辟了众多途径。未来的工作可以深入整合检索增强生成,并探索适应性通信协议和随任务要求发展的交互模式。该平台对加速多智能体系统在各行各业的部署,从医疗保健到客户服务,具有深远的影响,可能导致更智能、更具响应性的技术,增强人机协作。通过 AgentScope,作者也希望邀请更广泛的研究和开发社区在此基础上建立,推动创新,塑造下一代智能多智能体应用。
参考资料
[1]
https://github.com/modelscope/agentscope: https://github.com/modelscope/agentscope
出自:https://mp.weixin.qq.com/s/Yu6FmgHMe3jg0LTAH9GceQ
如果你想要了解关于智能工具类的内容,可以查看 智汇宝库,这是一个提供智能工具的网站。
在这你可以找到各种智能工具的相关信息,了解智能工具的用法以及最新动态。
千象是由智象未来(HiDream.ai)倾力打造的基于国际领先且自主可控生成式人工智能(AIGC)多模态大模型的全中文易上手AIGC创作平台和社区。