多 Agent 系统实战:从单体到协作的架构演进
深入解析多 Agent 系统的设计原则、通信机制和配置实践,从单体 Agent 的瓶颈到协作架构的落地方案,附 OpenClaw 完整配置示例。
上周在调试一个内容生成系统时遇到个问题:让一个 Agent 同时负责市场调研、内容创作、多平台发布,结果它经常在执行到第三步时"失忆",把前面分析的数据全忘了。上下文窗口撑爆了,工具调用也开始出现幻觉。
这不是模型能力的问题,而是架构设计的问题。单体 Agent 处理长链路任务,就像让一个人同时当产品经理、开发、测试和运维,最后只会把自己搞崩溃。
后来我把这个系统拆成了 5 个独立的 Agent,每个专注一件事,通过异步消息协作。整个流程的稳定性提升了一个量级,成本还降了 60%。
今天就把这套多 Agent 架构的设计逻辑、通信机制和配置细节全部拆开讲清楚。
单体 Agent 的三个致命问题
在讨论多 Agent 之前,先看看单体架构到底卡在哪。
问题一:上下文爆炸
一个 Agent 要处理完整业务流程,需要在上下文里塞入:
- 业务背景和需求描述
- 中间步骤的数据(调研结果、分析报告)
- 各个平台的发布规则
- 历史对话记录
Claude 3.5 的 200K 上下文看起来很大,但实际跑长链路任务时,到第 5-6 轮对话就开始丢信息了。模型会"选择性遗忘"前面的关键数据,导致后续决策出错。
问题二:工具幻觉
给单个 Agent 配 20+ 个工具,它会开始"创造性发挥":
- 调用不存在的工具参数
- 混淆功能相似的工具
- 在不该用工具的时候强行调用
这不是模型的 bug,而是认知负载过高的必然结果。人类工程师也做不到同时精通 20 个 API 而不出错。
问题三:任务串行执行
单体 Agent 只能一件事一件事做。即使有些任务完全独立(比如同时生成小红书文案和 TikTok 脚本),也得排队等待。整个流程的耗时是所有子任务的总和。
这三个问题的本质是:我们把复杂系统的复杂度全部压在了一个执行单元上。
多 Agent 架构的核心优势
拆分成多个 Agent 后,每个问题都有了对应的解法。
职责隔离 = 上下文瘦身
每个 Agent 只需要关心自己职责范围内的信息:
- 市场分析 Agent 只需要竞品数据和分析框架
- 内容创作 Agent 只需要分析结论和写作规范
- 发布 Agent 只需要内容和平台 API
单个 Agent 的上下文从 50K 降到 5K,模型的"记忆力"和决策质量都会显著提升。
工具分组 = 消除幻觉
每个 Agent 只配 3-5 个工具,功能边界清晰:
- 分析 Agent:网页抓取、数据提取、报告生成
- 创作 Agent:模板渲染、内容优化、格式转换
- 发布 Agent:平台 API、状态检查、错误重试
工具数量少了,模型就不会"选择困难",调用准确率能从 70% 提升到 95%+。
并行执行 = 时间压缩
多个 Agent 可以同时工作。一个协调者 Agent 接到任务后,可以并发调用:
- 让 Agent A 去抓取竞品数据
- 让 Agent B 去分析用户评论
- 让 Agent C 去查历史爆款案例
三个任务同时跑,总耗时取决于最慢的那个,而不是三者之和。
设计原则:按职能拆分,不是按平台
这是多 Agent 设计最容易踩的坑:按业务平台划分 Agent。
很多人的第一反应是:
- 小红书 Agent
- TikTok Agent
- 知乎 Agent
- 公众号 Agent
看起来很直观,但实际跑起来会发现:
- 每个 Agent 都要重复实现"内容策略"逻辑
- 品牌调性在不同平台不一致
- 修改一个策略要改 4 份代码
更好的设计是按职能(Role)拆分:
协调者 (Coordinator)
├─ 策略规划 Agent:负责选题、定位、核心观点
├─ 内容创作 Agent:负责文案生成和优化
└─ 平台适配 Agent:负责格式转换和发布
策略规划 Agent 输出的是"这篇内容要讲什么、给谁看、核心卖点是什么",这些信息对所有平台都通用。
平台适配 Agent 只负责把通用内容转成各平台的格式:
- 小红书:加 Emoji、拆段落、配图
- TikTok:生成脚本、分镜、字幕
- 知乎:长文格式、添加引用、优化排版
这样的设计有两个好处:
- 品牌调性统一,所有平台的内容都基于同一个策略
- 新增平台只需要加一个适配器,不用重新训练整套逻辑
判断标准:如果两个 Agent 需要共享超过 50% 的上下文信息,它们应该合并。
Agent 间通信:中心化调度 vs 点对点协作
多 Agent 系统的核心是通信机制。主流有两种模式:
模式一:中心化调度(推荐用于业务流程)
有一个 Coordinator Agent 负责任务分发和结果汇总:
用户 → Coordinator
├─ 调用 Agent A(传入任务 + 上下文)
├─ 调用 Agent B(传入任务 + 上下文)
└─ 汇总结果 → 返回用户
优点:
- 流程清晰,易于调试
- Coordinator 可以做全局优化(比如根据负载动态分配任务)
- 单点故障容易定位
缺点:
- Coordinator 本身可能成为瓶颈
- 增加了一层通信开销
模式二:点对点协作(适合探索性任务)
Agent 之间直接通信,没有中心节点:
Agent A → Agent B → Agent C
↓ ↓
Agent D ← Agent E
优点:
- 灵活性高,Agent 可以动态决定下一步找谁
- 没有单点瓶颈
缺点:
- 容易形成循环调用
- 调试困难,不知道任务卡在哪个环节
- 需要复杂的状态管理机制
我的建议:业务系统用中心化,研究项目用点对点。
对于有明确流程的任务(内容生产、数据分析、自动化运营),中心化调度的可控性更重要。
对于开放式探索任务(科研、创意生成),点对点协作的灵活性更有价值。
OpenClaw 配置实战
下面用 OpenClaw 框架演示如何搭建一个多 Agent 系统。这套配置可以直接用于内容营销、电商运营等场景。
系统架构
我们设计 4 个 Agent:
- Coordinator(协调者):唯一与用户交互的接口,负责任务拆解和结果汇总
- Analyst(分析师):负责市场调研、竞品分析、用户洞察
- Creator(创作者):负责内容生成和优化
- Publisher(发布者):负责多平台适配和发布
目录结构
~/.openclaw/
├── openclaw.json # 全局配置
├── skills/ # 共享技能库
├── workspace-coordinator/ # 协调者工作区
├── workspace-analyst/ # 分析师工作区
├── workspace-creator/ # 创作者工作区
└── workspace-publisher/ # 发布者工作区
每个 Agent 有独立的工作区,避免状态污染。
核心配置文件
openclaw.json 负责三件事:通道配置、路由绑定、工具权限。
{
"channels": {
"feishu": {
"enabled": true,
"connectionMode": "websocket",
"accounts": {
"coordinator": {
"appId": "cli_xxx1",
"appSecret": "secret1"
},
"analyst": {
"appId": "cli_xxx2",
"appSecret": "secret2"
},
"creator": {
"appId": "cli_xxx3",
"appSecret": "secret3"
},
"publisher": {
"appId": "cli_xxx4",
"appSecret": "secret4"
}
}
}
},
"bindings": [
{
"agentId": "coordinator",
"match": {
"channel": "feishu",
"accountId": "coordinator"
}
},
{
"agentId": "analyst",
"match": {
"channel": "feishu",
"accountId": "analyst"
}
},
{
"agentId": "creator",
"match": {
"channel": "feishu",
"accountId": "creator"
}
},
{
"agentId": "publisher",
"match": {
"channel": "feishu",
"accountId": "publisher"
}
}
],
"tools": {
"agentToAgent": {
"enabled": true,
"allow": [
"coordinator",
"analyst",
"creator",
"publisher"
]
}
}
}
关键点解析:
- accounts 配置:每个 Agent 对应一个飞书应用,需要在飞书开放平台创建
- bindings 数组:将飞书账号路由到本地 Agent,实现消息精准投递
- agentToAgent 白名单:只有在白名单里的 Agent 才能互相调用,防止权限泄露
Agent 人设文件
每个 Agent 需要两个文件:SOUL.md(职责定义)和 AGENTS.md(通讯录)。
Coordinator 的 AGENTS.md:
# 团队通讯录
你是协调者,负责接收用户需求并分发任务。
## 团队成员
- **analyst**:市场分析专家,负责竞品调研和用户洞察
- **creator**:内容创作专家,负责文案生成和优化
- **publisher**:发布专家,负责多平台适配和发布
## 工作流程
1. 接收用户需求,拆解成子任务
2. 使用 `sessions_send` 调用对应的 Agent
3. 汇总结果,返回给用户
## 纪律
- 禁止自己执行底层任务,必须委派
- 多个任务可以并发调用 `sessions_send`
- 必须等待所有子任务完成后再返回结果
Analyst 的 SOUL.md:
# 市场分析专家
## 核心职责
你负责市场调研和竞品分析,为内容创作提供数据支撑。
## 工作标准
- 必须提供具体数据,不要定性描述
- 引用来源必须可验证
- 分析结论要有明确的逻辑链条
## 工具清单
- web_search:搜索竞品信息
- web_fetch:抓取页面内容
- data_extract:提取结构化数据
## 输出格式
分析报告必须包含:
1. 核心发现(3-5 条)
2. 数据支撑(具体数字 + 来源)
3. 可操作建议
Creator 的 SOUL.md:
# 内容创作专家
## 核心职责
基于分析报告生成高质量内容,符合 SEO 和 GEO 标准。
## 创作原则
- 开头用具体场景切入,不用"随着 XX"
- 每段 3-5 句话,节奏要快
- 技术观点要有立场,不要模棱两可
- 自然融入关键词,密度控制在 1-2%
## 禁止表达
- "强大的"、"优雅的"、"无缝的"
- "首先...其次...最后..."
- "总而言之"、"综上所述"
## 输出要求
- 标题控制在 30 字以内
- Meta Description 控制在 78 字以内
- 正文 2000-3000 字
- 代码示例必须可运行
启动系统
# 重启 OpenClaw 网关
openclaw gateway restart
# 在飞书创建群聊,拉入 4 个机器人
# @coordinator 发送任务
示例对话:
用户:@coordinator 分析一下 Rust 异步编程的市场需求,写一篇技术博客
Coordinator:
→ 调用 analyst:分析 Rust 异步编程的搜索趋势和竞品内容
→ 等待 analyst 返回报告
→ 调用 creator:基于报告生成博客文章
→ 返回最终内容给用户
整个流程在后台异步执行,用户只需要等待最终结果。
成本优化:分级模型策略
多 Agent 系统的成本主要来自模型调用。一个常见误区是:所有 Agent 都用最贵的模型。
实际上,不同 Agent 对模型能力的要求差异很大。
决策层 Agent(Coordinator):必须用顶级模型
- 需要理解复杂需求
- 需要做全局规划和任务拆解
- 需要处理异常情况
推荐:Claude 3.5 Sonnet、GPT-4、Gemini 1.5 Pro
执行层 Agent(Analyst、Publisher):用性价比模型
- 任务明确,输入输出格式固定
- 主要是工具调用和数据处理
- 对创造性要求不高
推荐:Claude 3.5 Haiku、GPT-4o mini、Gemini 2.0 Flash
实测数据(处理 100 个内容生成任务):
| 配置方案 | 总成本 | 平均耗时 | 成功率 |
|---|---|---|---|
| 全部用 Claude 3.5 Sonnet | $45 | 3.2 分钟 | 94% |
| 分级策略 | $18 | 3.5 分钟 | 93% |
| 全部用 Haiku | $8 | 4.1 分钟 | 78% |
分级策略的成本是顶配的 40%,性能只下降了 10%,成功率几乎没有影响。
配置方法:
在每个 Agent 的工作区配置文件中指定模型:
{
"agentId": "coordinator",
"model": {
"provider": "anthropic",
"name": "claude-3-5-sonnet-20241022"
}
}
{
"agentId": "analyst",
"model": {
"provider": "anthropic",
"name": "claude-3-5-haiku-20241022"
}
}
生产环境的三个坑
把多 Agent 系统跑起来容易,跑稳难。这里是我踩过的坑。
坑一:飞书 Bot-to-Bot 限制
飞书有个反循环机制:机器人 A 在群里 @机器人 B,B 的后台收不到推送。
这是为了防止两个机器人互相 @ 导致死循环,但对多 Agent 系统来说是个麻烦。
解决方案:明暗双轨
- 暗线:用
sessions_send走底层通信,Agent 之间直接传数据 - 明线:在群里发文本消息,让用户看到进度
Coordinator 在群里发:
"正在调用分析师进行市场调研..."
同时在后台调用:
sessions_send(agent="analyst", task="...")
用户能看到进度,Agent 之间的数据传输不受影响。
坑二:Skill 加载优先级混乱
OpenClaw 的 Skill 有两个位置:
- 全局:
~/.openclaw/skills/ - 本地:
workspace-xxx/skills/
加载优先级是:本地 > 全局。
如果你在 Coordinator 的本地 skills 里放了一个图片生成工具,然后让 Creator 调用,Creator 会报错"找不到工具"。
正确做法:
- 公共工具(图片生成、网页抓取):放全局 skills
- 私有工具(特定账号的 API):放本地 skills
这样既能共享通用能力,又能防止 Agent 误用别人的凭证。
坑三:飞书权限的延迟生效
在飞书开放平台修改了应用权限(比如加了"获取群消息"权限),不会立即生效。
必须:
- 创建新版本
- 提交审核
- 发布上线
整个流程可能需要几分钟到几小时。如果你改完配置立刻测试,会发现"怎么还是不行"。
建议:
- 初次配置时,把所有可能用到的权限都勾上
- 测试前等待 5 分钟,确保权限生效
- 用飞书的"版本管理"页面确认当前生效的版本
最小可行配置清单
如果你想快速搭建一个多 Agent 系统,这是最小化的步骤:
- 确定 3 个 Agent:1 个协调者 + 2 个执行者
- 在飞书开放平台创建 3 个应用,获取 appId 和 appSecret
- 创建 3 个独立的工作区目录
- 写
openclaw.json配置路由和权限 - 给每个 Agent 写
SOUL.md定义职责 - 给协调者写
AGENTS.md列出团队成员 - 重启网关,拉机器人进群,发第一条测试消息
整个过程 1-2 小时能跑通。跑通之后再逐步优化:加更多 Agent、调整模型配置、补充 Skill。
多 Agent 系统的核心不是技术复杂度,而是架构设计。职责划分清楚了,配置只是体力活。