本文将从以下5个核心维度来讲清多智能体:
定义与本质 (What):从“超级个人”到“超级团队”的转变。为什么要用多智能体?它解决了单智能体的什么痛点(如幻觉、上下文限制、能力泛化与专精的矛盾)?
协作模式 (How - Patterns):智能体之间怎么配合?(流水线、层级制、辩论制等)。这是核心架构。
关键组件 (Components):一个能协作的智能体内部长什么样?(记忆共享、工具链、通信协议)。
主流框架与生态 (Tools):现在的开发者都在用什么造轮子?(AutoGen, CrewAI, LangGraph等)。
实战推演 (Case Study):用一个具体的“软件开发”场景,演示多智能体是如何跑通全流程的。
目录
一、定义与本质
什么是多智能体系统(Multi-Agent System, MAS)?
核心特征:
为什么要研究多智能体系统?
二、协作模式
三、关键组件
四、主流框架
五、实战推演
六、代码展示
CrewAI
AutoGen
一、定义与本质
什么是多智能体系统(Multi-Agent System, MAS)?
多智能体系统是由多个具备自主性、交互性、适应性的智能体(Agent)组成的分布式智能系统。每个智能体可独立感知局部环境、做出自主决策,同时通过通信、协作、竞争或协商等方式与其他智能体 / 环境交互,最终完成单个智能体难以胜任的复杂任务。
核心特征:
自主性:无全局中心控制,智能体独立决策(如无人机自主避障);
交互性:显式(通信协议)/ 隐式(行为观察)交互(如多机器人通过传感器共享位置);
异构性:智能体可具备不同能力、目标、感知范围(如无人机 + 地面机器人协作);
涌现性:系统整体行为由个体交互 “涌现”(如蚁群筑巢的群体智能);
容错性:分布式架构下单个智能体故障不影响系统整体运行。
为什么要研究多智能体系统?
在 ChatGPT 刚出现时,我们追求的是一个全能的单体智能体(Single Agent)。你给它一个复杂的 Prompt,希望它既懂写代码,又懂做设计,还能写文案。
单智能体的瓶颈:
注意力分散:就像一个人同时做三件事,容易顾此失彼,上下文窗口容易被撑爆。
幻觉风险:让一个文科生去写量子力学公式,容易一本正经地胡说八道。
缺乏自我纠错:自己写的代码自己测,很难发现盲点。
多智能体的解法:多智能体不再追求培养一个“全知全能的神”,而是组建一个“拥有不同角色和技能的团队”。
比喻:
单智能体= 一个拿着瑞士军刀的超级个体户。
多智能体= 一个拥有 CEO、产品经理、程序员、测试员的科技创业公司。
在这个系统中,每个智能体只需要在其特定领域内表现出色,通过通信和协作来完成复杂任务。
二、协作模式
多智能体系统的核心不是智能体本身,而是它们之间的连接方式(拓扑结构)。常见的有以下几种模式:
顺序流 :
逻辑:A->B->C。
场景:类似于工厂流水线。Agent A 写大纲,转给 Agent B 写正文,转给 Agent C 润色。
层级制:
逻辑:一个“主脑”智能体负责拆解任务,分发给底层的“执行”智能体,并汇总结果。
场景:用户说“写个贪吃蛇游戏”。主脑拆分为:UI设计任务、逻辑代码任务、测试任务,分发给不同 Agent。
联合协作/讨论:
逻辑:多个 Agent 处于平等地位,共享上下文,互相补充。
场景:医疗会诊。内科 Agent、外科 Agent 和 影像科 Agent 一起讨论病例。
对抗/辩论 :
逻辑:一个负责生成,一个负责挑刺。
场景:写作。Agent A 写文章,Agent B (评论家) 提出尖锐批评,A 修改,如此循环直到 B 满意。
三、关键组件
要让一群 AI 协同工作,仅仅把它们放在一起是不够的,需要以下基础设施:
角色定义 (Role Definition):每个 Agent 必须有清晰的 System Prompt(例如:“你是一个资深 Python 工程师,只关注代码效率,不关心 UI”)。
通信协议 (Communication Protocol):它们怎么交流?是自然语言对话(像人类群聊),还是结构化的 JSON 数据?
共享记忆与状态 (Shared Memory/State):团队需要有一个“白板”。当产品经理改了需求,程序员和测试员必须同时看到更新,否则就会乱套。
工具使用 (Tool Usage):不同的 Agent 拥有不同的权限。产品经理 Agent 只有联网搜索权限,程序员 Agent 拥有文件读写和代码执行权限。
四、主流框架
目前市面上有几个主流框架:
| 框架 | 特点 | 适用场景 |
| AutoGen (Microsoft) | 对话即计算。强调 Agent 之间通过“聊天”来解决问题。极其灵活,支持代码执行。 | 复杂的代码生成、数据分析、需要多轮迭代的任务。 |
| CrewAI | 基于角色扮演。结构化程度高,强调“任务(Task)”和“流程(Process)”的绑定。 | 类似企业工作流,如市场调研报告生成、自动化运营。 |
| LangGraph (LangChain) | 基于图(Graph)和状态机。不仅是对话,更是精准的状态控制。允许开发者定义循环、分支和人类介入点。 | 生产级应用,需要极高可控性和稳定性的复杂业务流。 |
五、实战推演
用AutoGen的逻辑模拟一次全过程:
用户指令:“用 Python 帮我写一个贪吃蛇游戏。”
Admin Agent (用户代理):接收指令,转发给团队。
Agent A (产品经理):分析需求。“需要 pygame 库,界面大小 600x400,要有计分板。发送给 Coder。
Agent B (程序员):编写代码。它写了一段代码,但忘记处理“撞墙死亡”的逻辑。 发出代码。
Agent C (代码审查员/执行器):运行代码。报错!发现蛇撞墙后游戏卡死。反馈错误日志给 Coder:“第 45 行逻辑错误,未处理边界碰撞。”
Agent B (程序员):“收到,正在修复。” 修改代码。再次提交。
Agent C (代码审查员):再次运行。通过。通知 Admin。
Admin Agent:向用户展示最终可运行的代码。
在这个过程中,没有人类介入,是 AI 团队内部通过多轮对话解决了 Bug。
六、代码展示
CrewAI 示例:展示“流水线模式”(像公司部门一样,A做完给B)。
AutoGen 示例:展示“对话协作模式”(像两个人聊天讨论解决问题)。
使用deepseek大模型:
APIKey 获取:https://platform.deepseek.com/usage
BaseURL:DeepSeek 的标准 Base URL 是
https://api.deepseek.com(或者https://api.deepseek.com/v1,通常两个都行,AutoGen 对前者支持很好)。模型名称:通常使用
deepseek-chat(对应 DeepSeek-V3) 或deepseek-coder。
conda create -n agent_test python=3.11 -y
conda activate agent_test
pip install crewai pyautogen openai
pip install litellm 'crewai[tools]'python 你的文件名.py
CrewAI
场景:我们要把“2024年人工智能发展趋势”写成一篇通俗易懂的博客。
角色 A (研究员):负责搜集和总结信息。
角色 B (作家):负责把 A 的总结写成有趣的博文。
import os
from crewai import Agent, Task, Crew, Process, LLM# 1. 配置 DeepSeek LLM
# DeepSeek 的 API 地址通常是 https://api.deepseek.com
# "openai/" 前缀告诉 CrewAI 使用 OpenAI 的协议去连接这个第三方服务
deepseek_llm = LLM(
model="openai/deepseek-chat",
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx", # 替换你的 DeepSeek API Key
base_url="https://api.deepseek.com"
)# 2. 定义智能体 (把 llm=deepseek_llm 传进去)
researcher = Agent(
role='高级技术研究员',
goal='揭示2024年人工智能的关键发展趋势',
backstory='你是一名顶尖的技术分析师,擅长从复杂数据中提炼关键见解。',
verbose=True,
llm=deepseek_llm
)writer = Agent(
role='科技博客作家',
goal='根据研究员的发现,写一篇引人入胜的博客文章',
backstory='你是一名科普作家,擅长把枯燥的科技概念讲得生动有趣。',
verbose=True,
llm=deepseek_llm
)# 3. 定义任务 (跟之前一样)
task1 = Task(
description='分析2024年AI的主要趋势。列出最重要的3点,并简要解释原因。',
agent=researcher,
expected_output='一份包含3个关键AI趋势的简报。'
)task2 = Task(
description='根据研究员的简报,写一篇博文。语气要轻松幽默,使用markdown格式。',
agent=writer,
expected_output='一篇完整的Markdown格式博客文章。'
)# 4. 组建团队 & 运行
crew = Crew(
agents=[researcher, writer],
tasks=[task1, task2],
verbose=True,
process=Process.sequential
)result = crew.kickoff()
print("\n## DeepSeek 产出结果:\n")
print(result)
AutoGen
场景:一个学生和一个老师互相辩论一个数学概念。它们会像微信聊天一样互相发送消息,直到问题解决。
from autogen import AssistantAgent, UserProxyAgent
# 1. 配置 LLM 列表
# 这里把 OpenAI 的地址换成 DeepSeek 的地址
config_list = [
{
'model': 'deepseek-chat', # DeepSeek 的模型名称
'api_key': 'sk-xxxxxxxxxxxxxxxx', # 替换你的 DeepSeek API Key
'base_url': 'https://api.deepseek.com' # 关键点:指定 API 地址
}
]llm_config = {
"config_list": config_list,
"temperature": 0.7,
}# 2. 定义智能体
assistant = AssistantAgent(
name="Math_Teacher",
system_message="你是一位耐心的数学老师。如果学生理解错了,你要温和地纠正。当学生完全理解并说'我明白了'时,回复 TERMINATE 结束对话。",
llm_config=llm_config # 传入配置
)student = UserProxyAgent(
name="Curious_Student",
human_input_mode="NEVER",
max_consecutive_auto_reply=5,
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
code_execution_config=False,
system_message="你是一个对数学感到困惑的小学生。你一直搞不懂'为什么负负得正'。你要不断追问,直到你听懂为止。听懂后说'我明白了'。",
llm_config=llm_config # 传入配置
)# 3. 发起对话
student.initiate_chat(
assistant,
message="老师,我不理解为什么 -2 乘以 -2 会变成 +4?这不合理啊!"
)
通过上面的实战,相信你已经感受到了多智能体系统(MAS)带来的全新的软件工程范式——“涌现能力”。
多智能体系统最大的价值,在于它解耦了复杂性。它不需要一个为了解决所有问题而变得无比臃肿的超级模型,而是通过简单的、专精的小模型(甚至更低成本的模型如 DeepSeek),通过合理的拓扑结构连接,实现了“1+1 > 2”的效果。
总结一下今天的收获:
思维转变:遇到复杂问题,别只想“怎么写个超长 Prompt”,而要通过“怎么拆解任务给不同角色”来解决。
工具选择:想要稳定的业务流,选 流水线;想要开放的探索和代码生成,选 对话流。
🔮 下期预告
现在的智能体虽然能协作,但它们还有一个致命弱点:“记性不好”。一旦对话结束,刚才的经验就丢了。
如果让 AI 团队拥有“长期记忆”,甚至能读取你本地的知识库(PDF/文档)来辅助决策,那战斗力将是核弹级的。
在下一篇文章中,我将带大家深入RAG + Multi-Agent的高阶实战:《给你的 AI 团队装上“大脑”:如何构建基于本地知识库的多智能体系统?》。
👉 关注我,不迷路。动手把今天的代码跑起来,我们在评论区见!