多 Agent 工作流:从概念到落地

文章目录

  • [多 Agent 工作流:从概念到落地](#多 Agent 工作流:从概念到落地)

多 Agent 工作流:从概念到落地

当一个大模型不够用时,我们开始思考:能不能让多个 Agent 协作?


为什么需要多 Agent?

单体 Agent 有一个难以逾越的天花板:上下文窗口

当你让一个模型同时做三件事------理解 PRD、写后端 API、写前端组件------它的注意力会被稀释。更致命的是,一旦上下文窗口被压缩,它可能忘记 PRD 里某个关键约束,导致后端和前端对不齐。

多 Agent 的核心思路是分治

复制代码
一个 Agent 只专注一件事 → 多个 Agent 并行工作 → 编排器汇总结果

这不是什么新概念。操作系统里有进程隔离,微服务里有服务拆分,数据库里有分片。多 Agent 只是把这个思想搬到了 LLM 应用层。


四种核心模式

业界所有多 Agent 系统,底层不外乎这四种模式的排列组合:

1. 顺序流水线(Sequential Pipeline)

复制代码
Agent A ──→ Agent B ──→ Agent C
(分析)     (编码)      (测试)

最经典的模式。每个 Agent 只做一件事,输出是下一个的输入。适用场景:数据加工、文档生成、代码审查流水线。

优点 :逻辑清晰,易于调试------每个阶段的输入输出都是确定的。

缺点:慢。三个 Agent 各花 10 秒,总耗时就是 30 秒。而且一个步骤挂了,后面全废。

真实案例:视频剪辑的 Stage1→Stage2→Stage3→Stage4 流水线。Stage1 提取视频信息,Stage2 转写音频,Stage3 生成剪辑方案,Stage4 合成视频。每一步的输出是下一步的输入,没法并行。

python 复制代码
# LangGraph 风格:每个节点是独立函数,图定义顺序
class State(TypedDict):
    videos: List[VideoInfo]
    transcripts: List[Transcript]
    mix_plan: MixPlan

graph = StateGraph(State)
graph.add_node("extract_info", stage1_extract)
graph.add_node("transcribe", stage2_transcribe)
graph.add_node("analyze", stage3_analyze)
graph.add_node("compose", stage4_compose)

graph.add_edge("extract_info", "transcribe")
graph.add_edge("transcribe", "analyze")
graph.add_edge("analyze", "compose")

2. 并行 + 汇合(Fork-Join)

复制代码
       ┌─ Agent A (用户模块) ─┐
       ├─ Agent B (订单模块) ─┼──→ 编排器 ──→ 合并
       └─ Agent C (支付模块) ─┘

对独立任务最友好的模式。多个 Agent 同时开工,互不干扰,最后汇总。

优点 :充分利用并行能力,总耗时 = max(各 Agent 耗时) 而非 sum。

缺点 :合并阶段是瓶颈。Agent A 和 Agent B 可能都改了 utils/helper.py,合并时冲突。

关键设计问题:「怎么确保并行 Agent 互不干扰?」

业界答案基本都是隔离

隔离方式 代表方案 特点
Git Worktree Claude Code subagent 每个 Agent 在独立分支上工作,Git 兜底合并
Docker Sandbox LangGraph + Docker 每个 Agent 跑在独立容器里
虚拟文件系统 Codex CLI 每个 Agent 有自己的 overlay,合并时冲突检测
python 复制代码
# 并行派发的伪代码(CrewAI 风格)
crew = Crew(
    agents=[
        Agent(role="用户模块开发", task="实现用户注册"),
        Agent(role="订单模块开发", task="实现下单流程"),
        Agent(role="支付模块开发", task="实现支付回调"),
    ],
    process=Process.parallel  # 三个 Agent 同时开工
)
result = crew.kickoff()

3. 对话协商(Conversational / Debate)

复制代码
Agent A ⇄ Agent B
(生成)   (审查)

多轮对话直到达成一致

两个 Agent 互相对话,一个生成、一个审查;或者一个有想法、另一个反驳。典型场景:代码 review、创意 brainstorming、安全审计。

优点 :天然的质量控制,两个模型的盲区可能不重叠。

缺点:慢,而且两个 Agent 可能陷入无限辩论死循环。

AutoGen 的 GroupChat 是实现典范

python 复制代码
# AutoGen: Agent 在群聊中互发消息
groupchat = autogen.GroupChat(
    agents=[coder, reviewer, product_manager],
    messages=[],
    max_round=10  # 最多 10 轮对话,防止死循环
)
manager = autogen.GroupChatManager(groupchat=groupchat)

# Coder 写代码 → Reviewer 检查 → PM 确认需求 → Coder 修改 → ...
coder.initiate_chat(manager, message="实现用户登录功能")

4. 层级委派(Hierarchical)

复制代码
           ┌──── 编排器 ────┐
           │                │
      ┌────┴────┐      ┌───┴───┐
      │ Team A  │      │ Team B│
      │ Leader  │      │ Leader│
      └────┬────┘      └───┬───┘
      ┌────┴────┐      ┌───┴───┐
      │Worker 1 │      │Worker 3│
      │Worker 2 │      │Worker 4│
      └─────────┘      └───────┘

只有复杂到一定程度的系统才需要。编排器不直接管理 Worker,而是管理多个 Team Leader,Team Leader 再管理自己的 Worker。

优点 :天然可扩展,单编排器上下文窗口不再是瓶颈。

缺点:延迟高,多了一层转发;而且中间的 Leader 如果理解错了编排器的意图,Worker 白干。

python 复制代码
# CrewAI 的层级模式
team_a = Crew(
    agents=[team_lead_a, worker_1, worker_2],
    process=Process.hierarchical,
    task=Task(description="实现前端页面")
)
team_b = Crew(
    agents=[team_lead_b, worker_3, worker_4],
    process=Process.hierarchical,
    task=Task(description="实现后端接口")
)

# 顶层编排
top_crew = Crew(
    agents=[team_a, team_b],
    process=Process.sequential  # Team A 和 B 可以进一步并行
)

框架对比

先把话说在前头:没有最好的框架,只有适合你场景的框架。以下不是排名,是按设计哲学分类:

框架 设计哲学 多 Agent 通信 核心优势 核心局限
LangGraph 状态图(DAG) State 对象在节点间传递 精确的控制流,可检查点恢复 需要写大量 Python 胶水代码
CrewAI 角色扮演 Agent 间委托 + 层级 开箱即用,概念直观 灵活性低,复杂流程难定义
AutoGen 对话驱动 Agent 间直接发消息(GroupChat) 自然的对话式协作,多轮协商 对话轮次难收敛,token 消耗大
OpenAI Agents SDK 工具调用 Handoff(上下文移交) 和 OpenAI 生态深度集成 绑定 OpenAI,且不支持真正并行
Claude Code Subagents Git-backed 编排 子代理→编排器单向返回 零基础设施,Git 做隔离和合并 依赖 Claude Code 运行时,开放式流程

前三个是"你需要集成到自己的应用里"的开发框架。后两个是"在 CLI 里直接用"的工作模式。


深入:Claude Code 的 Subagent 模式

作为最近在实际项目中落地过多 Agent 工作流的团队,我们对 Claude Code 的 subagent 机制感触最深。

背景

Claude Code 的 subagent 本质上是一个独立进程中的 Claude 实例

复制代码
主 Claude(编排器)
  │
  ├── Agent("feat-user-auth")     → 独立 worktree,独立上下文
  ├── Agent("feat-order-api")     → 独立 worktree,独立上下文
  └── Agent("feat-payment-flow")  → 独立 worktree,独立上下文

每个 subagent:

  • 有自己的独立上下文窗口(不消耗主 Claude 的上下文)
  • 工作在Git Worktree 中(物理文件系统隔离)
  • 通过 run_in_background: true 可以并行执行
  • 完成后返回结构化结果(状态、变更文件、commit hash)

实际工作流

这是我们在视频剪辑项目中落地的完整流程:

复制代码
阶段零:预检
  ├── 检查 git 状态(必须干净)
  └── 解析 tasks.md 中的任务列表

阶段一:任务审查
  ├── 模糊任务 → brainstorming 澄清需求
  └── 澄清后 → writing-plans 生成实现计划

阶段二:并行派发
  ├── 拓扑排序:无依赖 → 第一批并行
  ├── Agent A (feat-xxx) ─┐
  ├── Agent B (fix-yyy)  ─┼─ 三个 worktree 同时开工
  └── Agent C (feat-zzz) ─┘

阶段三:代码审查(串行,逐任务)
  ├── code-reviewer 对照计划审查
  └── simplify 自动优化

阶段四:合并验收
  ├── 逐任务 merge(冲突 → 子代理消解)
  └── 汇总运行所有子代理的测试

阶段五:输出报告

几个关键设计决策:

1. 为什么用 Git Worktree 做隔离?

因为 Git 已经有了 20 年验证的合并引擎。当三个 Agent 改了同一个文件,git merge 的冲突标记天然就是"多 Agent 冲突解决"------不需要自己实现合并逻辑。Worktree 让每个 Agent 在独立的文件系统副本中工作,是真正的物理隔离,不是"请 Agent A 不要碰 Agent B 的文件"这种 prompt 层面的软约束。

2. 为什么子代理不互相通信?

AutoGen 让 Agent 发消息辩论,CrewAI 让 Agent 委托任务。我们选择只让子代理向编排器汇报。原因很简单:代码生成任务中,两个 Agent 辩论怎么改代码,效率远低于一个 Agent 直接改然后让 code-reviewer 做静态审查。Agent 间的对话在创意性任务(设计评审、需求澄清)中有用,在实现任务中是反模式------多一轮对话就是多一倍延迟。

3. 为什么 merge 不自动解决冲突?

这是项目实际踩过的坑。简单冲突(≤3 个文件、≤30 行)可以派子代理消解后展示 diff 让人类确认;复杂冲突直接中止,让人类决定。Git 冲突标记需要理解双方的语义意图才能正确消解,而当前模型在这方面还不够可靠------它可能合并出一个"语法上没问题但逻辑完全错"的结果。

这个模式的真正优势

不是"功能更丰富",而是更务实

  • 零基础设施。不需要部署 LangGraph 服务,不需要配置 AutoGen 消息总线。Claude Code + Git 就是全部。
  • Git 是唯一的状态层。进度存在 tasks.md 的打勾状态里,代码变更存在 git 分支上。会话断了不丢进度,换一台机器 git pull 接着干。
  • 人始终在环路中。每个关键阶段有明确的确认点,用户可以随时说"跳过这个"或"停,这里不对"。

这个模式的局限

要坦诚地写出来:

局限 说明
编排器上下文是瓶颈 5 个阶段 + 所有子代理的返回摘要塞在一个会话,任务数 > 10 时上下文压力很大
合并是串行的 开发可以并行,但 merge 必须一笔一笔来
无自动依赖检测 依赖关系全靠人在 tasks.md 里写,两个 Agent 悄无声息改了同一个文件不会被警告
子代理无状态 子代理不能"之前改过这个文件,这次接着改"------每次都是全新上下文

什么时候用什么模式?

一个不精确但实用的选择指南:

复制代码
你的任务是:
  ├── 有严格顺序依赖(B 必须等 A 的结果)?
  │   └── Sequential Pipeline
  │
  ├── 多个独立子任务,最后要汇总?
  │   └── Fork-Join
  │
  ├── 需要多个视角审校同一份内容(如代码 review、论文审阅)?
  │   └── Conversational / Debate
  │
  ├── 任务极其复杂,单一编排器管不过来?
  │   └── Hierarchical
  │
  └── 只是一个简单的多步骤任务?
      └── 别上 Agent 了,一个模型就够了

大多数实际系统的多 Agent 流程是这四种模式的组合。比如视频剪辑项目:Sequential Pipeline(Stage1→Stage4 主流程)嵌套 Fork-Join(Stage3 内部并行派发),最后以 Conversational(code-reviewer 对照计划审查)收尾。


写在最后

多 Agent 不是一个要不要上的问题,而是一个用到什么程度的问题。

目前这个阶段,最好的策略是够用就好

  • 能用单 Agent 解决的别上多 Agent
  • 能 Fork-Join 的就别上 Hierarchical
  • 能 Git Worktree 隔离的就别上 Docker
  • 能让人在环路中的就别全自动

多 Agent 的核心价值从来不是"看起来更酷",而是每个 Agent 只专注一件事,从而在有限的上下文窗口里做得更好。理解这一点,比追着框架跑更重要。


PS:本文基于在实际项目中落地多 Agent 工作流的经验写成,如果觉得写的还不错或者对你有所帮助,记得三连

相关推荐
zhoumeina998 小时前
前端串行合成流程 + 每张图上传接口
前端·状态模式
weixin_471383039 小时前
preload,prefetch,preconnect
状态模式
前端不太难10 小时前
内存带宽、超长上下文与解码效率:AI推理的三大核心制约
人工智能·状态模式
五阿哥永琪20 小时前
前后端跨域的解决办法
状态模式
Komorebi_99991 天前
LangChain Day6 前端视角:简易接口联调思路
状态模式
叶小鸡1 天前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day4
状态模式
shjsjdmmd1 天前
Claude API 流式输出(SSE)实战指南:从打字机效果到 Agent 工具调用完整落地
状态模式
前端不太难1 天前
解码大模型的效率革命:当算力不再是唯一瓶颈
状态模式
前端不太难1 天前
从算力到存力:AI性能的决定性因素正在重构
人工智能·重构·状态模式