🤖 微软的多Agent对话框架

AutoGen 完整教程

让多个AI代理协作解决复杂问题

⭐ 35K+ Stars 👥 多Agent 💻 代码执行 🏢 Microsoft

💡 AutoGen核心概念

什么是多Agent对话?

AutoGen允许创建多个AI代理(Agent),每个代理有自己的角色和能力。 代理之间可以相互对话、协作完成任务,就像一个虚拟团队。

👤

UserProxyAgent

代表人类用户,可执行代码和工具

🤖

AssistantAgent

AI助手,负责生成代码和方案

👥

GroupChat

多个Agent的群聊协作

💬

对话式协作

Agent之间自然对话,分工合作完成任务。

💻

代码执行

安全执行Python代码,自动调试和修正错误。

🔄

人机协作

人类可随时介入,给出反馈和指导。

🚀 快速开始

📦 安装AutoGen

# 基础安装
pip install pyautogen

# 或安装完整版(包含所有可选依赖)
pip install "pyautogen[teachable,lmm,graph,websurfer]"

👶 第一个AutoGen程序

两个Agent的简单对话

import autogen

# 配置LLM
config_list = [
    {
        "model": "gpt-4",
        "api_key": "your-openai-key"
    }
]

llm_config = {
    "config_list": config_list,
    "temperature": 0
}

# 创建助手Agent
assistant = autogen.AssistantAgent(
    name="助手",
    llm_config=llm_config,
    system_message="你是一个有帮助的AI助手"
)

# 创建用户代理Agent(可执行代码)
user_proxy = autogen.UserProxyAgent(
    name="用户",
    human_input_mode="NEVER",  # 完全自动
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False
    }
)

# 开始对话
user_proxy.initiate_chat(
    assistant,
    message="计算斐波那契数列的第10项,并用Python实现"
)

🔄 对话流程:

  1. 1. 用户发起任务
  2. 2. 助手生成Python代码
  3. 3. 用户代理执行代码
  4. 4. 返回执行结果
  5. 5. 助手确认结果正确
  6. 6. 对话结束

👥 多Agent协作模式

🗣️ GroupChat - 群聊模式

多个专家Agent协作解决复杂问题

import autogen

# 创建多个专家Agent
researcher = autogen.AssistantAgent(
    name="研究员",
    system_message="你是一个研究专家,负责收集和分析信息",
    llm_config=llm_config
)

coder = autogen.AssistantAgent(
    name="程序员",
    system_message="你是一个Python专家,负责编写代码",
    llm_config=llm_config
)

reviewer = autogen.AssistantAgent(
    name="审查员",
    system_message="你负责审查代码质量和测试",
    llm_config=llm_config
)

user_proxy = autogen.UserProxyAgent(
    name="用户",
    human_input_mode="TERMINATE",
    code_execution_config={"work_dir": "coding"}
)

# 创建群聊
groupchat = autogen.GroupChat(
    agents=[user_proxy, researcher, coder, reviewer],
    messages=[],
    max_round=12
)

# 群聊管理器
manager = autogen.GroupChatManager(
    groupchat=groupchat,
    llm_config=llm_config
)

# 发起任务
user_proxy.initiate_chat(
    manager,
    message="""开发一个数据分析工具:
    1. 研究员:调研数据分析的最佳实践
    2. 程序员:编写代码实现
    3. 审查员:测试代码并提出改进建议"""
)

💡 协作流程:

👤 用户:发起任务

🔍 研究员:分析需求,提供方案

💻 程序员:根据方案编写代码

审查员:审查代码,提出改进

🔄 程序员:根据反馈修改

👤 用户代理:执行最终代码

💬 两Agent对话模式

最简单的协作模式,一个提问一个回答

# 教师Agent
teacher = autogen.AssistantAgent(
    name="老师",
    system_message="你是一位耐心的编程老师,用简单的语言解释概念",
    llm_config=llm_config
)

# 学生Agent
student = autogen.AssistantAgent(
    name="学生",
    system_message="你是一个好学的学生,主动提问并总结学到的知识",
    llm_config=llm_config
)

# 开始对话(学生提问)
student.initiate_chat(
    teacher,
    message="请教我什么是递归,并举个例子",
    max_turns=5
)

💼 实战案例

案例1:自动化代码审查系统

开发者提交代码,AI团队自动审查、测试、优化

import autogen

# 开发者Agent
developer = autogen.AssistantAgent(
    name="开发者",
    system_message="你负责编写代码解决问题",
    llm_config=llm_config
)

# 代码审查Agent
reviewer = autogen.AssistantAgent(
    name="审查员",
    system_message="""你是资深代码审查专家,检查:
    1. 代码质量和规范
    2. 潜在bug和边界情况
    3. 性能优化建议
    4. 安全问题""",
    llm_config=llm_config
)

# 测试Agent
tester = autogen.AssistantAgent(
    name="测试员",
    system_message="你负责编写测试用例,确保代码正确性",
    llm_config=llm_config
)

# 执行Agent
executor = autogen.UserProxyAgent(
    name="执行器",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "review"}
)

# 创建群聊
groupchat = autogen.GroupChat(
    agents=[executor, developer, reviewer, tester],
    messages=[],
    max_round=20,
    speaker_selection_method="round_robin"  # 轮流发言
)

manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 发起代码审查
executor.initiate_chat(
    manager,
    message="请实现一个二分查找算法,要求完整的代码和测试"
)

✅ 实现效果:

  • • 开发者写代码 → 审查员提意见 → 开发者修改 → 测试员写测试 → 执行验证
  • • 自动迭代直到代码通过所有检查
  • • 生成完整的代码 + 测试 + 文档

案例2:AI研究团队

多个专家Agent协作完成研究报告

# 搜索专家
searcher = autogen.AssistantAgent(
    name="搜索专家",
    system_message="你负责在网上搜索信息,提供可靠来源",
    llm_config=llm_config
)

# 分析师
analyst = autogen.AssistantAgent(
    name="分析师",
    system_message="你负责分析数据,提取关键洞察",
    llm_config=llm_config
)

# 撰写者
writer = autogen.AssistantAgent(
    name="撰写者",
    system_message="你负责将研究结果撰写成专业报告",
    llm_config=llm_config
)

# 编辑
editor = autogen.AssistantAgent(
    name="编辑",
    system_message="你负责审核报告,确保逻辑清晰、语言流畅",
    llm_config=llm_config
)

user_proxy = autogen.UserProxyAgent(
    name="研究主管",
    human_input_mode="TERMINATE"
)

# 群聊
groupchat = autogen.GroupChat(
    agents=[user_proxy, searcher, analyst, writer, editor],
    messages=[],
    max_round=25
)

manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 研究任务
user_proxy.initiate_chat(
    manager,
    message="写一份关于'2024年AI发展趋势'的研究报告"
)

🎓 高级功能

🔧 函数调用

# 定义工具函数
def get_weather(city: str) -> str:
    """获取城市天气"""
    return f"{city}今天晴天,25度"

def search_web(query: str) -> str:
    """搜索网络"""
    return f"搜索结果:{query}"

# 注册函数到Agent
assistant = autogen.AssistantAgent(
    name="助手",
    llm_config={
        **llm_config,
        "functions": [
            {
                "name": "get_weather",
                "description": "获取城市天气",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string"}
                    }
                }
            }
        ]
    }
)

user_proxy.register_function(
    function_map={
        "get_weather": get_weather,
        "search_web": search_web
    }
)

👤 人类反馈模式

# 三种人类介入模式
user_proxy = autogen.UserProxyAgent(
    name="用户",
    
    # 模式1:从不介入(全自动)
    human_input_mode="NEVER",
    
    # 模式2:总是需要人类确认
    # human_input_mode="ALWAYS",
    
    # 模式3:遇到TERMINATE才询问(推荐)
    # human_input_mode="TERMINATE",
    
    max_consecutive_auto_reply=10
)

# 自定义终止条件
def is_termination_msg(msg):
    return "TERMINATE" in msg.get("content", "")

user_proxy = autogen.UserProxyAgent(
    name="用户",
    is_termination_msg=is_termination_msg
)

🧠 可教学的Agent

Agent可以从对话中学习,记住用户偏好

from autogen.agentchat.contrib.teachable_agent import TeachableAgent

# 创建可学习的Agent
teachable_agent = TeachableAgent(
    name="学习助手",
    llm_config=llm_config,
    teach_config={
        "verbosity": 0,
        "reset_db": False,  # 保留学习的知识
        "path_to_db_dir": "./teachable_db"
    }
)

# Agent会记住这些信息
user_proxy.initiate_chat(
    teachable_agent,
    message="我喜欢用Python编程,记住这一点"
)

# 下次对话会用上之前学到的知识
user_proxy.initiate_chat(
    teachable_agent,
    message="帮我写个脚本"  # 自动用Python
)

🔗 嵌套对话

Agent可以发起子任务,委托给其他Agent

# 主管Agent可以调用专家Team
manager_agent.initiate_chat(
    expert_team,
    message="请数据团队分析这个数据集"
)

# 数据团队内部协作完成后返回结果给主管

🎯 AutoGen适用场景

💻

代码生成与调试

自动编写、测试、调试代码,无需人工干预

📊

数据分析

从数据探索到可视化,全流程自动化

🔬

研究辅助

文献搜索、数据分析、报告撰写

🎓

教育培训

AI教师和学生互动,个性化学习

🤖

复杂决策

多角度分析,集体决策

📝

内容创作

研究、撰写、编辑协作

⭐ 最佳实践

✅ 推荐做法

  • 明确角色:每个Agent职责清晰,不重叠
  • 限制轮次:设置max_round防止无限对话
  • 代码隔离:使用Docker执行不可信代码
  • 启用追踪:verbose=True查看对话过程

❌ 常见陷阱

  • Agent过多:3-5个最佳,太多会混乱
  • 无限循环:必须设置终止条件
  • 角色模糊:system_message要具体明确
  • 不监控成本:多Agent对话Token消耗大

❓ 常见问题

Q1: AutoGen安全吗?会执行恶意代码吗?

安全措施:

  • • 默认在沙箱环境执行代码
  • • 推荐使用Docker隔离(use_docker=True)
  • • 可设置human_input_mode="ALWAYS"人工审核
  • • 限制可执行的函数白名单

Q2: 如何控制对话成本?

  • • 设置max_consecutive_auto_reply限制回合
  • • 使用gpt-3.5-turbo替代gpt-4
  • • 精简system_message
  • • 启用缓存机制

Q3: Agent对话总是失败怎么办?

  • • 检查system_message是否清晰
  • • 升级到gpt-4,推理能力更强
  • • 减少Agent数量
  • • 使用speaker_selection_method控制发言顺序
  • • 查看详细日志定位问题

Q4: 如何与其他工具集成?

AutoGen可以与主流工具结合:

  • • LangChain:复用LangChain的工具
  • • RAG系统:Agent可以查询知识库
  • • API服务:通过函数调用集成
  • • 数据库:直接查询和更新

开始使用AutoGen

构建你的第一个多Agent系统