AutoGen系列六: SelectorGroupChat 的原理与实践
AutoGen 技术博客系列 (七):状态管理与组件序列化解析
AutoGen 技术博客系列 (八):# 深入剖析 Swarm—— 智能体协作的新范式
AutoGen 技术博客系列 (九):从 v0.2 到 v0.4 的迁移指南
AutoGen 是一个强大的多智能体应用开发框架,它允许开发者构建可协作、可交互的智能体系统,解决各种复杂任务。AutoGen 基于异步、事件驱动架构,旨在提高系统的可观察性、灵活性、交互控制和可扩展性。
什么是 AutoGen?
AutoGen 的核心思想是:将复杂任务分解成多个子任务,并分配给不同的智能体,通过智能体之间的协作和交流来完成整个任务。它提供了一个高度可定制的平台,允许开发者创建各种类型的智能体,并将它们组织成不同的工作流程。
AutoGen 的主要特点包括:
•多智能体协作:支持创建多种类型的智能体,并允许它们通过消息传递进行协作,共同解决复杂问题。
•异步和事件驱动架构:AutoGen 的核心架构是异步和事件驱动的,可以提高系统的并发性和响应速度,也更容易观察和调试智能体的行为。
•高度可扩展性:AutoGen 的设计允许开发者轻松地添加新的智能体类型、工具和服务,以适应不同的应用场景。
•灵活的配置选项: AutoGen 支持通过代码或配置文件灵活的配置参数和工作流程。
•内置多种预设智能体: AutoGen 提供了多个预设智能体,开箱即用,方便用户快速上手。
•可定制智能体: AutoGen 允许用户定义自己的智能体,并扩展框架的功能,以满足特定的需求。
•可保存和加载状态: AutoGen 可以保存和加载智能体和团队的状态,允许暂停和恢复对话。
•工具集成:支持智能体使用各种工具,如网络搜索、代码执行、文件浏览等,增强智能体的能力。
•消息处理:AutoGen 提供了多种消息类型,方便智能体之间进行交流。
•人类参与:支持在智能体工作流程中加入人类的参与,实现人机协同。
•状态管理: 可以通过 save_state 和 load_state 方法保存和加载智能体及其所属团队的状态。
•内存机制: AutoGen 允许智能体拥有自己的记忆,以便在多次对话中保持一致的上下文。
•多种团队模式:支持多种智能体团队模式,如轮询、选择器等,满足不同的应用场景。
AutoGen 的核心概念
在开始使用 AutoGen 之前,理解其核心概念非常重要:
•智能体 (Agent):智能体是 AutoGen 的基本构建块。每个智能体都有一个唯一的名称、描述和一组方法。智能体可以是预设的(如 AssistantAgent, UserProxyAgent)或自定义的(继承自 BaseChatAgent)。
•AssistantAgent: 使用语言模型并可以调用工具的内置智能体.
•UserProxyAgent: 接收用户输入并将其作为响应返回的智能体.
•CodeExecutorAgent: 可以执行代码的智能体.
•OpenAIAssistantAgent: 由 OpenAI Assistant 支持的智能体,可以使用自定义工具.
•MultimodalWebSurfer: 可以搜索网页并访问网页以获取信息的多模态智能体.
•FileSurfer: 可以在本地文件中搜索和浏览信息的智能体.
•VideoSurfer: 可以观看视频以获取信息的智能体.
•消息 (Message):消息是智能体之间交流的载体。AutoGen 支持多种消息类型,包括文本消息 (TextMessage)、多模态消息 (MultiModalMessage) 和工具调用请求 (ToolCallRequestEvent) 等。
•工具 (Tool):工具是智能体可以使用的外部功能,如网络搜索、代码执行等。通过工具,智能体可以扩展自身的能力。
•团队 (Team):团队是由多个智能体组成的协作单元。AutoGen 提供了多种团队模式,如轮询团队 (RoundRobinGroupChat) 和选择器团队 (SelectorGroupChat)。
•终止条件 (Termination Condition):终止条件用于定义何时停止智能体之间的对话或协作。AutoGen 提供了多种终止条件,如最大消息数 (MaxMessageTermination)、文本提及 (TextMentionTermination) 和自定义终止条件
•记忆 (Memory): 用于存储对话历史和用户偏好的机制,可以为智能体提供上下文信息.
AutoGen 入门教程
接下来,我们将通过一个简单的示例来演示如何使用 AutoGen 创建一个基本的智能体团队:
1.安装依赖
首先,安装必要的软件包:
pip install autogen-agentchat autogen-ext[openai]
如果需要使用 MultimodalWebSurfer,还需要安装 playwright:
playwright install --with-deps chromium
2.创建智能体
创建一个使用 OpenAI GPT-4o 模型的 AssistantAgent:
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core import CancellationToken
async def main():
model_client = OpenAIChatCompletionClient(model="gpt-4o")
assistant = AssistantAgent(
name="assistant",
model_client=model_client,
system_message="You are a helpful AI assistant.",
)
response = await assistant.on_messages(
messages=[TextMessage(content="你好,请写一个关于秋天的三行诗", source="user")],
cancellation_token=CancellationToken()
)
print(response.chat_message.content)
asyncio.run(main())
上面的代码创建了一个名为 "assistant" 的智能体,并使用 GPT-4o 模型。它接受用户输入 "你好,请写一个关于秋天的三行诗",并返回一个关于秋天的三行诗。
3.创建多智能体团队
下面展示如何创建一个包含两个智能体的 RoundRobinGroupChat 团队:
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
async def main():
model_client = OpenAIChatCompletionClient(model="gpt-4o-mini")
writer = AssistantAgent(
name="writer",
model_client=model_client,
system_message="You are a creative writer."
)
critic = AssistantAgent(
name="critic",
model_client=model_client,
system_message="You are a helpful critic. Respond with 'APPROVE' when you are satisfied."
)
termination = TextMentionTermination("APPROVE")
team = RoundRobinGroupChat([writer, critic], termination_condition=termination)
await Console(team.run_stream(task="写一个关于夏天的三行诗"))
asyncio.run(main())
在这个例子中,我们创建了一个 writer 智能体和一个 critic 智能体,它们组成一个 RoundRobinGroupChat 团队。writer 负责创作诗歌,critic 负责提供反馈。当 critic 的回复中包含 "APPROVE" 时,对话结束。 运行代码 将上述代码保存为 .py 文件并执行, 可以看到 writer 和 critic 之间的对话。