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
| 维度 | AutoGen | LangChain/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框架索引**