开源精选 AutoGen微软多Agent对话AG2开源

Microsoft AutoGen深度解析:对话式多Agent框架的领导者

“如果两个AI互相聊天能解决什么问题?“——微软的AutoGen用多Agent对话回答了这个问题,并将这种模式推向了企业级应用。

项目速览

维度详情
GitHubmicrosoft/autogen
Stars~48K
语言Python
许可证CC-BY-4.0 → MIT
社区分支ag2-ai/ag2 (AG2)

背景:AutoGen的分裂与AG2

AutoGen经历了开源社区中最具戏剧性的事件之一——2025年因许可证争议(微软将许可证从MIT改为CC-BY-4.0),核心社区成员fork出AG2分支。AG2保持了MIT许可证并持续活跃开发,成为事实上的社区主线。

建议:新项目优先考虑AG2分支。

核心思想:对话即编程

AutoGen的独特范式

传统Agent编程:代码编排
  agent1.run() → agent2.run(agent1.output) → agent3.run(agent2.output)

AutoGen范式:对话编排
  Agent1: "我发现数据中有个异常..."
  Agent2: "让我验证一下..." [调用工具]
  Agent2: "确实是个异常,建议这样处理..."
  Agent1: "好的,让我整理成报告..."

Agent之间通过自然语言对话来协作,而不是通过结构化API调用。这听起来低效,但带来了惊人的灵活性。

核心概念

1. ConversableAgent

所有Agent的基类:

from autogen import ConversableAgent, AssistantAgent, UserProxyAgent

# 可对话的Agent
analyst = AssistantAgent(
    name="数据分析师",
    system_message="""你是一位数据分析师。当收到任务时:
    1. 先理解数据结构和分析目标
    2. 编写Python代码进行分析
    3. 解释分析结果的意义
    4. 如果代码出错,自己修复""",
    llm_config={"model": "gpt-4", "temperature": 0}
)

# 用户代理(能执行代码、与人类交互)
user_proxy = UserProxyAgent(
    name="用户代理",
    human_input_mode="TERMINATE",  # 需要时请求人类输入
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "workspace",
        "use_docker": True,  # 安全:在Docker中执行代码
    }
)

2. GroupChat(群聊模式)

AutoGen最具特色的功能——多个Agent在一个”群聊”中协作:

from autogen import GroupChat, GroupChatManager

# 创建群聊
groupchat = GroupChat(
    agents=[
        user_proxy,        # 用户代理
        analyst,           # 数据分析师
        writer,            # 报告撰写者
        reviewer,           # 审核者
        engineer,          # 工程师
    ],
    messages=[],
    max_round=20,
    speaker_selection_method="auto",  # 自动选择下一个发言者
    allow_repeat_speaker=False
)

# 群聊管理者
manager = GroupChatManager(
    groupchat=groupchat,
    llm_config={"model": "gpt-4"}
)

# 发起对话
user_proxy.initiate_chat(
    manager,
    message="""分析这份销售数据(sales_2026.csv),找出:
    1. 增长最快的产品线
    2. 最盈利的客户群
    3. 潜在风险
    并生成一份给CEO的报告。"""
)

3. 群聊中的角色扮演

群聊对话示例:

[数据分析师]:我注意到Q2数据中,B产品线的增长率异常高。
让我用代码验证一下数据质量。

[数据分析师]:[执行代码] 代码确认数据无误,B产品线增长
48%,主要由东南亚市场驱动。

[工程师]:我可以写一个脚本来批量检查所有产品线的
增长率,并与去年同期对比。

[审核者]:在生成报告前,我建议先确认:这个增长是否
有季节性因素?请分析师补充去年同期数据对比。

[数据分析师]:好建议。去年同期增长率是32%,所以今年
加速明显。但不能排除基数效应——去年同期绝对值较小。

[报告撰写者]:基于以上讨论,我来起草CEO报告。
重点突出:1) 结构性增长vs季节性 2) 区域集中度风险
3) 建议下一步验证方向。

4. 嵌套Chat

Agent可以把复杂任务委托给子Agent:

# 主Agent把代码编写任务委托给编程Agent
engineer_agent = AssistantAgent(
    name="Python专家",
    system_message="你是Python专家,编写高质量、可运行的代码",
    llm_config={"model": "claude-sonnet-4-6"}
)

# 注册嵌套Chat
analyst.register_nested_chats(
    [
        {
            "sender": analyst,
            "recipient": engineer_agent,
            "message": lambda recipient, messages: f"请将以下分析转化为Python代码:{messages[-1]['content']}",
            "max_turns": 2,
        }
    ],
    trigger=engineer_agent  # 当需要编程时触发
)

独特优势

1. Human-in-the-Loop

# 需要人类输入时自动暂停
user_proxy = UserProxyAgent(
    name="用户代理",
    human_input_mode="ALWAYS",  # 始终需要人类确认
    # human_input_mode="TERMINATE",  # 仅在结束时确认
    # human_input_mode="NEVER",  # 全自动
)

这是企业级场景的关键需求——在敏感操作(如发送邮件、执行数据库写入)前要求人类审批。

2. 代码安全执行

code_execution_config = {
    "work_dir": "coding",
    "use_docker": True,         # Docker沙箱
    "timeout": 60,              # 执行超时
    "last_n_messages": 3,       # 只保留最近3条消息的上下文
}

3. Teachable Agent(可教学的Agent)

from autogen import TeachableAgent

# Agent能从用户反馈中学习
teacher = TeachableAgent(
    name="老师",
    llm_config={"model": "gpt-4"},
    teach_config={
        "verbosity": 2,
        "reset_db": False,
        "recall_threshold": 1.5,
    }
)

用户告诉Agent”以后遇到X情况应该用Y方法”,Agent会记住并应用。

AutoGen vs AG2

维度微软AutoGenAG2
许可证CC-BY-4.0MIT ✅
维护方微软原AutoGen核心社区
更新频率
社区活跃度
企业支持微软背书社区驱动
新功能保守激进

适用场景

✅ AutoGen/AG2 的最佳场景:
├── 数据分析和可视化任务
├── 代码生成和调试协作
├── 多人/多角色决策模拟
├── 教学和研究场景
└── 需要人类介入的半自动化工作流

关键优势:
- 自然语言协作比API调用更灵活
- 人类可以随时加入对话
- 群聊模式天然适合复杂讨论

AutoGen创新的”对话即编程”范式让人耳目一新。虽然自然语言对话的效率和确定性不如结构化API调用,但在需要灵活协作、需要人类介入的场景中,对话是最高效的协作界面——毕竟,人类团队也是这么工作的。

GitHub: https://github.com/microsoft/autogen | AG2: https://github.com/ag2-ai/ag2