AutoGen:玩转多智能体团队协作 (Teams)

  • 👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!
  • 👉👉👉 有意愿请私信!!!

AutoGen 的 AgentChat 模块为我们提供了强大的多智能体协作能力,通过 Teams 功能,我们可以轻松构建一个由多个智能体组成的团队,共同完成复杂的任务。本文将带你一步步了解如何创建、运行、观察、控制和管理一个 AutoGen 团队,并结合示例代码,让你快速上手实践。

为什么要使用 Teams?

在处理需要协作和专业知识的任务时,多智能体团队是一个强大的工具。与单个智能体相比,团队可以并行处理任务,利用每个智能体的独特优势,从而更有效地解决复杂问题。然而,团队也需要更多的管理和协调,AutoGen 旨在简化这个过程。

注意: 对于简单的任务,首先考虑使用单个智能体。只有当单个智能体无法胜任时,再转向多智能体团队。在创建团队之前,确保已经优化了单个智能体,并赋予了它所需的工具和指令。

创建一个 Team

AutoGen 中的 RoundRobinGroupChat 是一种简单而有效的团队配置,它允许所有智能体共享相同的上下文,并以轮询方式依次响应。每个智能体在轮到自己时,将响应广播给所有其他智能体,确保团队保持一致的上下文。

我们将创建一个包含两个 AssistantAgent 的团队:一个主要智能体和一个评论员智能体。同时,我们使用 TextMentionTermination 条件,当评论员智能体的响应中出现特定词语时,停止团队的运行。

import asyncio

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.base import TaskResult
from autogen_agentchat.conditions import ExternalTermination, TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_core import CancellationToken
from autogen_ext.models.openai import OpenAIChatCompletionClient


# 创建一个使用  deepseek 模型的 Agent
model_client = OpenAIChatCompletionClient(
    model="deepseek-chat",
    base_url="https://api.deepseek.com",
    api_key="sk-XXXXXXX",
    model_info={
        "vision": True,
        "function_calling": True,
        "json_output": True,
        "family": "unknown",
    },
)

# 创建主要智能体
primary_agent = AssistantAgent(
    "primary",
    model_client=model_client,
    system_message="你是一个乐于助人的 AI 助手。",
)

# 创建评论员智能体
critic_agent = AssistantAgent(
    "critic",
    model_client=model_client,
    system_message="提供建设性的反馈。当你的反馈得到解决时,回复 'APPROVE'。",
)

# 定义一个终止条件,当评论员批准时,停止任务
text_termination = TextMentionTermination("APPROVE")

# 创建一个包含主要智能体和评论员智能体的团队
team = RoundRobinGroupChat([primary_agent, critic_agent], 
                           termination_condition=text_termination)

上述代码实现了“反思”模式,即一个评论员智能体评估主要智能体的响应。

运行 Team

使用 run() 方法启动团队,并为其分配一个任务:

# 在脚本中运行时,使用 `asyncio.run(...)`
result = await team.run(task="写一首关于秋天的短诗。")
print(result)

 我们看到返回结果result是一个TextMessage消息体的集合,里面包含了 user,和我们定义的primary,critic 这两个智能体,下面我们过滤一下result的内容,以便提取我们想要的结果:

print(result.messages[1].content)

团队会运行智能体,直到满足终止条件。在本例中,团队以轮询顺序运行智能体,直到在智能体的响应中检测到“APPROVE”一词。团队停止后,会返回一个 TaskResult 对象,其中包含团队中智能体生成的所有消息。

观察 Team

你可以使用 run_stream() 方法在团队运行时流式传输团队的消息。此方法返回一个生成器,该生成器会生成团队中智能体生成的消息,最后一个项目是 TaskResult 对象。

# 在脚本内部运行时,使用异步 main 函数并通过 `asyncio.run(...)` 调用它
await team.reset()  # 为新任务重置团队
async for message in team.run_stream(task="写一首关于秋天的短诗。"):  # type: ignore
    if isinstance(message, TaskResult):
        print("停止原因:", message.stop_reason)
    else:
        print(message)

如上例所示,你可以通过检查 stop_reason 属性来确定团队停止的原因。

 Console()方法提供了一种方便的方式,可以将消息以适当的格式打印到控制台。

await team.reset()  # 为新任务重置团队
await Console(team.run_stream(task="写一首关于秋天的短诗。"))  # 将消息流式传输到控制台

 

重置 Team

你可以通过调用  reset() 方法重置团队。此方法将清除团队的状态,包括所有智能体。它将调用每个智能体的  on_reset()方法来清除智能体的状态。

await team.reset()  # 为下一次运行重置团队

如果下一个任务与上一个任务无关,通常最好重置团队。但是,如果下一个任务与上一个任务相关,则无需重置,而是可以恢复团队。

停止 Team

除了自动终止条件(例如  TextMentionTermination)之外,你还可以通过使用 ExternalTermination 从外部停止团队。

在  ExternalTermination 上调用 set() 会在当前智能体的回合结束时停止团队。因此,团队可能不会立即停止。这允许当前智能体完成其回合并将最终消息广播到团队,然后再停止团队,从而保持团队状态的一致性。

# 创建一个带有外部终止条件的新团队
external_termination = ExternalTermination()
team = RoundRobinGroupChat(
    [primary_agent, critic_agent],
    termination_condition=external_termination | text_termination,  # 使用按位 OR 运算符来组合条件
)

# 在后台任务中运行团队
run = asyncio.create_task(Console(team.run_stream(task="写一首关于秋天的短诗。")))

# 等待一段时间
await asyncio.sleep(0.1)

# 停止团队
external_termination.set()

# 等待团队完成
await run

从上面的输出中,你可以看到团队因满足外部终止条件而停止,但发言智能体能够在团队停止之前完成其回合。

恢复 Team

除非你重置团队,否则团队是有状态的,并在每次运行后保持对话历史记录和上下文。

你可以通过再次调用 run() 或  run_stream() 方法来恢复团队,从而从上次停止的地方继续,而无需提供新任务。 RoundRobinGroupChat 将从轮询顺序中的下一个智能体继续。

await Console(team.run_stream())  # 恢复团队以继续上一个任务

你可以看到团队从上次停止的地方恢复,并且第一条消息来自团队停止之前发言的最后一个智能体之后的下一个智能体。

让我们在保留有关上一个任务的上下文的同时,使用新任务再次恢复团队。

# 新任务是将同一首诗翻译成中文唐诗风格。
await Console(team.run_stream(task="将这首诗用中文唐诗风格写一遍。"))

 

中止 Team

你可以在执行期间通过设置传递给 cancellation_token 参数的 CancellationToken 来中止对 run() 或 run_stream() 的调用。

与停止团队不同,中止团队将立即停止团队并引发 CancelledError 异常。

注意: 当团队中止时,调用方将收到 CancelledError 异常。

# 创建一个取消令牌
cancellation_token = CancellationToken()

# 使用另一个协程运行团队
run = asyncio.create_task(
    team.run(
        task="将这首诗翻译成西班牙语。",
        cancellation_token=cancellation_token,
    )
)

# 取消运行
cancellation_token.cancel()

try:
    result = await run  # 这将引发 CancelledError。
except asyncio.CancelledError:
    print("任务已取消。")

总结

AutoGen 的 Teams 功能为我们提供了一种构建多智能体协作系统的强大方式。通过了解如何创建、运行、观察、控制和管理团队,你可以充分利用 AutoGen 的 AgentChat 模块,解决各种复杂的任务。希望本文能帮助你快速上手 AutoGen 的 Teams 功能,并在实践中发挥其强大的潜力!

### Autogen Framework 中的多智能体功能实现与使用 Autogen 是一种支持自动化生成和协作的框架,其核心目标之一是通过多个智能体之间的交互来完成复杂的任务。以下是关于如何理解和实现 Autogen 框架中多智能体功能的关键点: #### 多智能体架构概述 在 Autogen 中,多智能体系统由一组具有不同角色和职责的智能体组成。这些智能体可以协同工作以解决特定的任务或问题。例如,在某些场景下,可能有一个负责决策的 **Controller Agent** 和若干个执行具体操作的 **Execution Agents**[^1]。 #### 主要组件及其作用 - **Controller Agent**: 这是一个高级别的协调者,它会根据输入的需求分配子任务给其他智能体,并监督整个过程直到最终目标达成。 - **Execution Agents (工具型代理)**: 它们专注于处理具体的子任务,比如调用外部 API、编写代码片段或者解释自然语言指令等。这类代理通常依赖于预定义好的技能库来进行高效运作[^2]。 - **User Proxy Agent**: 表达用户的意图并将之转化为适合内部计算的形式;同时也可作为反馈通道让人类参与者介入调整方向或提供额外指导信息。 #### 实现步骤说明 虽然题目要求不采用诸如“首先”这样的引导词,但仍需清晰表达各部分逻辑关系如下: 创建自定义类继承 `AssistantAgent` 或者直接利用内置模板快速搭建基础结构之后设置必要的参数如模型名称、温度值等等最后启动循环监听机制等待接收消息触发相应行为模式即可完成初步配置流程同时还需要注意优化通信协议确保信息传递准确性减少误解概率提高整体效率水平另外也要考虑加入异常捕获模块以便及时发现错误并采取补救措施防止程序崩溃影响用户体验质量. 下面给出一段简单的 Python 示例代码展示如何初始化两个基本类型的 agent 并建立连接: ```python from autogen import AssistantAgent, UserProxyAgent # 初始化助理代理 assistant = AssistantAgent( name="assistant", llm_config={"model": "gpt-4", "temperature": 0}, ) # 创建用户代理实例 user_proxy = UserProxyAgent( name="user_proxy", human_input_mode="TERMINATE", max_consecutive_auto_reply=3, is_termination_msg=lambda x: x.get("content","").rstrip().endswith("goodbye"), ) # 开始对话 user_proxy.initiate_chat(assistant, message="请帮我设计一款能够检测垃圾邮件的应用程序。") ``` 此脚本展示了最简化版本的人机互动方式——即当用户发送请求后,系统将自动解析内容然后按照预定规则生成回应直至满足结束条件为止。 #### 注意事项 在实际部署过程中还需综合考量安全性保障措施以及成本控制策略等问题以免因过度消耗资源而导致不必要的经济损失风险增加等情况发生因此建议开发者仔细阅读官方文档获取更多细节资料辅助做出最佳实践方案选择。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-派神-

感谢您慷慨解囊,我会更加努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值