概述:从单 Agent 到多智能体协作
在 AI Agent 开发中,单一模型往往难以胜任需要多步骤推理、外部工具调用或角色分工的复杂任务。AutoGen 是微软推出的多智能体对话框架,它允许你定义多个具有不同角色、工具和记忆的 Agent,并通过自动化对话让它们协同完成任务。本教程面向已掌握基本 API 调用的进阶读者,将带你实战搭建一个由分析师、编码员和审查员组成的 AI 团队,实现从数据提取到报告生成的完整流程。
环境准备与核心概念
安装与配置
首先安装 AutoGen 并配置 LLM 后端。推荐使用 OpenAI 兼容的 API(如 GPT-4 或本地部署的 vLLM)。
pip install pyautogen创建配置文件 OAI_CONFIG_LIST.json:
[
{
"model": "gpt-4",
"api_key": "your-api-key-here",
"base_url": "https://api.openai.com/v1"
}
]
核心组件
AutoGen 多智能体系统由三个基础单元构成:
| 组件 | 角色 | 关键参数 |
|---|---|---|
| AssistantAgent | 执行推理与生成 | llm_config, system_message |
| UserProxyAgent | 模拟人类输入或执行代码 | human_input_mode, code_execution_config |
| GroupChat | 管理多 Agent 对话 | agents, speaker_selection_method |
system_message 决定了 Agent 的行为边界,而 speaker_selection_method 控制下一发言者选择逻辑(auto 或 round_robin)。实战:构建三 Agent 数据分析流水线
1. 定义 Agent 角色
我们将创建三个专用 Agent:
- 分析师:解析任务、制定方案
- 编码员:编写并执行 Python 代码
- 审查员:验证结果、输出最终报告
import autogenllm_config = {"config_list": [{"model": "gpt-4", "api_key": "sk-..."}], "temperature": 0}
analyst = autogen.AssistantAgent(
name="Analyst",
llm_config=llm_config,
system_message="你是一名数据分析师。请先理解任务,然后给出分析步骤。"
)
coder = autogen.AssistantAgent(
name="Coder",
llm_config=llm_config,
system_message="你是一名 Python 编码员。根据分析师的步骤编写代码,并执行。"
)
reviewer = autogen.AssistantAgent(
name="Reviewer",
llm_config=llm_config,
system_message="你是一名审查员。检查编码员的代码输出,确认正确后生成 Markdown 报告。"
)
2. 配置 GroupChat 与 Manager
GroupChat 负责协调对话,GroupChatManager 作为调度器。groupchat = autogen.GroupChat(
agents=[analyst, coder, reviewer],
messages=[],
max_round=12,
speaker_selection_method="auto"
)
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config
)
3. 启动多轮对话
使用 UserProxyAgent 模拟用户发起任务:
user_proxy = autogen.UserProxyAgent(
name="UserProxy",
human_input_mode="NEVER",
code_execution_config={"use_docker": False}
)
task = "请从 https://api.example.com/data.csv 下载数据,计算各列平均值,并以表格形式输出报告。"
user_proxy.initiate_chat(
manager,
message=task
)
运行后,你将看到以下典型对话流:
- Analyst:提出分析步骤(下载数据 → 计算统计量 → 格式化报告)
- Coder:编写
pandas代码并执行(代码块会被自动提取并运行) - Reviewer:检查输出结果,若发现错误则要求重新编码,否则生成最终报告
关键参数调优
在实际项目中,以下参数直接影响协作质量:
| 参数 | 推荐值 | 说明 |
|---|---|---|
max_round | 8-15 | 轮次过少可能导致任务未完成,过多则浪费 token |
speaker_selection_method | auto | 自动选择最相关的下一发言者;round_robin 适合简单轮询 |
human_input_mode | TERMINATE(生产) | NEVER 用于全自动,ALWAYS 用于调试 |
code_execution_config | {"use_docker": True} | 生产环境建议启用 Docker 隔离代码执行 |
进阶技巧:动态工具注册
对于需要调用外部 API 的场景,可以为 Agent 注册自定义函数。例如,让编码员能调用数据库查询:
def query_database(sql):
# 实际数据库连接逻辑
return [{"id": 1, "value": 100}]
coder.register_function(
function_map={"query_database": query_database}
)
在 system_message 中告知编码员可用的函数名称,AutoGen 会自动解析函数调用。
小结
本教程从零搭建了一个 AutoGen 多智能体协作系统,涵盖 Agent 定义、GroupChat 配置、对话启动与参数调优。核心要点包括:
- 通过
system_message明确每个 Agent 的职责边界 - 利用
GroupChatManager的自动发言选择机制实现动态协作 - 生产环境务必启用 Docker 隔离和执行轮次限制
- 自定义函数注册可扩展 Agent 的工具能力
多智能体模式特别适合文档生成、数据流水线、代码审查等需要多角色分工的场景。建议读者从简单的三 Agent 模型开始,逐步添加记忆持久化、错误重试和流式输出等高级特性。如需进一步学习,请访问 AI Explorer 联系页面获取完整代码示例。