Skip to content

群聊模式

多 Agent 协作的三种方式


📖 概述

群聊(Group Chat)允许多个 Agent 共享上下文、协作完成任务。

模式说明适用场景
[轮询](#RoundRobinGroupChat)按顺序发言简单轮流讨论
[选择器](#SelectorGroupChat)动态选择下一个需要智能调度
[群体](#SwarmGroupChat)基于 handoff复杂任务分解

1. RoundRobinGroupChat (轮询)

按固定顺序让每个 Agent 发言。

python
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import MaxMessageTermination

# 创建 Agent
agent1 = AssistantAgent("analyst", model_client=model)
agent2 = AssistantAgent("writer", model_client=model)
agent3 = AssistantAgent("reviewer", model_client=model)

# 创建轮询团队
team = RoundRobinGroupChat(
    [agent1, agent2, agent3],
    max_turns=5,  # 最多 5 轮
)

# 运行
result = await team.run(task="写一篇关于 AI 的文章")

流程

轮次 1: analyst → writer → reviewer
轮次 2: analyst → writer → reviewer
...

2. SelectorGroupChat (选择器)

使用模型动态选择下一个发言的 Agent。

python
from autogen_agentchat.teams import SelectorGroupChat

team = SelectorGroupChat(
    [agent1, agent2, agent3],
    model_client=model,  # 用于选择下一个发言人
    max_turns=5
)

流程

轮次 1: analyst (模型选择) → writer (模型选择) → reviewer
轮次 2: analyst (根据上下文选择下一个) → ...

3. SwarmGroupChat (群体)

基于 Handoff 的群体协作。

python
from autogen_agentchat.teams import SwarmGroupChat
from autogen_agentchat.base import Handoff

# 定义 handoff
handoff_to_writer = Handoff(target="writer", name="转交写作")

analyst = AssistantAgent("analyst", model_client=model, handoffs=[handoff_to_writer])
writer = AssistantAgent("writer", model_client=model)

team = SwarmGroupChat(
    [analyst, writer],
    model_client=model,
    max_turns=5
)

4. 终止条件

MaxMessageTermination

python
from autogen_agentchat.conditions import MaxMessageTermination

team = RoundRobinGroupChat(
    [agent1, agent2],
    termination_condition=MaxMessageTermination(max_messages=10)
)

TextMentionTermination

python
from autogen_agentchat.conditions import TextMentionTermination

team = RoundRobinGroupChat(
    [agent1, agent2],
    termination_condition=TextMentionTermination("完成任务")
)

组合条件

python
from autogen_agentchat.conditions import OrTermination

team = RoundRobinGroupChat(
    [agent1, agent2],
    termination_condition=OrTermination([
        MaxMessageTermination(10),
        TextMentionTermination("完成")
    ])
)

5. 完整示例

写作团队

python
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient

async def main():
    model = OpenAIChatCompletionClient(model="gpt-4.1")

    planner = AssistantAgent(
        "planner",
        model_client=model,
        system_message="你是规划专家,负责制定写作大纲"
    )

    writer = AssistantAgent(
        "writer",
        model_client=model,
        system_message="你是写作专家,负责根据大纲撰写文章"
    )

    reviewer = AssistantAgent(
        "reviewer",
        model_client=model,
        system_message="你是审稿专家,负责审查文章质量"
    )

    team = RoundRobinGroupChat(
        [planner, writer, reviewer],
        max_turns=3
    )

    await Console(team.run_stream(task="写一篇关于量子计算的科普文章"))

asyncio.run(main())

6. 消息流

用户任务

┌─────────────────────────────────┐
│         GroupChat               │
│  ┌─────────────────────────┐   │
│  │  Round 1                 │   │
│  │  Agent A → Agent B → C  │   │
│  └─────────────────────────┘   │
│  ┌─────────────────────────┐   │
│  │  Round 2                 │   │
│  │  Agent A → Agent B → C  │   │
│  └─────────────────────────┘   │
└─────────────────────────────────┘

TaskResult (所有消息)

7. 最佳实践

选择合适的模式

  • 轮询: 简单的头脑风暴、轮流审查
  • 选择器: 需要智能调度的复杂任务
  • 群体: 任务需要明确分工和交接

设置合理的终止条件

python
# 避免无限循环
team = SelectorGroupChat(
    [agent1, agent2],
    max_turns=10,  # 必须设置
    termination_condition=TextMentionTermination("完成")
)

📝 练习

  1. 创建一个三轮写作的 RoundRobinGroupChat
  2. 尝试使用 SelectorGroupChat 动态选择发言人
  3. 设置组合终止条件

🔗 相关链接

Released under the MIT License.