🤖 AutoGen
1. 概述
AutoGen 是微软推出的多Agent对话框架,核心思想是将多个AI Agent视为对话参与者, 通过自然语言对话来协作完成任务。它由微软研究院 FLAML 团队开发,支持 Python 和 .NET。
💡 AutoGen 核心理念
"一切皆对话" —— Agent之间通过结构化的对话消息来交换信息、协调行动。不需要预定义的工作流DAG,Agent可以动态决定下一步该和谁对话、说什么。
2. 核心Agent类型
2.1 AssistantAgent
AssistantAgent 是内置了LLM的AI Agent,能够理解任务、生成方案、编写代码。 它通常作为团队中的"智囊"角色,负责思考、规划和执行任务。
AssistantAgent 核心能力
- 代码生成与执行:自动编写Python代码来解决问题
- 工具调用:通过Function Calling调用外部工具
- 反思与修正:收到错误反馈后自动修正输出
- 多角色扮演:通过 system_message 定义不同角色的Assistant
2.2 UserProxyAgent
UserProxyAgent 是用户的代理,它不调用LLM,而是负责:
- 代码执行:在本地或Docker中安全执行AssistantAgent生成的代码
- 人工介入:在关键决策点暂停并等待人工输入
- 结果反馈:将执行结果(成功/失败/输出)传回AssistantAgent
3. 群组聊天(GroupChat)
AutoGen最强大的特性之一是群组聊天,多个Agent在同一个聊天室中协作。 由 GroupChatManager 管理发言顺序和消息路由。
💬 群组聊天工作流
| 步骤 | 说明 |
|---|---|
| 1. 任务发布 | UserProxyAgent 在群聊中发布任务 |
| 2. Speaker选择 | GroupChatManager 决定下一个发言者 |
| 3. Agent发言 | 被选中的Agent基于上下文生成回复 |
| 4. 消息广播 | 消息共享给群聊中所有Agent |
| 5. 循环/终止 | 直到任务完成或收到终止信号 |
🔀 Speaker选择策略
- Auto:由 GroupChatManager 内置的LLM动态决定下一个发言者
- Round Robin:Agent轮流发言(简单但不够智能)
- Random:随机选择(用于探索性实验)
- Custom:自定义选择函数,实现特定业务规则
4. 典型使用模式
🔧 双Agent模式
AssistantAgent + UserProxyAgent,最小化的协作单元。Assistant负责思考,UserProxy负责执行和反馈。
👥 多角色协作
多个不同专业领域的AssistantAgent(工程师、测试、PM) + 一个UserProxyAgent协调。
🔄 嵌套对话
一个Agent在对话中启动子对话来独立解决子问题,然后汇总结果回到主对话。
5. 代码执行安全
AutoGen将代码执行作为一等公民,提供了多层安全机制:
- Docker隔离:在独立容器中执行代码,防止影响宿主机
- 执行超时:设置代码执行的最大时长,防止死循环
- 命令黑名单:禁止 `rm -rf`、`curl` 等危险操作
- 人工审批:关键执行前要求人工确认
6. 适用场景
✅ 适合
- 需要多Agent通过对话协作的场景
- 代码生成与自主调试的自动化任务
- 需要动态路由和灵活Agent交互的系统
- 研究多Agent对话策略的实验
❌ 不适合
- 需要严格确定性的工作流(用LangGraph更好)
- 简单单Agent任务(对话开销过大)
- 对延迟要求极高的场景(多轮对话耗时)
- 需要复杂状态管理的应用