1 AgentScope 简介
1.1 什么是AgentScope?
AgentScope是以开发者为中心的多智能体平台,它使开发者能够更轻松地构建基于大语言模型的多智能体应用程序。
特点:
- 易用性
- 鲁棒性
- 支持多模态数据
- 分布式部署
1.2 关键概念
消息(Message)
是信息的载体(例如指令、多模态数据和对话内容)。在AgentScope中,消息是Python字典
的子类, 具有name
和content
作为必要字段,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 模型
1.8.2 对话
- 基础对话
- 带有@功能的自主对话
- 智能体自组织的对话
- 兼容LangChain的基础对话
- 与ReAct智能体对话
- 通过对话查询SQL信息
- 与RAG智能体对话
- 与gpt-4o模型对话
- 自定义工具函数
- 与SoftWare Engineering智能体对话
- Mixture of Agents算法
- 流式对话
- 与CodeAct智能体对话
- 与Router Agent对话
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: