单 Agent 与多 Agent 架构对比及选型指南
对比了单 Agent 与多 Agent 系统的架构差异、优劣势及适用场景。单 Agent 适合简单任务,集成简便但上下文易爆炸;多 Agent 适合复杂任务,分工协作且鲁棒性强。文章提供了基于 Python 和 LangGraph 的主管模式多 Agent 系统实战代码示例,帮助开发者根据业务需求选择合适的 AI 团队组建方案。

对比了单 Agent 与多 Agent 系统的架构差异、优劣势及适用场景。单 Agent 适合简单任务,集成简便但上下文易爆炸;多 Agent 适合复杂任务,分工协作且鲁棒性强。文章提供了基于 Python 和 LangGraph 的主管模式多 Agent 系统实战代码示例,帮助开发者根据业务需求选择合适的 AI 团队组建方案。

在 AI 大模型风靡的今天,Agent(智能体)这个概念已经不再陌生。它们就像一个个拥有'思考'和'行动'能力的 AI 小助手,能帮我们完成各种任务。当任务变得越来越复杂,是选择让一个'全能选手'包办一切,还是组建一个'梦之队'来分工协作呢?
核心概念: 单 Agent 系统通常依赖一个大型语言模型(LLM)作为其'大脑',并通过模型上下文协议(MCP)等机制,集成各种外部工具和数据源。
优势解读:
挑战与局限:

核心概念: MAS 系统由多个专业化的 Agent 组成,每个 Agent 专注于特定任务,通过相互通信、协调和协作来完成复杂任务。
优势解读:
挑战与局限:

| 维度 | 单 Agent + MCP | 多 Agent (MAS) |
|---|---|---|
| 主要交互模式 | Agent ↔ 工具/资源 | Agent ↔ Agent;Agent ↔ 工具/资源 |
| 任务复杂度处理 | 依赖中心智能体编排 | 通过任务分解和专业化 |
| 可扩展性 | 增加工具扩展功能 | 增加智能体扩展规模 |
| 推理能力 | 单一模型处理多种任务 | 配置专门的推理策略 |
| 鲁棒性/容错性 | 较低,单点故障风险 | 较高,分布式特性 |
| 上下文管理 | 易爆炸,导致语义丢失 | 各 Agent 上下文精简 |
| 适用场景 | 简单、清晰的任务 | 复杂、多步骤、需专业化处理 |

单 Agent 就像'一人公司'。业务简单时效率高,但业务暴涨后容易'大脑过载',出现上下文爆炸和语义丢失。
多 Agent 则是'集团公司'。组建专业团队,各司其职,沟通协作。即使某个 Agent 出问题,其他也能补位,保证正常运转。
做一顿简单的家常便饭。任务目标明确,步骤简单,不需要太多复杂协调。例如:查天气、设置闹钟、翻译一句话。
举办一场盛大的家庭聚餐。任务复杂,涉及采购、烹饪、服务等多个环节,需要专业分工。例如:软件开发、科学研究、市场营销活动策划。
我们以 LangGraph 为例,展示经典的**主管模式(Supervisor Pattern)**的多 Agent 系统。包含 Planner(规划师)、Coder(程序员)、Reviewer(审查员)三个 Agent。
pip install langchain langchain-openai langgraph
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langgraph.graph import StateGraph, END
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
class BaseAgent:
def __init__(self, name, system_message):
self.name = name
self.llm = llm.with_config(run_name=name)
self.system_message = system_message
def invoke(self, state):
messages = [("system", self.system_message)]
messages.extend(state["messages"])
response = self.llm.invoke(messages)
return {"messages": [response]}
planner_agent = BaseAgent(
"Planner", "你是一个优秀的规划师。你的任务是根据用户需求,将复杂的任务分解为清晰、可执行的编程步骤。请输出一个步骤列表。"
)
coder_agent = BaseAgent(
"Coder", "你是一个经验丰富的 Python 程序员。你的任务是根据规划师提供的步骤,编写高质量的 Python 代码。请只输出代码,并用```python ```包裹。"
)
reviewer_agent = BaseAgent(
"Reviewer", "你是一个严谨的代码审查员。你的任务是检查程序员编写的 Python 代码,找出潜在的错误、不规范之处,并提出改进建议。如果代码完美,请回复'代码审查通过'。"
)
class AgentState(dict):
messages: list
next: str
def supervisor_node(state: AgentState):
last_message = state["messages"][-1].content
if "代码审查通过" in last_message:
return "end"
elif "步骤列表" in last_message:
return "coder"
elif "Python 代码" in last_message:
return "reviewer"
else:
return "planner"
workflow = StateGraph(AgentState)
workflow.add_node("planner", planner_agent.invoke)
workflow.add_node("coder", coder_agent.invoke)
workflow.add_node("reviewer", reviewer_agent.invoke)
workflow.set_entry_point("planner")
workflow.add_edge("planner", "coder")
workflow.add_edge("coder", "reviewer")
workflow.add_edge("reviewer", "supervisor")
workflow.add_conditional_edges(
"supervisor", supervisor_node, {
"planner": "planner",
"coder": "coder",
"reviewer": "reviewer",
"end": END
},
)
app = workflow.compile()
initial_message = HumanMessage(content="请帮我编写一个 Python 函数,计算斐波那契数列的第 n 项。")
full_conversation = []
for s in app.stream({"messages": [initial_message], "next": "planner"}):
if "__end__" not in s:
node_name = list(s.keys())[0]
message_content = s[node_name]["messages"][-1].content
print(f"--- {node_name} Agent ---")
print(message_content)
full_conversation.append(f"--- {node_name} Agent ---\n{message_content}")
else:
print("--- 任务完成 ---")
full_conversation.append("--- 任务完成 ---")
在实际项目中,可以结合两者优点,构建混合架构。选择哪种架构,关键在于理解任务需求、资源限制以及对系统可扩展性和鲁棒性的要求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online