人类一直试图构建一个能够自主完成任务的代理或实体,即智能体 (AI Agents 或 Agents)。大型语言模型(LLM)的引入为智能体的构建提供了新的核心组件,让智能体能够理解复杂指令,具有了更广泛的应用场景,智能体也不再局限于处理单一任务的单智能体,能够处理复杂任务的多智能体已成为当前热点。

本文为小伙伴介绍阿里多智能体框架——AgentScope.

1.AgentScope简介

1.1.AgentScope是什么

AgentScope是阿里巴巴于2024年2月开源的一款多智能体(Multi-Agent)开发平台,旨在使开发者能够轻松地构建基于大语言模型的多智能体应用程序。AgentScope提供了一系列的开发工具和组件,支持多模态数据,并引入了分布式机制(通过集中式编程实现复杂的分布式工作流)。

1.2.AgentScope的关键概念

AgentScope框架包含如下四个关键概念:

(1)消息(Message)

  • 消息是多智能体对话中的信息交换载体,承载着信息的来源和内容。

  • 在AgentScope中,消息字典类型,包括namecontent字段,多模态消息还会有url字段。

  • AgentScope官方示例:

image-20241017072749521

(2)智能体(Agent)

  • Agent是能够与环境和其他智能体交互,并采取行动改变环境的自主实体。
  • 在AgentScope中, 智能体以消息作为输入,并生成相应的响应消息。
  • AgentScope官方示例:

image-20241017072835706

(3)服务(Service)

  • 服务是可被智能体调用,帮助智能体执行特定任务的功能性API。
  • 在AgentScope中,服务分为模型API服务(用于使用大语言模型)和通用API服务(提供各种工具函数)。

(4)工作流(Workflow)

  • 工作流描述了多智能体执行的流程序列,它是消息交换的有序序列,用于协作多智能体的工作过程。
  • 通俗理解,工作流类似于TensorFlow中的计算图,也类似于LangChain的LCEL工作流。

1.3.AgentScope的特点

多智能体的应用系统面临众多工程化挑战:

  • 支持创建和管理多个智能体
  • 每个智能体可以调用来自不同厂商的大模型
  • 多智能体支持分布式部署与运行

因此,多智能体框架在易用性、兼容性、性能等方面有极高的要求。

AgentScope作为多智能体框架,具有如下特性:

  • 易用性

    • AgentScope注重开发者体验,提供了灵活易用的语法糖、开箱即用的组件和预构建的multi-agent样例。
  • 鲁棒性

    • 集成了服务级重试机制和规则性修正工具,确保了对多种模型和APIs的容错性。
    • 提供了可定制的容错配置,使开发者能够通过参数来自定义容错机制。
  • 多模态数据支持

    • 支持多模态数据(如文件、图像、音频和视频)的对话展示、消息传输和数据存储。
    • 基于统一的URL属性解耦多模态数据的传输和存储,最大限度地减少了消息在每个智能体的内存使用量。
  • 分布式部署

    • 引入了actor模式,实现了复杂分布式工作流的集中式编程。

1.4.AgentScope的逻辑架构

AgentScope的设计重点在于易用性和鲁棒性,其架构包括三个层级:

  • Utility Layer 实用程序层 :单个智能体的基本和高级功能
    • 提供基本服务来支持代理的核心功能。
    • 抽象了底层的复杂操作,如模型 API 调用和服务功能(包括代码执行和数据库操作)。
    • 提供内置的自主重试机制,用于针对意外中断的异常和错误处理。
  • Manager and Wrapper Layer 管理器和包装层:资源和运行时管理
    • 管理资源和API 服务,确保资源的高可用性并防止来自LLMs的不良响应。
    • 提供用于容错控制的可定制接口。
    • 负责维护代理的操作完整性,提升LLMs在不同条件下的一致性。
  • Agent Layer 智能体层:智能体级到工作流级的编程接口
    • Agent是负责交互和通信的主要实体。
    • 集成简化的语法和工具,减轻了开发者的编程负担。

image-20241016083605408

2.AgentScope应用实例

下面,我们来部署一套AgentScope环境,并通过一个简单的对话示例来介绍AgentScope的基本用法。

2.1.搭建环境

  • 创建python虚拟环境:
1
2
3
4
5
## 创建虚拟环境
conda create -n agentscope python=3.10

# 激活虚拟环境
conda activate agentscope
  • 安装AgentScope和依赖:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
## AgentScope 支持可选依赖如下:
ollama: Ollama API
litellm: Litellm API
zhipuai: Zhipuai API
gemini: Gemini API
service: 不同工具函数的依赖
distribute: 分布式模式的依赖
full: 一次性安装上述所有的依赖,可能耗时较长

## 安装命令格式如下,可选择安装所有依赖:
pip install agentscope[full]

2.2.配置模型

Agentscope内置多种大模型服务API,用户可以通过设定模型配置来指定模型服务。

  • 模型配置:配置模型的名称、类型、路径等信息
1
2
3
4
5
6
7
model_config = {
    "config_name": "{config_name}", 
    "model_type": "openai_chat", 
    "model_name": "{model_name}", 
    "api_key": "xxx", 
    "organization": "xxx", 
}
  • 多智能体使用不同模型,则可配置多个模型
1
2
3
4
5
6
7
# 一次性初始化多个模型配置
openai_cfg_dict = {
    # ...
}
modelscope_cfg_dict = {
    # ...
}

2.3.构建智能体

  • 初始化AgentScope,定义智能体(指定模型、设定角色)
    • 下例中定义了2个智能体:dialogAgent、userAgent
1
2
3
4
5
6
7
8
9
import agentscope
from agentscope.agents import DialogAgent, UserAgent

# 读取模型配置
agentscope.init(model_configs="./model_configs.json")

# 创建一个对话智能体和一个用户智能体
dialogAgent = DialogAgent(name="assistant", model_config_name="gpt-4", sys_prompt="You are a helpful ai assistant")
userAgent = UserAgent()

2.4.执行智能体

  • Message 消息
1
2
3
4
from agentscope.message import Msg
 
x = Msg(name="Alice", content="Hi!")
x = Msg("Bob", "What about this picture I took?", url="/path/to/picture.jpg")
  • 开始对话
1
2
3
4
5
6
7
8
9
x = None
while True:
    x = dialogAgent(x)
    x = userAgent(x)

    # 如果用户输入"exit",则终止对话
    if x.content == "exit":
        print("Exiting the conversation.")
        break

3.总结

本文要点如下:

  • AgentScope是一款多智能体(Multi-Agent)开发平台

  • AgentScope的特点

    • 易用性
    • 鲁棒性
    • 多模态数据支持
    • 分布式部署
  • AgentScope的架构

    • Utility Layer 实用程序层 :单个智能体的基本和高级功能
    • Manager and Wrapper Layer 管理器和包装层:资源和运行时管理
    • Agent Layer 智能体层:智能体级到工作流级的编程接口

参考:https://arxiv.org/pdf/2402.14034