AgentScope 初体验

36 篇文章 5 订阅

1 AgentScope 简介

1.1 什么是AgentScope?

AgentScope是以开发者为中心的多智能体平台,它使开发者能够更轻松地构建基于大语言模型的多智能体应用程序。

特点:
  • 易用性
  • 鲁棒性
  • 支持多模态数据
  • 分布式部署

1.2 关键概念

消息(Message)

是信息的载体(例如指令、多模态数据和对话内容)。在AgentScope中,消息是Python字典的子类, 具有namecontent作为必要字段,url作为可选字段并指向额外的资源。

智能体(Agent)

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

服务(Service)

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

工作流(Workflow)

表示智能体执行和智能体之间的消息交换有序序列,类似于TensorFlow中的计算图, 但其并不一定是DAG结构。

1.3 Why AgentScope?

  • 面向开发者的易用性。 AgentScope为开发者提供了高易用性,包括灵活易用的语法糖、即拿即用的组件和预构建的multi-agent样例。
  • 可靠稳定的容错机制。 AgentScope确保了对多种模型和APIs的容错性,并允许开发者构建定制的容错策略。
  • 全面兼容多模态数据。 AgentScope支持多模态数据(例如文件、图像、音频和视频)的对话展示、消息传输和数据存储。
  • 高效分布式运行效率。 AgentScope引入了基于actor的分布式机制,使得复杂的分布式工作流的集中式编程和自动并行优化成为可能。

1.4 AgentScope代码结构

AgentScope由三个层次的层次结构组成:

  • 包括单个智能体的基本和高级功能(实用程序层)
  • 资源和运行时管理(管理器和包装层)
  • 智能体级到工作流级的编程接口(智能体层)
AgentScope
├── src
│   ├── agentscope
│   |   ├── agents               # 与智能体相关的核心组件和实现。|   ├── memory               # 智能体记忆相关的结构。|   ├── models               # 用于集成不同模型API的接口。|   ├── pipelines            # 基础组件和实现,用于运行工作流。|   ├── rpc                  # Rpc模块,用于智能体分布式部署。|   ├── service              # 为智能体提供各种功能的服务。
|   |   ├── web                  # 基于网页的用户交互界面。|   ├── utils                # 辅助工具和帮助函数。|   ├── prompt.py            # 提示工程模块。|   ├── message.py           # 智能体之间消息传递的定义和实现。|   ├── ... ..|   ├── ... ..
├── scripts                      # 用于启动本地模型API的脚本。
├── examples                     # 不同应用程序的预构建示例。
├── docs                         # 教程和API参考文档。
├── tests                        # 单元测试模块,用于持续集成。
├── LICENSE                      # AgentScope使用的官方许可协议。
└── setup.py                     # 用于安装的设置脚本。
├── ... ..
└── ... ..

1.5 支持的模型API

AgentScope提供了一系列ModelWrapper来支持本地模型服务和第三方模型API。
在这里插入图片描述

1.6 支持的本地模型部署

AgentScope支持使用以下库快速部署本地模型服务。

1.7 支持的服务

  • 网络搜索
  • 数据查询
  • 数据检索
  • 代码执行
  • 文件操作
  • 文本处理
  • 多模态生成
  • 维基百科搜索
  • TripAdvisor搜索
  • 浏览器控制

1.8 样例应用

1.8.1 模型

在AgentScope中使用Llama3

1.8.2 对话

1.8.3 游戏

1.8.4 分布式

2 安装

AgentScope需要Python 3.9或更高版本。建议专门为AgentScope设置一个新的虚拟环境

2.1.0 创建虚拟环境

  • 使用Conda
# 使用Python 3.9创建一个名为"agentscope"的新虚拟环境
conda create -n agentscope python=3.9

# 激活虚拟环境
conda activate agentscope
  • 使用Virtualenv
# 如果尚未安装virtualenv,请先安装它
pip install virtualenv

# 使用Python 3.9创建一个名为"agentscope"的新虚拟环境
virtualenv agentscope --python=python3.9

# 激活虚拟环境
source agentscope/bin/activate  # 在Windows上使用`agentscope\Scripts\activate`

注意:该项目目前正在积极开发中,建议从源码安装AgentScope。

2.1.1 从源码安装

  • 以编辑模式安装AgentScope:
# 从github拉取源代码
git clone https://github.com/modelscope/agentscope.git
# 以编辑模式安装包
cd agentscope
pip install -e .

2.1.2 使用pip

  • 从pip安装的AgentScope
pip install agentscope 
#pip install agentscope --pre -i  https://pypi.tuna.tsinghua.edu.cn/simple

额外依赖

AgentScope 支持可选依赖如下,用户可以根据自己的需求选择安装:

  • ollama: Ollama API

  • litellm: Litellm API

  • zhipuai: Zhipuai API

  • gemini: Gemini API

  • service: 不同工具函数的依赖

  • distribute: 分布式模式的依赖

  • full: 一次性安装上述所有的依赖,可能耗时较长

以分布式模式为例,可以使用以下命令安装AgentScope:

On Windows
# From source
pip install -e .[distribute]
# From pypi
pip install agentscope[distribute]
#pip install agentscope[gemini]
# or
#pip install agentscope[ollama,distribute]
On Mac & Linux
# From source
pip install -e .\[distribute\]
# From pypi
pip install agentscope\[distribute\]

#pip install agentscope\[gemini\]
# or
#pip install agentscope\[ollama,distribute\]

3. 配置

已经将key 设置到环境变量,如果不会就参考:通过API使用通义千问

import os

# 读取环境变量
# DASHSCOPE_API_KEY_text = os.getenv('DASHSCOPE_API_KEY')
# OPENAI_API_KEY_text = os.getenv('OPENAI_API_KEY')
# print(DASHSCOPE_API_KEY_text)
# print(OPENAI_API_KEY_text)

class ModelConfig:
    def __init__(self, config_name, model_type, model_name, generate_args, organization=None):
        self.config_name = config_name
        self.model_type = model_type
        self.model_name = model_name
        self.generate_args = generate_args
        self.api_key = os.getenv('DASHSCOPE_API_KEY')
        self.OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
        self.organization = organization

# 示例配置
configs = [
    ModelConfig(
        config_name="gpt-4-temperature-0.0",
        model_type="openai_chat",
        model_name="gpt-4",
        generate_args={"temperature": 0.0},
        #organization="example_org"
    ),
    ModelConfig(
        config_name="dashscope_chat-temperature-0.1",
        model_type="dashscope_chat",
        model_name="qwen-turbo",
        generate_args={"temperature": 0.1},
    )
]

def get_config(config_name):
    for config in configs:
        if config.config_name == config_name:
            return config
    return None

# 示例调用
# if __name__ == "__main__":
#     gpt4_config = get_config("gpt-4-temperature-0.0")
#     print(f"GPT-4 Config: {gpt4_config.__dict__}")
#
#     dashscope_config = get_config("dashscope_chat-temperature-0.1")
#     print(f"Dashscope Config: {dashscope_config.__dict__}")

3.1 创建Agent

创建AgentScope内置的DialogAgent和UserAgent对象.

from agentscope.agents import DialogAgent, UserAgent
import agentscope

# 加载模型配置
agentscope.init(model_configs= dashscope_config)

# 创建 对话Agent 和 用户Agent
dialog_agent = DialogAgent(name="assistant",
                           sys_prompt="你是一名非常聪明的 AI Agent!!!"
                           model_config_name="dashscope_chat-temperature-0.1")
# model_config_name 是配置文件里面的 config_name
user_agent = UserAgent()

3.2 构造对话

  • 实现方式一:为了在两个智能体之间开始对话,例如dialog_agent和user_agent,您可以使用以下循环。对话将持续进行,直到用户输入"exit",这将终止交互。
x = None
while True:
  x = dialog_agent(x)
  x = user_agent(x)
  if x.content == "exit": # 用户输入"exit"退出对话
    break
  • 实现方式二:,AgentScope提供了Pipeline来管理智能体之间消息流的选项。其中sequentialpipeline代表顺序对话,每个智能体以上一个智能体接收消息并生成其响应。
from agentscope.pipelines.functional import sequentialpipeline

def main() -> None:
	"""A basic conversation demo"""
	...
	x = None
	while x is None or x.content != "exit":
		x = sequentialpipeline([dialog_agent, user_agent], x)
	...

3.3 AgentScope智能体对话入口和启动

import agentscope
from agentscope.agents import DialogAgent, UserAgent
from agentscope.pipelines.functional import sequentialpipeline

def main() -> None:
	"""A basic conversation demo"""
	...
if __name__ == "__main__":
	main()

运行程序

# main.py 换成自己的文件名
python main.py

效果:
在这里插入图片描述

完整代码

model_config.py

import os

# 读取环境变量
# DASHSCOPE_API_KEY_text = os.getenv('DASHSCOPE_API_KEY')
# OPENAI_API_KEY_text = os.getenv('OPENAI_API_KEY')
# print(DASHSCOPE_API_KEY_text)
# print(OPENAI_API_KEY_text)

# class ModelConfig:
#     def __init__(self, config_name, model_type, model_name, generate_args, organization=None):
#         self.config_name = config_name
#         self.model_type = model_type
#         self.model_name = model_name
#         self.generate_args = generate_args
#         self.api_key = os.getenv('DASHSCOPE_API_KEY')
#         self.OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
#         self.organization = organization

# 示例配置
configs = {"gpt-4-temperature-0.0":{
        "config_name":"gpt-4-temperature-0.0",
        "model_type":"openai_chat",
        "model_name":"gpt-4",
        "generate_args":{"temperature": 0.0},
        #organization="example_org"
            },
"dashscope_chat-temperature-0.1":{
        "config_name":"dashscope_chat-temperature-0.1",
        "model_type":"dashscope_chat",
        "model_name":"qwen-turbo",
        "generate_args":{"temperature": 0.1},
        }
}

def get_config(config_name):
    if config_name in  configs:
        return configs[config_name]
    return None

# 示例调用
# if __name__ == "__main__":
#     gpt4_config = get_config("gpt-4-temperature-0.0")
#     print(f"GPT-4 Config: {gpt4_config}")
#
#     dashscope_config = get_config("dashscope_chat-temperature-0.1")
#     print(f"Dashscope Config: {dashscope_config}")

main.py:

import model_config
from model_config import get_config  # 确保正确导入
import agentscope
from agentscope.agents import DialogAgent, UserAgent
from agentscope.pipelines.functional import sequentialpipeline

def main() -> None:
    dashscope_config = get_config("dashscope_chat-temperature-0.1")
    # print(f"Dashscope Config: {dashscope_config.__dict__}")

    # 1, 加载模型配置
    agentscope.init(model_configs= dashscope_config,
                    project='一个简单的对话demo',
                    save_api_invoke=True)
    # 2, agentscope 智能体
    # 创建 对话Agent 和 用户Agent
    dialog_agent = DialogAgent(name="assistant",
                               sys_prompt="你是一名非常聪明的 AI Agent!!!",
                               model_config_name="dashscope_chat-temperature-0.1")
    # model_config_name 是配置文件里面的 config_name
    user_agent = UserAgent()

    # 3, agentscope 智能对话
    x = None
    while x is None or x.content != "exit":
        x = sequentialpipeline([dialog_agent, user_agent], x)

if __name__ == "__main__":
	main()

运行结果:

C:\Users\admin\miniconda3\envs\agentscope\python.exe C:/Users/admin/wws/github_project/agentscope/demo_tests/agent_demo_1.py
2024-09-10 18:50:06.678 | INFO     | agentscope.manager._model:load_model_configs:115 - Load configs for model wrapper: dashscope_chat-temperature-0.1
2024-09-10 18:50:06.686 | INFO     | agentscope.models.model:__init__:203 - Initialize model by configuration [dashscope_chat-temperature-0.1]
assistant: 谢谢您的夸奖!作为AI,我被设计成能够提供帮助和信息。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。
User Input: 你是谁
User: 你是谁
assistant: 我是来自阿里云的大规模语言模型,我叫通义千问。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,并提供各种服务,从解答问题到提供创意解决方案,再到辅助日常任务等。有什么我可以帮助您解决的问题吗?
User Input: 上海多少度
User: 上海多少度
assistant: 为了获取上海当前的气温,我建议您查看最近的天气预报或者访问可靠的气象网站和应用。这些资源会提供最新的实时温度信息,确保您得到的是准确的数据。您可以尝试搜索“上海实时天气”或者使用手机上的天气应用程序来获取信息。
User Input: what can you do for me?
User: what can you do for me?
assistant: As an AI agent, I'm here to assist you with various tasks and provide information on a wide range of topics. Here are some things I can help you with:

1. **Answering Questions**: I can answer questions about general knowledge, current events, science, technology, history, and more.
2. **Providing Information**: I can look up details on specific topics, such as recipes, travel destinations, or product reviews.
3. **Scheduling and Reminders**: I can help you manage your schedule by setting reminders, creating to-do lists, and providing updates.
4. **Language Translation**: I can translate text from one language to another.
5. **Creative Writing**: I can assist in generating stories, scripts, or even help you brainstorm ideas.
6. **Technical Support**: I can offer guidance on basic computer issues, software troubleshooting, or explain technical concepts.

If you have a specific task or question in mind, feel free to ask!
User Input: 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值