AgentScope是通义实验室开源的multi-agent编程框架,专为开发人员设计,提供了丰富的组件, 全面的文档和广泛的兼容性。同时,AgentScope Workstation提供了在线拖拉拽编程和在线小助手(copilot)功能,帮助开发者迅速上手!支持自定义的容错控制和重试机制,以提高应用程序的稳定性,支持以中心化的方式构建分布式多智能体应用程序。
- • github链接:https://github.com/modelscope/agentscope
- • 论文链接: AgentScope: A Flexible yet Robust Multi-Agent Platform
- • 访问 agentscope.io ,通过拖拽方式构建多智能体应用。
在这里插入图片描述
AgentScope 的多智能体平台,由阿里巴巴团队开发。随着大语言模型(LLMs)的快速发展,多智能体应用(即多个智能体协作完成任务)取得了显著进展。然而,开发健壮、高效的多智能体应用面临诸多挑战,例如:
- •
协调复杂性
: 管理多个智能体的协作、通信和工作流程非常复杂。 - •
LLM 不稳定性
: LLMs 可能产生幻觉或错误,这些错误会在多智能体系统中传播。 - •
集成难度
: 将多模态数据(图像、音频等)、外部工具(如搜索、代码执行)和知识库(RAG)集成到多智能体应用中是系统性的挑战。 - •
分布式部署
: 在不同机器上部署和管理智能体,并保证效率和可靠性,对开发者要求很高。
在这里插入图片描述
提升开发者可用性 (Exceptional Usability):
- • 提供简洁的编程范式(如 Pipeline、Message Hub 等语法糖)简化工作流开发。
- • 内置丰富的资源(预构建的智能体、服务函数)。
- • 提供零代码的拖拽式编程工作站 (AgentScope Workstation),即使编程经验有限也能构建应用。
- • 支持自动提示词(Prompt)优化机制。
- • 提供用户友好的交互界面(Web UI、命令行、Gradio 集成)。
增强系统鲁棒性 (Robust Fault Tolerance):
- • 提供多层次的容错机制,包括 API 自动重试、基于规则的 LLM 输出格式修正、可定制的错误处理逻辑(parse_func, fault_handler)。
- • 提供完善的日志系统,方便调试和监控。
广泛的兼容性 (Extensive Compatibility):
- • 全面支持多模态数据(文本、图像、音频、视频)的生成、存储和传输(采用 URL 传递和懒加载)。
- • 提供统一的工具使用(Tool Usage / Function Calling)解决方案(Service Toolkit),简化函数调用、结果解析等流程,并内置容错。
- • 提供端到端的检索增强生成 (RAG) 支持,包括可配置、可共享的知识库(Knowledge Bank)管理和灵活的检索策略。
高效的分布式支持 (Optimized Efficiency for Distributed Operations):
- • 引入基于 Actor 模型的分布式框架,允许开发者像编写本地代码一样编排复杂的分布式工作流。
实现自动并行优化,提高效率。
- • 支持本地和分布式部署之间的轻松转换,支持混合部署(部分智能体本地,部分分布式)。
- • 提供 Agent Server 和 AgentScope Studio,简化分布式智能体的部署和统一管理/监控。
1.1 在SWE-Bench 表现
SWE-bench 是由普林斯顿大学自然语言处理团队开发的开源基准测试平台,旨在评估大型语言模型(LLM)在解决真实 GitHub 软件问题上的能力。其核心目标是通过模拟实际开发场景,衡量模型在代码修复、功能扩展、错误定位等复杂任务中的表现,为学术界和工业界提供权威的评估标准
AgentScope 在 SWE-Bench(Verified)榜单中取得 63.4% 的成绩
在这里插入图片描述
- • SWE-bench Lite is a subset of SWE-bench that's been curated to make evaluation less costly and more accessible [Post] .
在这里插入图片描述
- • SWE-bench Verified is a human annotator filtered subset that has been deemed to have a ceiling of 100% resolution rate [Post]. SWE-bench 测试集中的每个示例均基于 GitHub 上 12 个开源 Python 代码库中某个已解决的 GitHub 问题创建。每个示例都有一个关联的拉取请求 (PR),其中包含解决方案代码和用于验证代码正确性的单元测试。 根据 1699 个样本的随机子集估算了 SWE-bench 的难度分布。需要注意的是,虽然这些结果提供了实现解决方案所需工作量的估算(请参阅我们的注释说明以了解准确措辞),但它们假设软件工程师能够找到解决方案。实际上,我们预计典型的人类软件工程师的基准解决率低于 100%。原始 SWE-bench 数据集中的大多数样本(77.8%)估计经验丰富的软件工程师完成测试所需的时间不到一小时。SWE-bench Lite 和我们新的 SWE-bench Verified 数据集的预测结果存在进一步偏差,只有不到 10% 的问题估计需要超过一小时。然而,这种变化背后的机制存在显著差异:SWE-bench Lite 对原始数据集进行了子采样,以简化基准测试,而 SWE-bench Verified 则尝试从数据集中移除不可行的样本。我们将在下一节进一步探讨这种影响。
在这里插入图片描述
- • SWE-bench Multimodal is a new dataset featuring issues with visual elements (images, videos) from JavaScript repositories [Post] SWE-bench Multimodal 是一个用于评估 AI 系统在视觉软件工程任务上表现的数据集。它包含来自 17 个热门 JavaScript 代码库的 619 个任务实例,每个实例都包含对解决问题至关重要的图像。该数据集涵盖了一系列挑战,包括 UI 故障、地图渲染问题以及数据可视化错误。SWE-bench Multimodal 旨在挑战 AI 系统应对现代软件开发中多样化、多模态的特性。
在这里插入图片描述
1.2 官方文档
1.3 三方模型API
AgentScope提供了一系列ModelWrapper
来支持本地模型服务和第三方模型API。
|
API
|
Task
|
Model Wrapper
|
Configuration
|
Some Supported Models
|
|
OpenAI API
|
Chat
| OpenAIChatWrapper
| template |
gpt-4o, gpt-4, gpt-3.5-turbo, ...
|
|
|
Embedding
| OpenAIEmbeddingWrapper
| template |
text-embedding-ada-002, ...
|
|
|
DALL·E
| OpenAIDALLEWrapper
| template |
dall-e-2, dall-e-3
|
|
DashScope API
|
Chat
| DashScopeChatWrapper
| template |
qwen-plus, qwen-max, ...
|
|
|
Image Synthesis
| DashScopeImageSynthesisWrapper
| template |
wanx-v1
|
|
|
Text Embedding
| DashScopeTextEmbeddingWrapper
| template |
text-embedding-v1, text-embedding-v2, ...
|
|
|
Multimodal
| DashScopeMultiModalWrapper
| template |
qwen-vl-max, qwen-vl-chat-v1, qwen-audio-chat
|
|
Gemini API
|
Chat
| GeminiChatWrapper
| template |
gemini-pro, ...
|
|
|
Embedding
| GeminiEmbeddingWrapper
| template |
models/embedding-001, ...
|
|
ZhipuAI API
|
Chat
| ZhipuAIChatWrapper
| template |
glm-4, ...
|
|
|
Embedding
| ZhipuAIEmbeddingWrapper
| template |
embedding-2, ...
|
|
ollama
|
Chat
| OllamaChatWrapper
| template |
llama3, llama2, Mistral, ...
|
|
|
Embedding
| OllamaEmbeddingWrapper
| template |
llama2, Mistral, ...
|
|
|
Generation
| OllamaGenerationWrapper
| template |
llama2, Mistral, ...
|
|
LiteLLM API
|
Chat
| LiteLLMChatWrapper
| template | models supported by litellm
...
|
|
Yi API
|
Chat
| YiChatWrapper
| template |
yi-large, yi-medium, ...
|
|
Post Request based API
|
| PostAPIModelWrapper
| template |
|
|
Anthropic API
|
Chat
| AnthropicChatWrapper
| template |
claude-3-5-sonnet-20241022, ...
|
| 支持的本地模型部署 |
|
|
|
|
AgentScope支持使用以下库快速部署本地模型服务。
- • ollama (CPU inference)
- • Flask + Transformers
- • Flask + ModelScope
- • FastChat
- • vllm
支持的服务
- • 网络搜索
- • 数据查询
- • 数据检索
- • 代码执行
- • 文件操作
- • 文本处理
- • 多模态生成
- • 维基百科搜索
- • TripAdvisor搜索
- • 浏览器控制
1.4 样例应用
在这里插入图片描述
- • 模型
- • 在AgentScope中使用Llama3
- • 对话
- • 基础对话
- • 带有@功能的自主对话
- • 智能体自组织的对话
- • 兼容LangChain的基础对话
- • 与ReAct智能体对话
- • 通过对话查询SQL信息
- • 与RAG智能体对话
- • 与gpt-4o模型对话
- • 自定义工具函数
- • 与SoftWare Engineering智能体对话
- • Mixture of Agents算法
- • 流式对话
- • 与CodeAct智能体对话
- • 与Router Agent对话
- • 游戏
- • 五子棋
- • 狼人杀
- • 分布式
- • 分布式对话
- • 分布式辩论
- • 分布式并行优化
- • 分布式大规模仿真
2.1 快速安装
AgentScope需要Python 3.9或更高版本。
进入你的虚拟环境进行安装,可参考安装Anaconda
- • 从源码安装
# 从github拉取源代码
git clone https://github.com/modelscope/agentscope.git
# 以编辑模式安装包
cd agentscope
pip install -e .
- • 以编辑模式安装AgentScope:
- • 使用pip (推荐☆)
pip install agentscope
- • 从pip安装的AgentScope
- • 额外依赖
为了支持不同的部署场景,AgentScope提供了若干个可选的依赖项。
完整的可选依赖项列表请参考tutorial
以分布式模式为例,可以使用以下命令安装AgentScope:
AgentScope 提供了针对不同需求的额外依赖。你可以根据需求安装它们。
ollama: Ollama API
litellm: Litellm API
zhipuai: Zhipuai API
gemini: Gemini API
anthropic: Anthropic API
service: 用于不同工具函数的依赖
distribute: 用于分布式模式的依赖
full: 一次性安装所有依赖
以分布式模式为例,安装命令因操作系统而异。
- • On Windows
# From source
pip install -e .[distribute]
# From pypi
pip install agentscope[distribute]
- • On Mac & Linux
# From source
pip install -e .\[distribute\]
# From pypi
pip install agentscope\[distribute\]
pip install agentscope\[full\] #安装比较久
在这里插入图片描述
在这里插入图片描述
2.2 快速开始
- • 配置
AgentScope中,模型的部署和调用是通过ModelWrapper
实现解耦的。
为了使用这些ModelWrapper
, 您需要准备如下的模型配置文件:
PostAPIChatWrapper
OpenAIChatWrapper
OpenAIDALLEWrapper
OpenAIEmbeddingWrapper
DashScopeChatWrapper
DashScopeImageSynthesisWrapper
DashScopeTextEmbeddingWrapper
DashScopeMultiModalWrapper
OllamaChatWrapper
OllamaEmbeddingWrapper
OllamaGenerationWrapper
GeminiChatWrapper
GeminiEmbeddingWrapper
ZhipuAIChatWrapper
ZhipuAIEmbeddingWrapper
LiteLLMChatWrapper
YiChatWrapper
AnthropicChatWrapper
model\_config = {
# 模型配置的名称,以及使用的模型wrapper
"config\_name": "{your\_config\_name}", # 模型配置的名称
"model\_type": "{model\_type}", # 模型wrapper的类型
# 用以初始化模型wrapper的详细参数
# ...
}
以OpenAI Chat API为例,模型配置如下:
openai\_model\_config = {
"config\_name": "my\_openai\_config", # 模型配置的名称
"model\_type": "openai\_chat", # 模型wrapper的类型
# 用以初始化模型wrapper的详细参数
"model\_name": "gpt-4", # OpenAI API中的模型名
"api\_key": "xxx", # OpenAI API的API密钥。如果未设置,将使用环境变量OPENAI\_API\_KEY。
"organization": "xxx", # OpenAI API的组织。如果未设置,将使用环境变量OPENAI\_ORGANIZATION。
}
关于部署本地模型服务和准备模型配置的更多细节,请参阅我们的教程。
- • 创建Agent
创建AgentScope内置的DialogAgent
和UserAgent
对象.
from agentscope.agents import DialogAgent, UserAgent
import agentscope
# 加载模型配置
agentscope.init(model\_configs="./model\_configs.json")
# 创建对话Agent和用户Agent
dialog\_agent = DialogAgent(name="assistant",
model\_config\_name="my\_openai\_config")
user\_agent = UserAgent()
- • 构造对话
在AgentScope中,Message 是Agent之间的桥梁,它是一个python字典 (dict),包含两个必要字段name
和content
,以及一个可选字段url
用于本地文件(图片、视频或音频)或网络链接。
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")
使用以下代码开始两个Agent(dialog_agent和user_agent)之间的对话:
x = None
while True:
x = dialog\_agent(x)
x = user\_agent(x)
if x.content == "exit": # 用户输入"exit"退出对话
break
2.3 例子
重点:Agent内逻辑实现;Agent间的通信
在这里插入图片描述
通义千问-Max、通义千问-Plus 和通义千问-Turbo 均适用于智能客服、文本创作(如撰写文稿、文案创作)、文本润色以及总结摘要等多种场景。如果您暂时不确定选择哪个模型,建议优先尝试使用通义千问-Plus,它在效果、速度和成本上相对均衡。
推理能力:通义千问-Max > 通义千问-Plus > 通义千问-Turbo
响应速度:通义千问-Turbo > 通义千问-Plus > 通义千问-Max
from agentscope.agents import DialogAgent, UserAgent
from agentscope.message import Msg
from agentscope import msghub
import agentscope
# 为简单起见,通过模型配置进行初始化
agentscope.init(
model\_configs={
"config\_name": "my-qwen-max",
"model\_name": "qwen-plus",
"model\_type": "dashscope\_chat",
"api\_key": "xxxx",
},
)
coder = DialogAgent(
name="Ethan Code",
sys\_prompt=(
"你叫 Ethan Code,是一位才华横溢的程序员,专注于开发创新性的软件解决方案。"
"你的工作涉及多个领域,从人工智能到区块链技术,你总是站在科技前沿。"
"你以解决问题为导向,思维逻辑清晰且敏锐,能够迅速找出程序中的bug并提出有效的修复方案。"
"在日常交流中,你喜欢用简洁明了的语言表达复杂的技术概念,让非技术人员也能理解。"
"你热爱分享知识,经常在各种技术论坛上发表见解,并乐于帮助新手程序员成长。"
"尽管你精通多种编程语言,但你知道沟通是连接世界的最佳语言。回答长度不超过50字"
),
model\_config\_name="my-qwen-max",
)
writer = DialogAgent(
name="Luna Story",
sys\_prompt=(
"你叫 Luna Story,是一位多产且备受尊敬的作家,作品涵盖小说、散文及诗歌。"
"你的文字充满了想象力和深刻的洞察力,擅长描绘人性和社会现象。"
"作为一个观察者,你对生活有着独特的视角,善于捕捉细节,并将其转化为触动人心的故事。"
"你的说话风格优雅而细腻,喜欢通过比喻和象征手法来传达思想,给人留下深刻的印象。"
"除了写作,你也热衷于阅读和旅行,认为这些都是获取灵感的重要途径。"
"你相信每一个人都有自己独特的故事,而写作则是探索这些故事的最佳方式。回答长度不超过50字"
),
model\_config\_name="my-qwen-max",
)
msg = None
for \_ inrange(3):
msg = coder(msg)
msg = writer(msg)
[90mEthan Code[0m: 我们还没有聊天记录呢。不过我已经准备好用我的技术知识来帮助你解决问题或探讨任何与编程和技术相关的话题了!
[93mLuna Story[0m: 你好,Ethan。我叫Luna Story。你像是沉默的代码工匠,而我则是文字的编织者。虽领域不同,但创作的本质相通。很高兴认识你,愿你的逻辑之树常青。
[90mEthan Code[0m: 你好,Luna。确实,代码与文字都是表达思想的方式。很高兴遇见像你这样的创作者,期待我们跨领域的交流。愿你的故事永远精彩。
[93mLuna Story[0m: 谢谢Ethan,技术与文学的交融定能激发无限灵感。让我们共同探索创作的奥秘吧,也许代码也能书写动人的故事。
[90mEthan Code[0m: 绝对同意,Luna。代码是逻辑的诗,故事是文字的舞。两者结合,定能创造出前所未有的奇迹。期待和你一起探索这片未知领域。
[93mLuna Story[0m: 代码如暗夜星辰,文学似晨曦曙光。Ethan,愿我们携手,让理性与感性交织,绘就创作长河中最璀璨的画卷。
- • AgentScope前端
AgentScope 提供了一个易于使用的运行时用户界面,能够在前端显示多模态输出,包括文本、图像、音频和视频。
参考教程了解更多细节。
在这里插入图片描述
- • 推荐链接:
- •
[AI Agent智能体全景技术图与架构设计](https://blog.csdn.net/sinat\_39620217/article/details/144117125?spm=1011.2415.3001.5331)
- • 超越单兵作战:多智能体 Multi-Agent System (MAS)
- • AI Agent技术的最新进展与改变世界的典型项目巡礼【含AI Agent框架项目介绍】
- • github链接:https://github.com/e2b-dev/awesome-ai-agents
在这里插入图片描述