从 0 到 1 搭建基于 AutoGen 的多智能体群聊系统
从0到1搭建基于AutoGen的多智能体群聊系统:解锁大模型协作的10倍生产力
摘要/引言
你是否有过这样的经历:用ChatGPT写代码,写完之后要自己找bug、自己做测试、自己优化性能,前前后后花2小时才能搞定一个小功能;写一份产品方案,要自己查竞品、自己理需求、自己做架构设计,改五六版才能达标;做一份数据分析报告,要自己爬数据、自己洗数据、自己建模,最后还要自己写报告,一个人扛完整个流程效率极低。
OpenAI 2024年发布的调研数据显示:单智能体完成复杂工业级任务的成功率仅为32%,而由多个不同职能的大模型智能体组成的协作团队,任务成功率可以提升到78%,效率是单智能体的6-10倍。这就是多智能体协作的魅力——让大模型像真人团队一样分工协作,各自负责自己擅长的模块,最终产出远高于单智能体的结果。
而微软2023年开源的AutoGen框架,就是当前最成熟的多智能体编排工具,它原生支持群聊式多智能体协作,可以让你用几十行代码就搭建出一个由多个角色组成的智能体团队,自动完成复杂任务。
读完本文你将收获:
- 彻底搞懂AutoGen的核心概念、与其他多智能体框架的差异和适用场景
- 从零搭建一套可直接运行的、面向软件开发场景的多智能体群聊系统,拿到完整可复制的源码
- 掌握多智能体群聊系统的优化方案、最佳实践和生产级落地经验
- 了解多智能体领域的发展趋势和未来布局方向
本文将按照「核心概念讲解→环境准备→系统设计→核心实现→优化落地→趋势展望」的结构展开,即使你只有基础的Python能力,也能跟着步骤一步步搭建出自己的多智能体群聊系统。
一、核心概念与基础认知
1.1 问题背景与痛点
单大模型智能体的能力边界已经非常清晰,它在单一、简单的任务上表现出色,但面对复杂多环节任务时存在三个无法规避的痛点:
- 能力边界有限:单个大模型不可能精通所有领域,比如既懂产品需求分析,又懂架构设计,还懂代码编写和测试,输出结果容易出现专业领域错误
- 上下文限制:单智能体的上下文窗口有限,面对长流程任务时容易遗忘之前的信息,出现前后逻辑矛盾
- 自我修正能力弱:单智能体生成的结果如果出现错误,很难自我发现和修正,需要人类介入干预
为了解决这些问题,行业提出了多智能体协作的解决方案:把复杂任务拆分成多个环节,每个环节由一个专门训练/设定的智能体负责,各个智能体通过沟通协作完成整个任务,而群聊式协作是最符合人类协作习惯的交互模式。
1.2 核心概念定义
1.2.1 什么是AutoGen
AutoGen是微软研究院2023年开源的多智能体编排框架,核心设计理念是「让智能体可对话」,所有智能体都可以通过自然语言交互,自动完成任务分工、信息同步、结果校验等工作。它原生支持群聊模式,可以自定义群聊规则、发言顺序、终止条件,是当前搭建多智能体群聊系统的最优选择。
1.2.2 核心要素组成
AutoGen的多智能体群聊系统由5个核心要素组成:
| 核心要素 | 定义 | 作用 |
|---|---|---|
| ConversableAgent | 可对话智能体,是所有智能体的基类 | 可以自定义角色、系统提示词、工具调用权限、代码执行权限 |
| GroupChat | 群聊实例 | 管理所有参与群聊的智能体、存储会话历史、控制最大发言轮次 |
| GroupChatManager | 群聊管理器 | 按照规则选择下一个发言的智能体、判断任务是否完成、协调群聊流程 |
| Tool | 工具集 | 智能体可以调用的外部能力,比如代码执行、网页搜索、数据库查询等 |
| Human Input Mode | 人类介入模式 | 控制人类在群聊过程中的介入时机,支持全程介入、仅终止时介入、不介入三种模式 |
1.2.3 与其他多智能体框架的对比
我们把AutoGen和当前主流的多智能体框架做了核心属性对比,方便你选择适合自己的工具:
| 框架名称 | 核心定位 | 原生群聊支持 | 自定义规则灵活度 | 工具调用能力 | 人类介入支持 | 上手难度 | 适用场景 |
|---|---|---|---|---|---|---|---|
| AutoGen | 多智能体会话编排 | ✅ 原生支持,可自定义群聊规则 | 极高,支持自定义发言顺序、终止条件、角色权限 | 极强,支持函数调用、代码执行、自定义工具 | 极强,支持多种人类输入模式 | 中等 | 复杂多角色协作、群聊式任务处理 |
| LangChain Agents | 单智能体工具编排 | ❌ 需要二次开发实现群聊 | 中等,需要自己写逻辑控制多智能体交互 | 强,生态完善工具多 | 中等,需要自定义实现人类介入节点 | 中等 | 单智能体工具调用、简单多智能体流程 |
| CrewAI | 角色化多智能体协作 | ✅ 支持,但是规则固定为任务流水线 | 中等,基于任务拆分的固定流程 | 强,支持自定义工具 | 弱,仅支持任务节点的人类审核 | 简单 | 标准化流程的多角色任务,比如内容创作、代码开发 |
| AgentGPT | 单智能体自主任务执行 | ❌ 不支持多智能体 | 低,固定的任务拆解执行逻辑 | 中等,内置常用工具 | 弱,仅支持初始任务输入 | 极简单 | 个人用户简单自主任务执行 |
1.3 概念关系与交互流程
1.3.1 实体关系ER图
1.3.2 群聊交互流程图
1.4 数学模型
我们可以用两个数学公式来量化多智能体群聊系统的效率和任务成功率:
1.4.1 任务完成概率公式
单智能体完成对应子任务的概率为PiP_iPi,权重为wiw_iwi(代表该智能体在子任务上的专业程度),则多智能体群聊系统的总任务完成概率为:
Ptotal=1−∏i=1n(1−Pi×wi)P_{total} = 1 - \prod_{i=1}^{n} (1 - P_i \times w_i)Ptotal=1−i=1∏n(1−Pi×wi)
从公式可以看出,只要各个智能体的专业能力足够强,总任务完成概率会远高于单智能体的完成概率。
1.4.2 智能体选择概率公式
群聊管理器选择下一个发言智能体时,会基于智能体角色和当前上下文的相似度计算选择概率,使用Softmax函数归一化:
P(Agentj∣Context)=exp(sim(Agentj.role,Context))∑k=1nexp(sim(Agentk.role,Context))P(Agent_j | Context) = \frac{exp(sim(Agent_j.role, Context))}{\sum_{k=1}^{n} exp(sim(Agent_k.role, Context))}P(Agentj∣Context)=∑k=1nexp(sim(Agentk.role,Context))exp(sim(Agentj.role,Context))
其中sim(Agentj.role,Context)sim(Agent_j.role, Context)sim(Agentj.role,Context)是智能体j的角色描述和当前上下文的余弦相似度,相似度越高的智能体被选中发言的概率越大。
1.4.3 任务效用函数
我们的目标是最大化群聊系统的任务效用,也就是在保证质量的前提下,尽量降低耗时和成本,效用函数定义为:
U=∑i=1n(Qi×Ti−1×Ci−1)U = \sum_{i=1}^{n} (Q_i \times T_i^{-1} \times C_i^{-1})U=i=1∑n(Qi×Ti−1×Ci−1)
其中QiQ_iQi是第i轮输出的质量评分(0-1分),TiT_iTi是第i轮的耗时(秒),CiC_iCi是第i轮的Token成本(元),效用越高代表系统性能越好。
二、环境准备与前置依赖
2.1 先决条件
在开始搭建之前,你需要准备以下内容:
- Python 3.8+ 基础编程能力
- 大模型API Key:支持OpenAI GPT-3.5/4、通义千问、智谱清言、Claude等主流大模型
- 基础的Git和虚拟环境使用能力
2.2 环境安装步骤
2.2.1 创建虚拟环境
# 创建虚拟环境
python -m venv autogen-env
# 激活虚拟环境
# Windows系统
autogen-env\Scripts\activate
# Mac/Linux系统
source autogen-env/bin/activate
2.2.2 安装依赖包
# 安装AutoGen核心库和环境变量工具
pip install pyautogen python-dotenv agentops
# agentops用于监控智能体的调用情况,可选安装
2.2.3 配置大模型API Key
在项目根目录创建.env文件,填入你的API Key配置:
# OpenAI配置
OPENAI_API_KEY=sk-xxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1 # 如果用国内代理可以改成对应的地址
# 通义千问配置示例(如果用通义千问的话)
# DASHSCOPE_API_KEY=sk-xxxxxx
# AgentOps配置(可选,用于监控)
# AGENTOPS_API_KEY=xxxxxx
2.2.4 测试环境是否正常
运行以下测试代码,验证环境配置是否正确:
import os
import autogen
from dotenv import load_dotenv
load_dotenv()
llm_config = {
"model": "gpt-3.5-turbo",
"api_key": os.getenv("OPENAI_API_KEY"),
"base_url": os.getenv("OPENAI_BASE_URL", None),
}
# 创建两个智能体测试对话
assistant = autogen.AssistantAgent("assistant", llm_config=llm_config)
user_proxy = autogen.UserProxyAgent("user_proxy", human_input_mode="NEVER", max_consecutive_auto_reply=1)
user_proxy.initiate_chat(assistant, message="说一句Hello AutoGen")
如果运行后正常输出Hello AutoGen,说明环境配置成功。
三、系统设计与核心实现
我们本次要搭建的是面向软件开发场景的多智能体群聊系统,模拟真实的软件开发团队协作流程,包含产品经理、架构师、程序员、测试工程师、代码审查员5个角色,自动完成从需求到可运行代码的全流程。
3.1 系统功能设计
我们的系统需要实现以下核心功能:
- 多角色自动分工:每个智能体负责自己的专业环节,不需要人工干预
- 自定义群聊规则:固定发言顺序,避免乱序发言,提升协作效率
- 工具调用支持:测试工程师可以直接执行代码验证功能正确性
- 人类介入能力:用户可以随时修改需求、确认结果
- 任务自动终止:所有环节完成后自动结束群聊,避免无限循环
- 会话持久化:自动保存所有聊天记录,方便后续回溯
3.2 系统架构设计
系统分为三层架构,从上到下分别是接入层、编排层、能力层:
3.3 系统接口设计
如果需要把系统封装成服务对外提供,可以设计以下RESTful接口:
| 接口地址 | 请求方式 | 功能描述 | 请求参数 | 返回参数 |
|---|---|---|---|---|
/api/chat/create |
POST | 创建新的群聊任务 | task: string 任务描述 |
chat_id: string 群聊ID |
/api/chat/send |
POST | 发送消息到群聊 | chat_id: string, message: string |
status: string, response: string |
/api/chat/history |
GET | 获取群聊历史 | chat_id: string |
messages: list 历史消息列表 |
/api/chat/stop |
POST | 终止群聊任务 | chat_id: string |
status: string |
3.4 核心实现源代码
完整的可运行代码如下,所有代码都加了详细注释:
import os
import json
from datetime import datetime
import autogen
from dotenv import load_dotenv
from autogen import UserProxyAgent, AssistantAgent, GroupChat, GroupChatManager
# 加载环境变量
load_dotenv()
# 开启AgentOps监控(可选)
# import agentops
# agentops.init(os.getenv("AGENTOPS_API_KEY"))
# ------------------------------ 全局配置 ------------------------------
LLM_CONFIG = {
"model": "gpt-3.5-turbo",
"api_key": os.getenv("OPENAI_API_KEY"),
"base_url": os.getenv("OPENAI_BASE_URL", None),
"temperature": 0.7,
"timeout": 120,
}
MAX_ROUND = 20 # 最大发言轮次,避免无限循环
WORK_DIR = "./output" # 代码和会话历史存储目录
os.makedirs(WORK_DIR, exist_ok=True)
# ------------------------------ 定义智能体角色 ------------------------------
# 1. 产品经理Agent
product_manager = AssistantAgent(
name="产品经理",
system_message="""你是拥有10年经验的资深互联网产品经理,擅长从用户需求出发输出完整的PRD文档。
工作流程:
1. 拆解用户需求,明确需求背景、目标用户、核心价值
2. 输出功能列表:核心功能(必做)、扩展功能(可选)
3. 输出非功能需求:性能要求、兼容性要求、安全要求
输出规则:
- 内容必须结构化,分点清晰
- 输出完成后必须标注【PRD输出完成】,等待架构师输出技术方案
- 如果用户提出修改需求,必须重新调整PRD,直到用户确认
""",
llm_config=LLM_CONFIG,
)
# 2. 架构师Agent
architect = AssistantAgent(
name="架构师",
system_message="""你是拥有8年经验的资深Python架构师,擅长根据PRD输出可落地的技术方案。
工作流程:
1. 基于PRD选择合适的技术栈,明确依赖库
2. 输出系统架构:模块划分、数据结构设计、交互流程
3. 输出开发规范和注意事项
输出规则:
- 内容必须结构化,逻辑清晰
- 输出完成后必须标注【技术方案输出完成】,等待程序员开发代码
- 有疑问可以向产品经理提问确认需求
""",
llm_config=LLM_CONFIG,
)
# 3. 程序员Agent
coder = AssistantAgent(
name="程序员",
system_message="""你是拥有5年经验的资深Python开发工程师,擅长根据技术方案输出可运行的高质量代码。
工作流程:
1. 基于技术方案编写代码,代码必须符合PEP8规范,有详细注释
2. 必须包含异常处理、边界情况处理
3. 代码开头要注明依赖库的安装命令
输出规则:
- 输出完整的可运行代码,不要省略核心逻辑
- 输出完成后必须标注【代码输出完成】,等待测试工程师测试
- 如果代码运行报错,必须根据错误信息修改代码,直到运行成功
""",
llm_config=LLM_CONFIG,
)
# 4. 测试工程师Agent
tester = AssistantAgent(
name="测试工程师",
system_message="""你是拥有6年经验的资深测试工程师,擅长针对代码编写测试用例并执行验证。
工作流程:
1. 基于程序员输出的代码,编写单元测试用例,覆盖所有核心功能
2. 执行测试用例,输出测试结果
3. 如果发现bug,必须明确说明复现步骤、实际结果、预期结果
输出规则:
- 测试用例要覆盖正常场景和异常场景
- 测试通过必须标注【测试通过】,等待代码审查员审查
- 有疑问可以向程序员确认代码逻辑
""",
llm_config=LLM_CONFIG,
code_execution_config={"work_dir": WORK_DIR, "use_docker": False},
)
# 5. 代码审查员Agent
code_reviewer = AssistantAgent(
name="代码审查员",
system_message="""你是拥有10年经验的资深代码审查专家,擅长从多个维度评估代码质量。
工作流程:
1. 从可读性、性能、安全性、可维护性四个维度审查代码,给出1-10分的评分
2. 输出优化建议,严重问题要求程序员修改
3. 代码达标后,总结整个任务的输出结果
输出规则:
- 审查通过必须标注【代码审查通过】
- 最终总结必须标注【任务完成】,结束整个流程
""",
llm_config=LLM_CONFIG,
)
# 6. 用户代理Agent
user_proxy = UserProxyAgent(
name="用户",
system_message="你是提出需求的用户,可以随时对各个智能体的输出提出修改意见,确认任务完成。",
human_input_mode="TERMINATE_ONLY", # 仅任务终止时需要用户确认,其他时候自动执行
max_consecutive_auto_reply=10,
code_execution_config={"work_dir": WORK_DIR, "use_docker": False},
)
# ------------------------------ 自定义群聊规则 ------------------------------
AGENT_LIST = [user_proxy, product_manager, architect, coder, tester, code_reviewer]
def custom_speaker_selection(last_speaker, groupchat):
"""自定义发言顺序规则,控制整个协作流程"""
latest_msg = groupchat.messages[-1]["content"] if groupchat.messages else ""
# 用户发言后,产品经理先出PRD
if last_speaker == user_proxy:
return product_manager
# 产品经理出完PRD,架构师出方案
if last_speaker == product_manager and "【PRD输出完成】" in latest_msg:
return architect
# 架构师出完方案,程序员写代码
if last_speaker == architect and "【技术方案输出完成】" in latest_msg:
return coder
# 程序员出完代码,测试工程师测试
if last_speaker == coder and "【代码输出完成】" in latest_msg:
return tester
# 测试发现bug,返回给程序员修改
if last_speaker == tester and "bug" in latest_msg.lower():
return coder
# 测试通过,代码审查员审查
if last_speaker == tester and "【测试通过】" in latest_msg:
return code_reviewer
# 代码审查发现问题,返回给程序员修改
if last_speaker == code_reviewer and "修改" in latest_msg:
return coder
# 代码审查通过,返回给用户确认
if last_speaker == code_reviewer and "【代码审查通过】" in latest_msg:
return user_proxy
# 其他情况由管理器自动选择
return None
# ------------------------------ 初始化群聊 ------------------------------
groupchat = GroupChat(
agents=AGENT_LIST,
messages=[],
max_round=MAX_ROUND,
speaker_selection_method=custom_speaker_selection,
)
manager = GroupChatManager(
groupchat=groupchat,
llm_config=LLM_CONFIG,
system_message="你是群聊管理员,严格按照规则协调各个智能体的发言顺序,确保任务顺利完成。当输出包含【任务完成】时,终止群聊。",
)
# ------------------------------ 持久化会话历史 ------------------------------
def save_chat_history(chat_id, messages):
"""保存会话历史到本地文件"""
history_path = os.path.join(WORK_DIR, f"chat_history_{chat_id}.json")
with open(history_path, "w", encoding="utf-8") as f:
json.dump(messages, f, ensure_ascii=False, indent=2)
print(f"会话历史已保存到:{history_path}")
# ------------------------------ 启动群聊 ------------------------------
if __name__ == "__main__":
user_task = input("请输入你的开发需求:")
chat_id = datetime.now().strftime("%Y%m%d%H%M%S")
print(f"群聊ID:{chat_id},任务开始执行...")
# 启动群聊
chat_result = user_proxy.initiate_chat(
manager,
message=f"用户需求:{user_task},请各个角色按照流程完成任务。",
)
# 保存会话历史
save_chat_history(chat_id, groupchat.messages)
print("任务执行完成!")
3.5 运行效果演示
运行代码后,输入需求:做一个待办事项的Python命令行工具,支持增删改查待办,数据存在本地JSON文件,系统会自动执行以下流程:
- 产品经理输出完整的PRD文档,包含需求背景、功能列表、非功能需求
- 架构师输出技术方案,选择用
json模块存储数据,设计待办数据结构 - 程序员输出完整的Python代码,包含增删改查所有功能
- 测试工程师编写单元测试用例,执行代码验证功能正确性
- 代码审查员给出代码评分和优化建议,确认代码达标后输出最终结果
整个过程不需要人工干预,5-10分钟就能输出完整的可运行代码,比单智能体效率提升至少3倍。
四、边界与外延
4.1 适用场景
这套多智能体群聊系统适用于以下场景:
- 软件开发全流程:从需求分析到代码输出、测试、评审全流程自动化
- 内容创作:文案、方案、论文、视频脚本的多角色协作创作,比如策划+撰稿+校对+运营的组合
- 数据分析:数据采集+清洗+建模+报告输出的全流程自动化
- 科研协作:文献调研+实验设计+论文写作+审稿的多智能体协作
- 客户服务:售前咨询+技术支持+售后处理的多角色智能客服群聊
4.2 不适用场景
以下场景不适合使用多智能体群聊系统:
- 高实时性要求场景:比如自动驾驶、实时交易,群聊的轮次延迟无法满足实时性要求
- 高安全敏感场景:比如金融转账、核心系统操作,多智能体的输出不可控,容易出现安全风险
- 极度简单的任务:比如查天气、问时间,单智能体几秒就能搞定,用多智能体反而浪费资源
- 需要物理世界交互的场景:比如机器人操作,需要对接硬件设备,当前多智能体还无法很好的支持
4.3 扩展方向
你可以基于这套系统做以下扩展:
- 接入私有知识库:给每个智能体接入企业内部的知识库,让输出更符合企业规范
- 扩展工具集:添加网页搜索、API调用、数据库查询、文件读写等工具,提升智能体的能力边界
- 支持多模态输入输出:添加语音识别、图像识别、生成能力,支持语音、图片等输入输出
- 对接企业内部系统:对接企业的OA、CRM、代码仓库等系统,直接把结果同步到内部系统
- 添加可观测性:接入AgentOps、LangFuse等监控工具,监控每个智能体的耗时、Token消耗、错误率
五、最佳实践与常见问题
5.1 最佳实践Tips
- 角色边界要清晰:每个智能体的职责要明确,不要重叠,避免出现两个智能体抢着做同一件事的情况
- 输出规则要明确:给每个智能体的System Prompt里明确要求输出格式、终止关键词,减少管理器的决策成本
- 优先用自定义发言规则:尽量不要用AutoGen默认的自动选择发言者模式,自定义规则可以大幅提升流程的可控性,减少乱序发言的概率
- 大小模型搭配使用:简单任务用小模型(比如GPT-3.5-turbo),复杂决策用大模型(比如GPT-4o),可以降低60%以上的成本
- 设置最大轮次限制:一定要给群聊设置max_round参数,避免出现无限循环的情况
- 添加人类审核节点:涉及到生产部署、资金操作的场景,必须加人类审核节点,确认无误后再执行
- 会话历史截断:定期对历史会话做摘要,减少上下文长度,避免溢出,同时降低Token消耗
5.2 常见问题解决
- 群聊无限循环怎么办?:检查是否设置了明确的终止关键词,发言规则是否有逻辑漏洞,max_round是否设置的过大
- 智能体输出无关内容怎么办?:优化System Prompt,明确角色职责和输出要求,给角色加更多的限制条件
- Token消耗太高怎么办?:用小模型做简单任务,会话历史做摘要截断,减少不必要的输出内容
- 智能体调用工具失败怎么办?:检查工具的注册逻辑,给智能体的System Prompt里明确说明工具的调用方式和参数要求
六、行业发展与未来趋势
多智能体领域的发展历程和未来趋势如下表所示:
| 时间 | 发展阶段 | 核心特点 | 代表产品 |
|---|---|---|---|
| 2022年及以前 | 学术研究阶段 | 多智能体仅在实验室环境下验证,没有落地能力 | 无成熟商用产品 |
| 2023年Q3 | 框架落地阶段 | 微软推出AutoGen,首次原生支持群聊式多智能体协作,开发者可以快速搭建多智能体应用 | AutoGen、CrewAI |
| 2024年Q1 | 平台化阶段 | 各大厂商推出多智能体平台,支持低代码搭建,降低使用门槛 | 通义智能体平台、字节CoAgent、百度智能体平台 |
| 2024年Q4 | 生产级落地阶段 | 可观测性、安全性、可控性能力完善,多智能体开始大规模在企业生产环境落地 | 集成AgentOps、LLM安全网关的多智能体系统 |
| 2025年及以后 | 大规模协同阶段 | 支持百万级智能体协同,和物理世界的机器人、IoT设备打通,成为数字世界的核心生产力 | 通用人工智能协作网络 |
结论
本文从AutoGen的核心概念讲起,一步步带你搭建了一套可直接运行的面向软件开发场景的多智能体群聊系统,讲解了系统的架构设计、核心实现、优化方案和最佳实践。多智能体协作是下一代大模型应用的核心方向,它可以把大模型的能力从「单人生产力工具」提升到「团队协作平台」,带来10倍甚至100倍的效率提升。
行动号召
- 你可以基于本文提供的代码,修改成适合自己场景的多智能体群聊系统,比如内容创作、数据分析等
- 欢迎在评论区分享你搭建的多智能体应用场景和遇到的问题,我会一一解答
- 如果你觉得本文对你有帮助,欢迎点赞、收藏、转发给更多的朋友
未来展望
未来3年,多智能体系统会像现在的SaaS软件一样普及,每个企业都会有自己的智能体团队,替代大部分重复性的脑力劳动。现在提前学习多智能体相关技术,提前布局,你就可以享受到下一代技术革命的红利。
附加部分
参考文献与延伸阅读
- AutoGen官方文档:https://microsoft.github.io/autogen/
- AutoGen论文:《AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation》
- AgentOps官方文档:https://agentops.ai/docs
- 多智能体最佳实践:https://github.com/microsoft/autogen/tree/main/notebooks
作者简介
我是一名资深AI应用开发工程师,拥有6年大模型落地经验,主导过多个百万级用户的AI应用开发,专注于分享大模型应用开发、多智能体系统搭建的实战经验,欢迎关注我的账号获取更多干货内容。
更多推荐




所有评论(0)