多智能体架构设计模式排行榜:主管与流水线模式深度评测

2026-06-03阅读 0热度 0
架构设计

为什么需要多 Agent 协同?

前八篇内容围绕单 Agent 系统展开:一个 LLM、一组工具、一条对话历史。这套方案能覆盖大多数场景,这是事实。

Agent 系列(9):多 Agent 架构设计模式——Supervisor 与 Pipeline

但有些任务天生需要“多专家”分工:

  • 撰写技术文章:研究员收集素材、写手起草、编辑润色——三个角色,三种思考模式
  • 处理用户工单:意图识别、知识库检索、回复生成——三个阶段,各自独立可验证
  • 代码审查:静态分析、安全扫描、可读性评估——三个维度,互不影响

单 Agent 当然也能处理这些任务,但你会发现 System Prompt 越堆越长,输出质量却越来越不稳定——原因很简单:你强迫一个角色同时扮演所有专家。

多 Agent 的核心价值在于职责分离:每个 Agent 只专注一件事,并把这件事做到极致。

两种主流架构模式

多 Agent 系统存在多种拓扑结构,其中两种最常见:

Supervisor 模式(动态路由)和 Pipeline 模式(固定顺序)。通俗地说,Supervisor 模式像有一个“指挥中心”决定下一步调用哪个专家;而 Pipeline 模式像流水线作业,执行路径从一开始就固化在代码里,每个 Agent 只知道自己当前的上下文和下一节点。

两种模式并非互斥,它们适用于完全不同的问题域。

Demo 1:Supervisor 模式

设计思路

Supervisor 模式的核心挑战是路由可靠性。如果让 LLM 每一步都去决策“下一个调谁”,常见问题会反复出现:

  • 重复调用同一个 Worker
  • 遗漏记录已调用过的 Worker
  • 不确定何时终止流程

更优的设计是两阶段混合策略:

Phase 1:让 LLM 完成一次任务分类(判断属于 simple_fact 还是 full_article)
Phase 2:Python 根据分类结果和已调用列表执行确定性路由

换句话说,LLM 负责“识别任务类型”,Python 负责“按规则调度”。这个分工非常合理。

LangGraph 实现

class SupervisorState(TypedDict):
messages: Annotated[list, add_messages]
task: str
task_type: str # "simple_fact" or "full_article"
called: list[str]
next: str

def classify_node(state: SupervisorState) -> SupervisorState:
"""LLM 做一次分类,结果写入 state,后续路由全程可用"""
decision = _ask(
"Classify this task:\n"
"simple_fact— a factual question with a direct short answer\n"
"full_article — needs research, writing, and editorial review\n"
"Output one word only: simple_fact / full_article",
f"Task: {state['task']}",
).strip().lower()
task_type = "full_article" if "full_article" in decision else "simple_fact"
return {**state, "task_type": task_type}

def supervisor_node(state: SupervisorState) -> SupervisorState:
"""纯 Python 路由,不调 LLM,不会循环"""
called = state["called"]
task_type = state["task_type"]
if "researcher" not in called:
next_worker = "researcher"
elif task_type == "simple_fact":
next_worker = "FINISH" # 简单问题:研究完就结束
elif "writer" not in called:
next_worker = "writer"
elif "reviewer" not in called:
next_worker = "reviewer"
else:
next_worker = "FINISH"
return {**state, "next": next_worker}

图的拓扑结构

g = StateGraph(SupervisorState)
g.set_entry_point("classify")
g.add_edge("classify", "supervisor")
g.add_conditional_edges(
"supervisor",
route_supervisor,
{
"researcher": "researcher",
"writer": "writer",
"reviewer": "reviewer",
"FINISH": END
},
)
g.add_edge("researcher", "supervisor")
g.add_edge("writer", "supervisor")
g.add_edge("reviewer", "supervisor")

整个执行流程:classify → supervisor → [workers] → supervisor → ... → FINISH,形成一个可控循环。

实测执行结果

任务:"Write a short article about Python list comprehensions"

[classify] task_type = full_article
[supervisor] → researcher
[researcher] working...
[supervisor] → writer
[writer] working...
[supervisor] → reviewer
[reviewer] working...
[supervisor] → FINISH
Workers called: ['researcher', 'writer', 'reviewer']
Task type : full_article

classify 只执行一次,后续路由全程由 Python 控制,执行链非常清晰:researcher → writer → reviewer → FINISH。

Demo 2:Pipeline 模式

Pipeline 的代码量比 Supervisor 少很多——因为完全不需要路由逻辑。

class PipelineState(TypedDict):
topic: str
outline: str
draft: str
polished: str
stage_log: list[str]

def outline_agent(state: PipelineState) -> PipelineState:
outline = _ask("创建一个 5 点大纲...", state["topic"])
return {**state, "outline": outline, "stage_log": [...]}

def draft_agent(state: PipelineState) -> PipelineState:
draft = _ask("基于大纲写 200 字草稿...", state["outline"])
return {**state, "draft": draft, "stage_log": [...]}

def polish_agent(state: PipelineState) -> PipelineState:
polished = _ask("润色...", state["draft"])
return {**state, "polished": polished, "stage_log": [...]}

# 拓扑:outline → draft → polish → END
g.add_edge("outline_agent", "draft_agent")
g.add_edge("draft_agent", "polish_agent")
g.add_edge("polish_agent", END)

实测执行结果

[outline_agent] 957 chars
[draft_agent] 1846 chars
[polish_agent] 2168 chars
最终输出(前 300 字):"### Unveiling the Power of List Comprehensions in Python
Python's lists are dynamic and powerful data containers...

每个阶段的输出作为下一阶段的输入,内容逐步丰富:大纲 957 字符 → 草稿 1846 → 润色 2168。

整个流程没有任何 LLM 的路由决策——路径在编码阶段就已固定。

Demo 3:同一张图,不同执行路径

Supervisor 模式最直观的优势是什么?不修改代码的前提下,不同任务能自动走不同执行路径。

用同一个 Supervisor 图执行一个简单的事实问题:

任务:"What year was Python created?"
[classify] task_type = simple_fact
[supervisor] → researcher
[researcher] working...
[supervisor] → FINISH
Workers called : ['researcher']
Task type: simple_fact

结果很明确:researcher → FINISH,writer 和 reviewer 均被跳过。

对比两次运行:

任务 Workers 调用链 步骤数
──────────────────────────────────────────────────────────────────────
Write article (full_article) researcher→writer→reviewer 3
Factual question (simple_fact) researcher 1

同一个 Supervisor 图,仅靠任务分类自动选择不同执行路径。
Pipeline 无法做到这一点——它的路径在代码里已经写死。

模式选择矩阵

维度 Pipeline Supervisor
──────────────────────────────────────────────────────────────────────
执行路径 固定,写死在代码里 动态,分类驱动
最适合场景 ETL 流水线、文档处理 研究、开放问答、混合任务
可调试性 高(线性 trace) 中(路径随任务变化)
LLM 调用次数 N(每阶段一次) N + 1(多一次分类调用)
灵活性 低 高
可预测性 高 较低
实现复杂度 简单 中等

经验法则在这里非常清晰:

多 Agent 设计 Checklist

架构选型

  • 任务步骤固定且已知 → Pipeline;需要动态决策 → Supervisor
  • Worker 数量 ≤ 3 且职责清晰时,两种模式都可行
  • Worker 数量 > 5 时,考虑分层 Supervisor(Supervisor of Supervisors)

State 设计

  • 每个 Worker 只读自己需要的字段,只写自己生成的字段
  • Supervisor 状态必须包含 called: list[str],用于路由去重
  • Pipeline 状态按阶段命名(outline, draft, polished),便于调试

路由可靠性

  • 避免纯 LLM 路由(LLM 无法可靠追踪调用历史)
  • 推荐:LLM 做一次分类 + Python 做确定性路由
  • 设置 recursion_limit(建议 20–30),防止意外循环

Worker 设计

  • 每个 Worker 只做一件事,输入输出明确
  • Worker 之间通过 State 传递结果,不直接相互调用
  • 写好 Worker 的 System Prompt,不要让它猜测上下文

可观测性

  • 在每个节点打印执行日志(worker 名称、输入/输出摘要)
  • 记录 called 列表,方便回溯路由决策
  • 对异常分支(如 FINISH 提前触发)加 warning log

总结

最后提炼五个核心结论:

  1. 多 Agent 的本质是职责分离:不是为了炫技,而是当单 Agent 的 Prompt 开始失控时,拆成多个专注的角色
  2. Pipeline 胜在简单可预测:执行路径写在代码里,trace 是线性的,测试和调试成本最低
  3. Supervisor 胜在自适应:同一张图,简单问题一步到位,复杂任务全程走完,不需要改代码
  4. LLM 路由 + Python 执行是最佳搭档:让 LLM 做分类(它擅长),让 Python 做路由(它可靠)
  5. called 列表是 Supervisor State 的关键字段:路由确定性的基础,缺了它 Supervisor 容易出现重复调用或死循环

参考资料

  • LangGraph Multi-Agent Concepts
  • LangGraph Supervisor Tutorial
  • 本系列完整 Demo 代码:agent-08-multi-agent
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策