Skip to content

07.2 — AutoGen

定位: 微软的多 Agent 对话框架——理解 AutoGen 如何通过"对话"实现多 Agent 协作 面试高频度: ⭐⭐⭐⭐ 考查方式: 框架对比、多 Agent 对话流程、AutoGen 核心概念


一、这是什么?为什么需要它?

AutoGen 是微软推出的多 Agent 对话框架,核心思想是通过对话(Conversation)来实现多 Agent 协作。Agent 之间通过发送消息进行交流,像人类团队一样讨论问题。

核心概念

概念说明
Agent具有特定角色的智能体,可发送和接收消息
Conversable Agent能对话的 Agent(所有 Agent 的基础)
User Proxy Agent代表用户执行操作(执行代码、提供输入)
Assistant Agent由 LLM 驱动的助手 Agent
Group Chat群聊模式,多个 Agent 在群里讨论
Manager群聊管理者,控制发言顺序

为什么选择 AutoGen?

对话模式 vs 编排模式:
  LangChain:开发者编排(开发者设计工作流)
  AutoGen:Agent 自主对话(Agent 自己决定谁做什么)
  CrewAI:角色化编排(开发者定义角色和任务)
  
AutoGen 适合:需要 Agent 自主讨论、辩论、协作的复杂场景

核心洞察AutoGen 认为"对话是最自然的协作方式"——让 Agent 像人类团队一样通过交流来解决问题。


二、原理拆解

2.1 核心工作模式

┌──────────────────────────────────────────────────────────┐
│              AutoGen 双 Agent 模式                        │
│                                                          │
│  用户                                                    │
│    │                                                     │
│    ▼                                                     │
│  ┌─────────────────┐      ┌─────────────────┐           │
│  │  UserProxyAgent  │◄────►│  AssistantAgent │           │
│  │                  │      │                 │           │
│  │  • 执行代码      │      │  • 生成代码     │           │
│  │  • 提供用户输入  │      │  • 提供建议     │           │
│  │  • 运行工具      │      │  • LLM 驱动    │           │
│  └─────────────────┘      └─────────────────┘           │
│                                                          │
│  工作流程:                                                │
│  用户 → UserProxy → Assistant → UserProxy[执行] → ...    │
└──────────────────────────────────────────────────────────┘
python
# 双 Agent 模式
from autogen import AssistantAgent, UserProxyAgent

# 1. 创建助理 Agent
assistant = AssistantAgent(
    name="assistant",
    llm_config={"config_list": [{"model": "gpt-4", "api_key": "..."}]},
    system_message="你是一个 Python 编程专家。"
)

# 2. 创建用户代理
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",  # NEVER / ALWAYS / TERMINATE
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False,
    },
)

# 3. 开始对话
user_proxy.initiate_chat(
    assistant,
    message="写一个分析股票数据的 Python 脚本"
)

2.2 Group Chat 模式

┌──────────────────────────────────────────────────────────┐
│              Group Chat 模式                              │
│                                                          │
│  ┌─────────────────────────────────────┐                │
│  │            群聊管理器               │                │
│  │  • 维护发言顺序                    │                │
│  │  • 广播消息                        │                │
│  │  • 决定下一发言者                  │                │
│  └─────────────────────────────────────┘                │
│            │        │        │                           │
│            ▼        ▼        ▼                           │
│       ┌──────┐ ┌──────┐ ┌──────┐                      │
│       │ A1   │ │ A2   │ │ A3   │                      │
│       │产品  │ │ 设计  │ │ 开发  │                      │
│       └──────┘ └──────┘ └──────┘                      │
│            │        │        │                           │
│            └────────┼────────┘                           │
│                     ▼                                    │
│              ┌──────────────┐                           │
│              │  共享消息队列  │                           │
│              └──────────────┘                           │
└──────────────────────────────────────────────────────────┘
python
from autogen import GroupChat, GroupChatManager

# 多个 Agent
product_agent = AssistantAgent(name="产品经理", system_message="...")
design_agent = AssistantAgent(name="设计师", system_message="...")
dev_agent = AssistantAgent(name="开发者", system_message="...")

# 群聊
group_chat = GroupChat(
    agents=[product_agent, design_agent, dev_agent],
    messages=[],
    max_round=10,
)

manager = GroupChatManager(
    groupchat=group_chat,
    llm_config=llm_config,
)

# 开始讨论
user_proxy.initiate_chat(
    manager,
    message="讨论如何设计一个用户登录功能"
)

2.3 AutoGen vs LangChain

维度AutoGenLangChain/LangGraph
核心模式对话驱动图/链驱动
多 Agent原生支持LangGraph 支持
代码执行内置(UserProxyAgent)需自定义
工具生态较丰富最丰富(700+)
学习曲线中高
适用场景多 Agent 协作通用 Agent 构建

三、实战验证

python
# 多 Agent 辩论式代码审查

from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager

# 定义审查 Agent
security_agent = AssistantAgent(
    name="安全审查官",
    system_message="你是一个安全专家,只关注代码安全问题。"
)

perf_agent = AssistantAgent(
    name="性能审查官",
    system_message="你是一个性能专家,只关注代码性能问题。"
)

style_agent = AssistantAgent(
    name="代码风格官",
    system_message="你是一个代码风格专家,只关注可读性和规范。"
)

# 群聊审查
chat = GroupChat(
    agents=[security_agent, perf_agent, style_agent],
    messages=[],
    max_round=6,
)
manager = GroupChatManager(groupchat=chat, llm_config=llm_config)

# 用户提交代码
user = UserProxyAgent(
    name="开发者",
    human_input_mode="TERMINATE",
)
user.initiate_chat(manager, message="""审查以下 Python 代码:
def process(data):
    result = []
    for i in data:
        result.append(i * 2)
    return result
""")

四、面试视角

追问答案要点
AutoGen 的核心设计理念?"对话即协作"——Agent 通过自然语言对话进行交流,像人类团队一样讨论和解决问题
UserProxyAgent 和 AssistantAgent 的区别?UserProxy 代表用户执行操作(运行代码、调用工具),Assistant 由 LLM 驱动提供智能。UserProxy 是"手",Assistant 是"脑"
Group Chat 中 Manager 如何控制发言?Manager 维护发言队列,每次选择一个 Agent 发言。选择策略可以是轮流、由 LLM 决定谁最适合回答、或者基于发言历史
AutoGen 适合什么场景?多 Agent 需要深度协作的场景:辩论式审查、跨领域团队协作、复杂的多步骤任务。不适合简单单 Agent 任务

📚 相关链接

  • **LangChain与LangGraph** — AutoGen 的主要对比框架
  • **CrewAI** — 另一种多 Agent 框架
  • **多智能体系统** — 多 Agent 理论基础
  • ← 返回 **Agent框架索引**

Knowledge4J — Java 知识库