大模型应用技术之 Agent框架 AutoGen
·
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_agentchat、autogen_core- ❌ 不存在:
import autogen(会ModuleNotFoundError)
- AutoGen 最新版本(元包):
pyautogen==0.10.0 - 关键子包:
autogen-agentchat==0.7.5、autogen-core==0.7.5(随pyautogen安装) - Python 版本要求:Python 3.8+
2. AutoGen 数据流向
2.1 双智能体对话流
最基础的模式是 UserProxyAgent 与 AssistantAgent 的互答:
2.2 群聊 (GroupChat) 数据流
多个 Agent 参与的群组对话:
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(或只作为辅助),主要职责是:
- 执行代码:运行 Assistant 发来的代码块。
- 请求人工输入:在关键步骤暂停,等待人类确认。
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 的主要理由通常是:
- 你需要 Agent 真的去"做"事情:不仅仅是生成文本,而是生成代码并运行代码(画图、抓取数据、数值计算)。
- 任务需要反复试错: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. 最佳实践
- 限制对话轮次:使用
max_turns(例如RoundRobinGroupChat(max_turns=5))防止无限对话消耗 Token。 - 明确终止条件:使用
TextMentionTermination(\"TERMINATE\")(或其他 termination condition)明确结束条件。 - 代码执行要隔离:新版 AutoGen 通过 tool/workbench/runtime 接入代码执行能力;生产环境务必使用容器/沙盒隔离执行。
- 精细化 System Message:给每个 Agent 设定清晰的人设(如 “你是一个极其严谨的代码审查员,只关注安全性漏洞”)。
更多推荐



所有评论(0)