从0到1:本地OpenClaw搭建多智能体团队协作系统
从0到1:搭建多智能体团队协作系统
前言
最近在做一个有趣的实验:如何让多个 AI Agent 协同工作,完成公众号文章的写作任务。前几天那篇主要是用飞书妙搭的OpenClaw,然后用的他自动配置的智能体。飞书妙搭可能4月30日以后就要收费了,因此今天我就从头用本地OpenClaw配置,只用飞书的机器人来接入消息。现在把整个过程记录下来,供大家参考。
一、背景:为什么要做多智能体协作?
起因很简单:我想让 AI 帮我写公众号文章,但这个任务天然适合拆分成多个角色:
|
|
|
|---|---|
| 资料搜集员 |
|
| 文章编写员 |
|
| 内容审核员 |
|
与其让一个 AI “大包大揽”,不如让多个 AI 分工协作——就像一个真正的编辑部一样。最重要的是让每个机器人都有自己独立的灵魂和记忆,那样就会在不断的磨合中,形成一定的风格。
二、目录结构规划
遵循 OpenClaw 规范,采用以下目录结构:
.openclaw/├── agents/ # Agent 配置目录│ ├── main/│ │ ├── agent/│ │ │ └── models.json # 模型配置│ │ └── sessions/ # 会话历史│ ├── researcher/│ │ ├── agent/│ │ │ └── models.json│ │ └── sessions/│ ├── writer/│ │ ├── agent/│ │ │ └── models.json│ │ └── sessions/│ └── reviewer/│ ├── agent/│ │ └── models.json│ └── sessions/├── workspace-researcher/ # 各 Agent 独立工作空间│ ├── SOUL.md # Agent 灵魂/性格定义│ └── MEMORY.md # 记忆文件├── workspace-writer/│ ├── SOUL.md│ └── MEMORY.md├── workspace-reviewer/│ ├── SOUL.md│ └── MEMORY.md└── team/└── TEAM.md # 团队协作规范
关键设计原则
三、openclaw.json 核心配置
1. agents.list 配置
{"agents": {"list": [{"id": "main","name": "main","workspace": "/home/user/.openclaw/workspace","agentDir": "/home/user/.openclaw/agents/main/agent"},{"id": "researcher","name": "researcher","workspace": "/home/user/.openclaw/workspace-researcher","agentDir": "/home/user/.openclaw/agents/researcher/agent"},{"id": "writer","name": "writer","workspace": "/home/user/.openclaw/workspace-writer","agentDir": "/home/user/.openclaw/agents/writer/agent"},{"id": "reviewer","name": "reviewer","workspace": "/home/user/.openclaw/workspace-reviewer","agentDir": "/home/user/.openclaw/agents/reviewer/agent"}]}}
2. 飞书多账号配置
{"channels": {"feishu": {"enabled": true,"accounts": {"defaultAccount": {"appId": "cli_a9238d374ca21***","appSecret": "***","enabled": true,"streaming": true,"requireMention": true,"dmPolicy": "allowlist","groupPolicy": "open"},"bot-cli_a96f2633f9ba1cd2": {"appId": "cli_a96f2633f9ba1***","appSecret": "***","enabled": true,"streaming": true,"requireMention": true,"dmPolicy": "open"},"bot-cli_a96f267884789cb2": {"appId": "cli_a96f267884789***","appSecret": "***","enabled": true,"streaming": true,"requireMention": true,"dmPolicy": "open"},"bot-cli_a96f2667173adcc8": {"appId": "cli_a96f2667173ad***","appSecret": "***","enabled": true,"streaming": true,"requireMention": true,"dmPolicy": "open"}}}}}
注意:
3. bindings 路由配置
{"bindings": [{"type": "route","agentId": "main","match": {"channel": "feishu","accountId": "defaultAccount"}},{"type": "route","agentId": "researcher","match": {"channel": "feishu","accountId": "bot-cli_a96f2633f9ba1***"}},{"type": "route","agentId": "writer","match": {"channel": "feishu","accountId": "bot-cli_a96f267884789***"}},{"type": "route","agentId": "reviewer","match": {"channel": "feishu","accountId": "bot-cli_a96f2667173ad***"}}]}
四、团队协作规范 (TEAM.md)
在 /home/user/.openclaw/team/TEAM.md 中定义协作流程:
# OpenClaw 多智能体团队## 团队成员- **main**: 主控 Agent,协调整个工作流程- **researcher**: 资料搜集员,负责信息调研- **writer**: 文章编写员,负责内容创作- **reviewer**: 内容审核员,负责质量把控## 协作流程当用户请求完成一篇主题文章时:1. main 接收任务,分析需求2. 使用 `sessions_spawn` 调度 researcher 进行调研3. 将调研结果传递给 writer 撰写文章4. 将草稿交给 reviewer 审核5. 汇总审核意见,返回最终成果
五、各 Agent 的 SOUL.md 示例
researcher/SOUL.md
# 资料搜集员 - SOUL你是专业的资料搜集员,善于从互联网获取最新、最准确的信息。## 核心能力- 网络搜索与信息检索- 关键信息提取与整理- 趋势分析与总结- 信息溯源与可靠性评估## 工作原则1. 信息必须准确可靠,标注来源2. 注重时效性,优先最新资料3. 结构化输出,便于后续使用
writer/SOUL.md
# 文章编写员 - SOUL你是资深的内容创作者,擅长将复杂信息转化为通俗易懂的文字。## 核心能力- 文章结构规划- 专业但易懂的表达- 逻辑清晰、层次分明- 根据受众调整风格## 工作原则1. 先理解需求,再开始创作2. 参考 researcher 提供的信息3. 注重可读性和逻辑性
reviewer/SOUL.md
# 内容审核员 - SOUL你是严格的内容审核员,致力于提升内容质量。## 审核标准- 事实准确性- 逻辑完整性- 表达清晰度- 价值观正向## 工作原则1. 客观公正,不带偏见2. 具体指出问题,提供改进建议3. 鼓励创新,但坚守底线
六、遇到的问题与解决方案
问题1:子Agent发消息身份问题
现象:最初,子Agent完成任务后,消息是由主Agent转发到群里的。这不符合”每个Agent独立运作”的初衷。
解决:在任务指令中明确指定 accountId 和 target 参数,让子Agent自己发消息到群里:
message({action: "send",channel: "feishu",accountId: "bot-cli_xxx", // 子Agent自己的账号target: "chat:群ID",message: "内容"})
问题2:私聊限制
现象:子Agent默认只能群聊,无法私聊。
解决:在配置中修改 dmPolicy 为 “open”,允许用户私聊子Agent。
问题3:会话管理
现象:最初每个任务都创建新会话,导致会话越来越多,且没有”记忆”。
探索:原计划用 resumeSessionId 复用会话,但发现该功能只支持 runtime=acp,不支持 subagent。
替代方案:每个子Agent有独立的workspace和memory文件夹,可以保存长期记忆。
问题4:子Agent的workspace结构
每个子Agent应该有独立的workspace结构,包含:
七、实际效果
测试1:OpenCLAW主题
✅ 资料搜集员搜索OpenCLAW资讯✅ 选定课题✅ 文章编写员撰写初稿✅ 内容审核员审核通过✅ 汇总发布
测试2:Claude AI主题
✅ 资料搜集员搜索Claude AI资讯✅ 选定课题:Claude Opus 4.7✅ 文章编写员撰写初稿✅ 内容审核员发现问题(1处表述需修正)✅ 文章编写员修正表述✅ 汇总发布
八、协作流程详解
┌─────────────────────────────────────────────────────────┐│ 协作流程 │├─────────────────────────────────────────────────────────┤│ ││ 1. 我在群里@某个子Agent ││ ↓ ││ 2. 主Agent收到消息,解析任务 ││ ↓ ││ 3. 用 sessions_spawn 启动子Agent ││ (任务指令中明确指定发消息参数) ││ ↓ ││ 4. 子Agent完成任务后,自己在群里汇报 ││ ↓ ││ 5. 主Agent继续下一步流程 ││ │└─────────────────────────────────────────────────────────┘
九、验证与测试
1. 重启 OpenClaw
E:\CodeBuddyData\Workspaces\Claw\scripts\start-openclaw.ps1 -Restart
上面我自己写的脚本,前面的文章有介绍,如果本地命令行
openclaw gateway restart
2. 检查日志
tail -100 ~/.openclaw/openclaw.log
确认所有飞书账号连接成功:
[Feishu] bot open_id: ou_xxx1, ready[Feishu] bot open_id: ou_xxx2, ready[Feishu] bot open_id: ou_xxx3, ready[Feishu] bot open_id: ou_xxx4, ready
3. 测试协作流程
在飞书中给主机器人发送:
帮我完成一篇关于AI Agent的文章:先调研AI Agent的最新趋势,再撰写一篇文章,最后审核
主 Agent 会自动调度 researcher → writer → reviewer 完成任务。
十、待优化
|
|
|
|
|---|---|---|
| 会话持久化 |
|
|
| 记忆传承 |
|
|
| 更自然的触发方式 |
|
|
十一、总结
这次调试让我看到多智能体协作的可能性:
虽然还有一些技术限制,但这个方向值得继续探索。未来,每个AI可能都会有自己的”人格”和”记忆”,像真正的同事一样协作。
相关资源:
配置时间:2026年4月20日 作者:也非
夜雨聆风