1. AutoGen 原理与介绍

1.1 什么是 AutoGen

AutoGen 是由微软(Microsoft)开发的开源多智能体对话框架。它允许开发者通过定义多个可对话的 Agent(Conversable Agents),让它们通过自动对话来协作解决任务。AutoGen 的核心优势在于其强大的代码执行能力灵活的对话模式(支持两方对话、群聊、层级对话等)。

1.2 核心设计理念

  • 对话即计算(Conversation as Computation):将任务求解过程建模为多智能体之间的对话
  • 代码优先(Code First):Agent 可以编写代码、调试代码并在本地/Docker 容器中执行代码
  • 人类介入(Human in the Loop):原生支持在对话的任意阶段引入人工反馈
  • 可定制化(Customizable):Agent 的 LLM 配置、系统提示词、技能均可灵活定制

1.3 技术架构

AutoGen 的架构基于 ConversableAgent 基类:

┌───────────────────────────────────────────────┐
│              ConversableAgent                 │
│  (基类:负责接收消息、LLM推理、生成回复)        │
└──────────────────────┬────────────────────────┘
                       │
          ┌────────────┴────────────┐
          ▼                         ▼
  ┌────────────────┐       ┌────────────────┐
  │ AssistantAgent │       │ UserProxyAgent │
  │ (AI 助手)       │       │ (用户代理)      │
  │ - 编写代码      │       │ - 执行代码      │
  │ - 制定计划      │       │ - 请求人工输入  │
  └────────────────┘       └────────────────┘

1.4 版本信息

重要说明:AutoGen 在 PyPI 上的发行形态是 元包 pyautogen。在 pyautogen==0.10.0 下:

  • ✅ 可导入模块:autogen_agentchatautogen_core
  • ❌ 不存在:import autogen(会 ModuleNotFoundError
  • AutoGen 最新版本(元包)pyautogen==0.10.0
  • 关键子包autogen-agentchat==0.7.5autogen-core==0.7.5(随 pyautogen 安装)
  • Python 版本要求:Python 3.8+

2. AutoGen 数据流向

2.1 双智能体对话流

最基础的模式是 UserProxyAgent 与 AssistantAgent 的互答:

AssistantAgent UserProxyAgent 用户 AssistantAgent UserProxyAgent 用户 alt [执行出错] [执行成功] 1. 发起任务 ("画一张股价走势图") 2. 转发任务 3. 思考 & 编写 Python 代码 4. 发送代码块 5. (自动/人工) 执行代码 6. 发送执行结果 (Success/Error) 7. 修正代码 8. 发送新代码 9. "TERMINATE" (结束对话)

2.2 群聊 (GroupChat) 数据流

多个 Agent 参与的群组对话:

选择发言人策略

发起

广播上下文

广播上下文

广播上下文

回复

回复

回复

1.调用 LLM 选择

Coder

UserProxyAgent

GroupChatManager

Coder

Reviewer

ProductManager

谁下一个发言?


3. AutoGen 核心组件

3.1 AssistantAgent

负责解决任务的 AI 角色。它通常配置了 LLM,能够理解指令、编写代码或给出建议。

from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient

llm = OpenAIChatCompletionClient(model="gpt-4", api_key="YOUR_KEY")
assistant = AssistantAgent(name="assistant", model_client=llm)

3.2 UserProxyAgent

代表用户或执行环境的代理。它通常配置 LLM(或只作为辅助),主要职责是:

  1. 执行代码:运行 Assistant 发来的代码块。
  2. 请求人工输入:在关键步骤暂停,等待人类确认。
from autogen_agentchat.agents import UserProxyAgent

# 注意:在 pyautogen==0.10.0 中,UserProxyAgent 主要用于“代表人类输入/代理人类”。
# 旧版 autogen 的 code_execution_config(自动执行代码块)API 已不适用;
# 新版需要通过 tool / workbench / runtime 接入代码执行能力(请参考官方文档示例)。
user_proxy = UserProxyAgent(name="user_proxy")

3.3 GroupChat & Manager

用于管理 3 个及以上 Agent 的对话。

  • GroupChat: 维护 Agent 列表和对话历史。
  • GroupChatManager: 特殊的 Agent,利用 LLM 来决定"下一个轮到谁发言"。

4. AutoGen vs CrewAI vs LangGraph 三方对比

特性 AutoGen CrewAI LangGraph
核心隐喻 对话 (Conversation) 团队/角色 (Role/Crew) 图/状态机 (Graph/State)
代码执行 原生强项 (UserProxy 自动执行) ⚠️ 需通过 Tool 间接实现 ⚠️ 需自定义 Node 实现
控制流 自动 (LLM 决定下一发言人) 顺序/层级 (Sequential/Hierarchical) 精确 (边/条件分支)
适用场景 编程、调试、开放式探索 内容生成、报告分析、线性任务 复杂业务流、生产级应用
上手难度 ⭐⭐ (概念少,但调试Prompt难) ⭐ (封装好,易上手) ⭐⭐⭐ (需理解图论/状态)

4.4 为什么选择 AutoGen?

选择 AutoGen 的主要理由通常是:

  1. 你需要 Agent 真的去"做"事情:不仅仅是生成文本,而是生成代码并运行代码(画图、抓取数据、数值计算)。
  2. 任务需要反复试错:AutoGen 的"生成-执行-报错-修正"循环非常成熟,非常适合编程类任务。

5. AutoGen 适用场景

5.1 自动化编程与数据分析

Agent A 写代码,Agent B (Proxy) 运行代码并反馈报错,Agent A 修正代码。这在数据清洗、机器学习模型训练脚本生成中非常有效。

5.2 复杂问题的多角度研讨

创建一个由 “正方代表”、“反方代表” 和 “主持人” 组成的 GroupChat,让他们针对一个议题进行辩论,生成更全面的观点。

5.3 动态工作流

当任务步骤无法预先确定(例如:先搜索,如果没搜到就去爬虫,如果爬虫失败就换个源),AutoGen 的对话驱动模式比硬编码的工作流更灵活。


6. 快速开始指南

6.1 安装

pip install pyautogen==0.10.0 autogen-ext==0.7.5

6.2 最小可运行示例(v0.10.0:验证 import 与接线方式)

创建一个简单的脚本 app.py

from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination
from autogen_ext.models.openai import OpenAIChatCompletionClient

llm = OpenAIChatCompletionClient(
    model="gpt-4",
    api_key="sk-...",  # 填入你的 OpenAI Key
)

assistant = AssistantAgent(name="assistant", model_client=llm)
user_proxy = UserProxyAgent(name="user_proxy")

team = RoundRobinGroupChat(
    participants=[user_proxy, assistant],
    termination_condition=TextMentionTermination("TERMINATE"),
    max_turns=5,
)

# 注意:该示例会调用真实 LLM;完成后需让 assistant 回复 TERMINATE
result = team.run(task="请用 Python 打印当前日期的斐波那契数列前 10 位;完成后回复 TERMINATE。")
print(result)

6.3 运行

python app.py

你会在 coding/ 目录下看到生成的代码文件和执行结果。


7. 最佳实践

  1. 限制对话轮次:使用 max_turns(例如 RoundRobinGroupChat(max_turns=5))防止无限对话消耗 Token。
  2. 明确终止条件:使用 TextMentionTermination(\"TERMINATE\")(或其他 termination condition)明确结束条件。
  3. 代码执行要隔离:新版 AutoGen 通过 tool/workbench/runtime 接入代码执行能力;生产环境务必使用容器/沙盒隔离执行。
  4. 精细化 System Message:给每个 Agent 设定清晰的人设(如 “你是一个极其严谨的代码审查员,只关注安全性漏洞”)。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐