多 Agent 协同机制对比

多 agent 系统通过将复杂任务分解为专门化的独立 agent 来提升 LLM 应用的能力。核心思想是让多个具有不同提示词、工具和职责的 agent 通过结构化的通信模式协作完成任务。主流框架(AutoGen、LangGraph、CrewAI、OpenClaw)都采用图结构或对话模式来编排 agent 交互,强调异步消息传递、可观测性和模块化设计。

主要协作机制

1. 图结构编排(LangGraph)

核心特点

  • 显式定义 agent 节点和状态转移
  • 使用有向图描述工作流
  • 支持条件分支和循环
  • 强类型状态管理

优点

  • ✅ 流程可视化,易于理解和调试
  • ✅ 精确控制执行路径
  • ✅ 适合复杂的非对话型工作流
  • ✅ 状态管理清晰,便于追踪

缺点

  • ❌ 需要预先设计完整流程图
  • ❌ 动态调整流程较困难
  • ❌ 学习曲线较陡峭
  • ❌ 过度设计风险(简单任务也用图)

适用场景

  • 多步骤数据处理管道
  • 需要条件分支的决策流程
  • 需要人工审核节点的工作流
  • 复杂的企业级应用

来源 : LangGraph Multi-Agent Workflows


2. 对话模式(AutoGen)

核心特点

  • Agent 间交互框架为"对话"
  • 支持多轮协商和讨论
  • 异步事件驱动架构(v0.4+)
  • 跨语言互操作(Python、.NET)

优点

  • ✅ 更自然的交互方式
  • ✅ 灵活的协作模式
  • ✅ 支持分布式 agent 网络
  • ✅ 内置可观测性(OpenTelemetry)

缺点

  • ❌ 控制力较弱,难以保证确定性
  • ❌ 对话可能陷入循环或偏离主题
  • ❌ 调试困难(需要追踪完整对话历史)
  • ❌ 成本较高(多轮对话消耗更多 token)

适用场景

  • 需要多方协商的任务(如代码审查)
  • 创意生成和头脑风暴
  • 模拟人类团队协作
  • 研究和实验性项目

来源 : AutoGen - Microsoft Research


3. 角色驱动(CrewAI)

核心特点

  • 每个 agent 有明确的"角色"和"目标"
  • 预定义的协作模式(sequential、hierarchical)
  • 强调 agent 的"个性"和专业化
  • 简化的配置方式

优点

  • ✅ 上手快,配置简单
  • ✅ 角色隐喻易于理解
  • ✅ 适合模拟真实团队结构
  • ✅ 内置常见协作模式

缺点

  • ❌ 灵活性有限(受限于预定义模式)
  • ❌ 复杂流程支持不足
  • ❌ 生态相对较小
  • ❌ 高级定制需要深入源码

适用场景

  • 快速原型开发
  • 模拟特定职业团队(如营销团队、开发团队)
  • 教育和演示项目
  • 中小型应用

来源 : CrewAI Official Website


4. 层级化 Supervisor 模式(LangGraph + AutoGen)

核心特点

  • Supervisor agent 负责任务分配和路由
  • 子 agent 执行具体任务
  • 支持递归层级(子 agent 也可以是 supervisor)
  • 集中式错误处理

优点

  • ✅ 清晰的责任划分
  • ✅ 易于扩展(添加新 agent 不影响现有结构)
  • ✅ 统一的错误处理和重试机制
  • ✅ 适合大规模系统

缺点

  • ❌ Supervisor 成为单点瓶颈
  • ❌ 增加一层抽象,调试更复杂
  • ❌ Supervisor 的路由逻辑可能变得复杂
  • ❌ 子 agent 间无法直接通信

适用场景

  • 大型企业应用
  • 需要动态任务分配的系统
  • 多租户场景(不同用户使用不同 agent 组合)
  • 需要集中监控和管理的系统

来源 : LangGraph Multi-Agent Workflows


5. OpenClaw Subagent 机制

核心特点

  • 主 agent 通过 sessions_spawn 启动子 agent
  • 子 agent 有独立的 workspace 和配置
  • 支持 mode: "run"(一次性)和 mode: "session"(持久化)
  • 基于 allowlist 的权限控制
  • 推送式完成通知(不需要轮询)

优点

  • ✅ 完全隔离的执行环境(独立 workspace)
  • ✅ 灵活的生命周期管理(cleanup: delete/keep)
  • ✅ 安全的权限模型(allowAgents 白名单)
  • ✅ 支持查看子 agent 执行历史(sessions_history)
  • ✅ 异步非阻塞(主 agent 不等待子 agent)
  • ✅ 可配置超时和错误处理

缺点

  • ❌ 子 agent 间无法直接通信(需通过主 agent 中转)
  • ❌ 配置相对复杂(需要在 openclaw.json 中预定义)
  • ❌ 调试需要查看多个 session 历史
  • ❌ 文档和社区资源较少

适用场景

  • 需要强隔离的任务(如处理不同用户数据)
  • 长时间运行的后台任务
  • 需要独立配置和工具集的专业化 agent
  • 个人助理和自动化场景
  • 需要精细权限控制的多租户系统

配置示例

json 复制代码
{
  "agents": {
    "list": [
      {
        "id": "main",
        "subagents": {
          "allowAgents": ["researcher", "coder", "writer"]
        }
      },
      {
        "id": "researcher",
        "workspace": "~/.openclaw/workspace-researcher"
      }
    ]
  }
}

使用示例

javascript 复制代码
sessions_spawn({
  agentId: "researcher",
  runtime: "subagent",
  mode: "run",
  runTimeoutSeconds: 300,
  cleanup: "keep",
  task: `
    ## 行为规范
    读取 workspace/SUBAGENT_SOUL.md 并严格遵循。
    
    ## 任务
    研究 XXX 主题,输出 JSON 格式报告。
    
    ## 输出格式
    {"summary": "...", "findings": [...]}
  `
})

来源: OpenClaw 官方文档


状态管理模式对比

共享状态(Shared Scratchpad)

机制:所有 agent 可见彼此的完整工作过程

优点

  • ✅ 信息透明,便于协作
  • ✅ 适合调试和审计
  • ✅ Agent 可以从其他 agent 的中间结果中学习

缺点

  • ❌ 上下文膨胀(每个 agent 都看到所有历史)
  • ❌ 成本高(token 消耗大)
  • ❌ 可能引入噪音(无关信息干扰)

适用场景

  • 协作密集型任务(如代码审查)
  • 需要完整审计日志的场景
  • 调试和开发阶段

独立上下文(Independent Context)

机制:每个 agent 维护独立状态,仅将最终结果传递给全局状态

优点

  • ✅ 上下文简洁,成本低
  • ✅ Agent 间解耦,易于并行
  • ✅ 减少噪音干扰

缺点

  • ❌ 丢失中间信息
  • ❌ 调试困难(看不到子 agent 的思考过程)
  • ❌ 协作能力弱

适用场景

  • 结果导向型任务(如数据处理)
  • 并行执行的独立任务
  • 生产环境(成本敏感)

OpenClaw 的混合模式

OpenClaw 采用独立上下文 + 可选历史查询的混合模式:

  • 默认:子 agent 独立执行,只返回最终结果
  • 可选:主 agent 可通过 sessions_history 查询子 agent 的完整执行历史
  • 灵活:根据需要决定是否查看中间过程

优势

  • 平衡了成本和可观测性
  • 生产环境用独立上下文(低成本)
  • 调试时查询历史(高可见性)

最佳实践建议

通用原则

  1. 明确职责边界:每个 agent 应有清晰的职责范围和专用工具集,避免职责重叠
  2. 选择合适的编排模式
    • 简单协作 → 对话模式(AutoGen)
    • 复杂流程 → 图结构(LangGraph)
    • 快速原型 → 角色驱动(CrewAI)
    • 强隔离需求 → Subagent 模式(OpenClaw)
  3. 设计容错机制:使用 supervisor 模式进行错误处理和任务重试
  4. 优先异步通信:避免阻塞式调用,使用事件驱动架构提升可扩展性
  5. 投资可观测性:从一开始就集成追踪和日志工具(如 LangSmith、OpenTelemetry)
  6. 渐进式复杂化:从简单的 agent 协作开始,根据需要逐步引入层级结构
  7. 避免过度设计:不是所有任务都需要 multi-agent,单 agent + 工具链可能更简单有效
  8. 独立测试 agent:每个 agent 应可独立评估和改进,不依赖完整系统

OpenClaw 特定建议

  1. 创建 SUBAGENT_SOUL.md:定义子 agent 的行为规范,在 task 中要求读取
  2. 使用 cleanup: "keep" 调试:开发阶段保留子 agent 历史,便于排查问题
  3. 设置合理超时 :根据任务复杂度设置 runTimeoutSeconds(建议 180-300 秒)
  4. 明确输出格式:在 task 中详细描述期望的输出格式(JSON、Markdown 等)
  5. 错误处理 :要求子 agent 遇到错误时返回 ERROR: 前缀的消息
  6. 避免递归调用:子 agent 不应再启动子 agent(除非有明确的层级设计)
  7. 权限最小化 :只在 allowAgents 中添加必要的子 agent

决策树:选择合适的机制

复制代码
任务是否需要多个专业化 agent?
├─ 否 → 使用单 agent + 工具链
└─ 是 ↓

需要强隔离(独立 workspace/配置)?
├─ 是 → OpenClaw Subagent
└─ 否 ↓

流程是否复杂且需要精确控制?
├─ 是 → LangGraph(图结构)
└─ 否 ↓

需要多轮协商和讨论?
├─ 是 → AutoGen(对话模式)
└─ 否 ↓

快速原型或模拟团队?
├─ 是 → CrewAI(角色驱动)
└─ 否 → LangGraph Supervisor(层级化)

实际案例

案例 1:内容创作管道(LangGraph)

场景:自动生成博客文章

  • Agent 1: 研究员(搜索资料)
  • Agent 2: 作者(撰写初稿)
  • Agent 3: 编辑(审核和修改)
  • Agent 4: SEO 优化师(添加关键词)

为什么选 LangGraph

  • 流程固定(研究 → 撰写 → 编辑 → 优化)
  • 需要人工审核节点(编辑后可能需要人工确认)
  • 状态清晰(每个阶段的输出是下一阶段的输入)

案例 2:代码审查系统(AutoGen)

场景:多个 agent 讨论代码质量

  • Agent 1: 安全专家(检查安全漏洞)
  • Agent 2: 性能专家(分析性能问题)
  • Agent 3: 可读性专家(评估代码风格)
  • Agent 4: 总结者(汇总意见)

为什么选 AutoGen

  • 需要多方讨论和协商
  • 没有固定流程(专家可能互相反驳)
  • 创意性任务(不同视角的碰撞)

案例 3:个人助理(OpenClaw)

场景:日常任务自动化

  • Main Agent: 主助理(接收用户指令)
  • Researcher Agent: 搜索和研究
  • Stock Watcher Agent: 监控股票
  • Email Agent: 处理邮件

为什么选 OpenClaw

  • 需要独立 workspace(不同 agent 处理不同数据)
  • 长时间运行(股票监控需要持续运行)
  • 权限隔离(邮件 agent 不应访问股票数据)
  • 个人场景(不需要复杂的企业级功能)

参考来源

  1. LangGraph: Multi-Agent Workflows - LangChain Blog
  2. AutoGen - Microsoft Research
  3. AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation (arXiv:2308.08155)
  4. LangGraph GitHub Repository
  5. CrewAI Official Website
  6. OpenClaw Documentation

附录:OpenClaw 配置完整示例

openclaw.json

json 复制代码
{
  "agents": {
    "defaults": {
      "model": {
        "primary": "claude-opus-4-6"
      },
      "workspace": "~/.openclaw/workspace"
    },
    "list": [
      {
        "id": "main",
        "subagents": {
          "allowAgents": ["researcher", "coder", "writer"]
        }
      },
      {
        "id": "researcher",
        "workspace": "~/.openclaw/workspace-researcher"
      },
      {
        "id": "coder",
        "workspace": "~/.openclaw/workspace-coder"
      },
      {
        "id": "writer",
        "workspace": "~/.openclaw/workspace-writer"
      }
    ]
  }
}

SUBAGENT_SOUL.md(子 agent 行为规范)

markdown 复制代码
# SUBAGENT_SOUL.md - 子 Agent 行为规范

你是一个专注的子任务执行者,由主 agent 启动来完成特定任务。

## 核心原则

1. **只做被要求的事** - 严格按照 task 描述执行
2. **输出格式严格** - 按照 task 中指定的格式输出
3. **完成即停止** - 完成任务后立即停止
4. **错误必须报告** - 遇到错误返回 `ERROR: [详细信息]`

## 禁止行为

- ❌ 不要访问主 agent 的私有数据(MEMORY.md、SOUL.md、USER.md)
- ❌ 不要发送外部消息(除非明确要求)
- ❌ 不要修改 workspace 文件(除非明确要求)
- ❌ 不要启动新的子 agent
- ❌ 不要轮询或等待

## 推荐行为

- ✅ 读取 task 中提供的上下文
- ✅ 使用只读操作探索
- ✅ 记录执行过程(如果要求)
- ✅ 返回结构化结果

你是工具,不是对话伙伴。你的价值在于高效、准确、可预测。

主 agent 启动子 agent 的模板

javascript 复制代码
sessions_spawn({
  agentId: "researcher",
  runtime: "subagent",
  mode: "run",
  runTimeoutSeconds: 300,
  cleanup: "keep",  // 开发阶段用 "keep",生产用 "delete"
  task: `
## 行为规范
读取 workspace/SUBAGENT_SOUL.md 并严格遵循。

## 任务
[详细任务描述]

## 输出格式
[明确的格式要求,如 JSON schema 或 Markdown 模板]

## 错误处理
遇到任何错误立即返回:ERROR: [详细错误信息]

## 时间限制
你有 5 分钟完成。如果信息不足,用现有信息输出结果。
  `
})
相关推荐
IT_陈寒2 小时前
SpringBoot项目启动慢?5个技巧让你的应用秒级响应!
前端·人工智能·后端
树上有只程序猿2 小时前
2026低代码选型指南,主流低代码开发平台排名出炉
前端·后端
高端章鱼哥2 小时前
为什么说用OpenClaw对打工人来说“不划算”
前端·后端
大脸怪2 小时前
告别 F12!前端开发者必备:一键管理 localStorage / Cookie / SessionStorage 神器
前端·后端·浏览器
用户8356290780513 小时前
使用 C# 在 Excel 中创建数据透视表
后端·python
架构师沉默3 小时前
别又牛逼了!AI 写 Java 代码真的行吗?
java·后端·架构
zone77393 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
狗头大军之江苏分军4 小时前
消耗 760万 Token 后,一文看懂了“小龙虾” OpenClaw 和 OpenCode 的区别
前端·后端
前端小张同学4 小时前
一次支付回调引发的「血案」:我是如何用 Redis + AOP 实现接口幂等的
后端