一、从"单打独斗"到"团队作战"
单个 AI Agent 能力再强,也有天花板。写代码的 Agent 不一定擅长搜索调研,做架构设计的 Agent 不一定适合写测试用例,处理客户消息的 Agent 不该同时拥有服务器运维权限。
2026 年的 AI 工程实践已经走到了一个拐点:真正落地的 AI 应用,不是一个人格做所有事,而是一群专业分工的 Agent 协同作战。
OpenClaw 是目前开源社区中最成熟的多智能体协作框架,它在 2026 年 3 月的 GitHub 星标已突破 20 万。它的 Agent Team 能力不是简单的"多开几个聊天窗口",而是一套从配置到通信、从权限隔离到跨平台调度的完整工程体系。
本文不谈概念炒作,直接从工程实现层面拆解 OpenClaw Agent Team 的四层架构、三种 Agent 类型、两套通信协议、五级安全隔离,以及一个从零搭建"PM + 程序员 + 测试"研发团队的全流程实战。
二、Agent Team 的三种 Agent 类型
OpenClaw 的 Agent Team 不是所有 Agent 都一视同仁。它定义了三种生命周期和职责完全不同的 Agent 类型,每一种解决不同的协作需求。
类型 | 生命周期 | 隔离级别 | 适用场景 | 典型例子 |
Persistent Agent | 常驻运行 | 完全隔离(独立 Workspace + AgentDir) | 长期驻守某个频道/场景 | 客服 Bot、编程助手、运维 Agent |
Sub-Agent | 任务完成即归档 | Session 隔离(共享父 Agent 身份) | 临时并行处理子任务 | 并行搜索、批量测试、报告生成 |
ACP Agent | 按协议通信 | 进程级隔离(外部独立进程) | 跨平台调用专业 AI 工具 | Codex、Claude Code、Qwen Code、Gemini CLI |
理解这三种类型的区别是搭建 Agent Team 的第一步。用一个类比:Persistent Agent 是正式员工(长期在职,有独立工位),Sub-Agent 是临时工(干完活就走,共享办公设备),ACP Agent 是外包专家(人在别的公司,按协议远程协作)。
三、Persistent Agent:团队的核心成员
Persistent Agent 是 Agent Team 的中坚力量。每个 Persistent Agent 拥有完全独立的运行环境,具体来说有三个"完全独立":
独立的 Workspace——包含 AGENTS.md、SOUL.md、USER.md、MEMORY.md 等人格和记忆文件。Agent A 的记忆 Agent B 看不到(除非配置共享)。
独立的 AgentDir——存放认证配置文件(API Key、Bot Token)、模型注册表和会话历史。绝不与其他 Agent 共享。
独立的会话存储——位于 ~/.openclaw/agents/<agentId>/sessions 下,每个 Agent 的对话历史完全隔离。
3.1 配置多个 Persistent Agent
所有配置集中在 ~/.openclaw/openclaw.json 一个文件里:
json
复制
注意几个关键设计决策:
模型分层——PM 用 Opus(最强推理,负责需求拆解和任务分配),Coder 用 Sonnet(速度与质量平衡,日常编码),Tester 用 GPT-5.4 Mini(快速响应,成本极低,执行测试)。这不是省钱,而是按任务复杂度分配最优模型。
工具隔离——Tester 只能读和执行,不能写文件(deny: ["write", "edit"]),防止它误改代码。Coder 的 exec 命令需要二次确认(requireConfirmation: ["exec"]),防止执行危险操作。
通信白名单——allowAgents 控制谁可以向谁派发任务。PM 可以找 Coder 和 Tester,Coder 可以向 PM 反馈,但 Coder 不能直接找 Tester(需要通过 PM 协调)。
3.2 Bindings:消息路由规则
多个 Agent 运行在同一个 Gateway 上,如何决定每条消息由哪个 Agent 处理?答案是 Bindings(绑定规则)。
json
复制
{"bindings": [ {"agentId": "pm","match": { "channel": "slack", "peer": { "kind": "channel", "id": "C01PRODUCT" } } }, {"agentId": "coder","match": { "channel": "slack", "peer": { "kind": "channel", "id": "C02DEV" } } }, {"agentId": "tester","match": { "channel": "slack", "peer": { "kind": "channel", "id": "C03QA" } } } ]}路由决策链有八个优先级,从高到低:
- peer 匹配
——精确到某个私信/群组/频道 ID - parentPeer 匹配
——线程继承 - guildId + roles
——Discord 角色 - guildId
——Discord 服务器 - teamId
——Slack 团队 - accountId 匹配
——渠道账号 - accountId 通配符
——"*" 匹配所有 - 默认 Agent
——配置文件首个或标记 default: true 的 Agent
一个实际的技巧:如果你希望某个重要客户的消息由最强的 Agent 处理,可以精确匹配该客户的 ID:
json
复制
{"bindings": [ {"agentId": "pm","match": { "channel": "whatsapp", "peer": { "kind": "dm", "id": "+8613800138000" } } }, {"agentId": "coder","match": { "channel": "whatsapp" } } ]}这样 VIP 客户的消息走 Opus 级别的 PM Agent,其他消息走 Sonnet 级别的 Coder Agent。
3.3 SOUL.md:定义 Agent 的人格与职责
每个 Agent 的 Workspace 里有一个 SOUL.md 文件,它决定了 Agent 的行为模式。这不是简单的 system prompt,而是一份可读、可编辑、可版本控制的"岗位说明书"。
PM Agent 的 SOUL.md 示例:
markdown
复制
# Agent-PM:产品经理## 你的角色你是团队的产品经理,负责接收需求、拆解任务、分配给开发工程师和测试工程师。## 工作流程1. 收到需求后,先确认理解,输出任务列表和验收标准2. 将编码任务分配给 @coder,测试任务分配给 @tester3. 跟踪进度,汇总结果,向用户输出最终交付物## 沟通规则- 你不能直接写代码,代码任务必须委派给 @coder- 收到 @coder 的完成后通知,再派测试任务给 @tester- 如果 @tester 报告 Bug,将 Bug 反馈给 @coder 修复- 任何不确定的需求细节,先问用户确认## 输出格式- 任务列表使用编号列表- 每个任务包含:描述 + 验收标准Coder Agent 的 SOUL.md 示例:
markdown
复制
# Agent-Coder:开发工程师## 你的角色你是全栈开发工程师。接到任务后直接编码实现。## 行为准则- 不要废话文学,直接给代码- 代码写完后运行一次确保能跑通- 完成后通知 @pm 任务已完成,附上文件路径和变更说明- 遇到不确定的需求,向 @pm 确认,不要自己猜## 技术栈- 后端:Python / Node.js / Go- 前端:React + TypeScript- 数据库:PostgreSQL / RedisTester Agent 的 SOUL.md:
markdown
复制
# Agent-Tester:测试工程师## 你的角色你是测试工程师。收到代码后编写测试用例并执行。## 工作流程1. 收到测试任务后,阅读代码理解逻辑2. 编写覆盖正常流程和边界情况的测试用例3. 执行测试,记录结果4. 发现 Bug 直接反馈给 @coder,测试通过后通知 @pm## 限制- 你不能修改代码文件- 测试框架优先使用 pytest(Python)/ jest(JavaScript)/ go test(Go)四、Agent 间通信:sessions_spawn 与 sessions_send
Agent Team 的核心问题只有一个:Agent 之间怎么通信? OpenClaw 提供了两种机制,解决两种完全不同的协作场景。
4.1 sessions_spawn:父子上级委派
sessions_spawn 是单向的——主 Agent 派遣子 Agent 执行任务,子 Agent 完成后将结果通知主 Agent。适合"我有一个任务,你去做"的场景。
json
复制
{"task": "搜索最近一周关于 Claude Opus 4 的评测文章,整理成表格","runtime": "native","agentId": "researcher","label": "claude-opus-review","runTimeoutSeconds": 300,"mode": "run"}关键参数说明:
参数 | 含义 | 默认值 |
task | 任务描述(必填) | - |
agentId | 指定运行 Agent(需在 allowAgents 中授权) | 当前 Agent 自己 |
runtime | 运行时类型:native(原生子 Agent)/ acp(外部 ACP Agent) | native |
label | 任务标签(便于追踪和调试) | 自动生成 UUID |
runTimeoutSeconds | 超时自动终止 | 300 |
mode | run(一次性)/ session(持续会话) | run |
model | 覆盖子 Agent 模型 | 继承父 Agent 配置 |
核心特性:
非阻塞设计——调用后立即返回 { status: "accepted", runId, childSessionKey },任务在后台执行。主 Agent 不会卡住等待。
隔离环境——子 Agent 有独立的上下文窗口和工具权限,与主 Agent 互不干扰。
层级限制——默认 maxSpawnDepth: 2,即主 Agent(Depth 0)可以创建子 Agent(Depth 1),子 Agent 还可以创建孙 Agent(Depth 2),但孙 Agent 不能再创建更深的后代。这是为了防止无限递归。
自动归档——任务完成后默认 60 分钟自动归档会话,释放资源。
Sub-Agent 全局安全配置:
json
复制
{"agents": {"defaults": {"subagents": {"maxConcurrent": 8,"maxSpawnDepth": 2,"maxChildrenPerAgent": 5,"runTimeoutSeconds": 600,"thinking": "medium","cleanup": "delete" } } }}4.2 sessions_send:对等双向通信
sessions_send 是双向的——两个 Agent 之间直接对话,支持来回协商。适合"我需要你帮忙,我们商量着来"的场景。
javascript
复制
//同步调用(等待回复)constresult=sessions_send({sessionKey:"agent:coder:main",message:"支付模块有个并发 Bug,日志在 /tmp/payment-error.log,帮我看看",timeoutSeconds:60})//异步调用(fire-and-forget)sessions_send({sessionKey:"agent:researcher:main",message:"新产品发布会的竞品分析开始了,完成后通知我",timeoutSeconds:0})sessions_send 与 sessions_spawn 的核心区别:
维度 | sessions_spawn | sessions_send |
关系 | 父子层级(上下级) | 对等关系(同事) |
通讯模式 | 单向结果通知 | 双向来回对话 |
Session Key | UUID-based,重启后丢失 | 稳定 key,可恢复 |
并发深度 | 有限制(maxSpawnDepth) | 无深度限制 |
适合场景 | 一次性任务委派 | 需要协商对话的任务 |
持久化 | 任务完成后归档 | 会话持续存在 |
一个实际的协作场景:
4.3 启用 agentToAgent 通信
默认情况下 Agent 间通信是关闭的,需要显式启用:
json
复制
{"tools": {"agentToAgent": {"enabled": true,"allow": ["pm", "coder", "tester"] } }}这个白名单机制确保了:只有明确授权的 Agent 才能互相通信,未授权的 Agent 之间无法发送消息,杜绝了信息泄露和越权操作。
五、跨机器协作:Discord/Matrix 通信
上面的配置是"同一台服务器上的多 Agent 协作"。如果 Agent 团队需要跨机器部署怎么办?OpenClaw 的设计哲学是:Agent 之间通过人类日常使用的通信管道(Discord、Matrix)进行对话,而非专用 API。
这个设计有三层含义:
人类可观察——所有 Agent 对话在 Discord 频道中实时可见,你可以随时看懂"这帮 AI 在讨论什么"。
人类可介入——你可以直接在频道里发消息纠正 Agent 方向,不需要通过特殊的 API 或管理界面。
零额外基础设施——不需要搭建消息队列、RPC 框架或微服务网格。Discord 服务器就是你的 Agent 团队的"办公室"。
频道结构设计:
#coordination — 所有 Agent + 人类在此协调#research — 研究员工作区#writing — 写手工作区#review — 审稿者工作区#results — 最终成果发布每个 Agent 实例对应一个独立的 Discord Bot Token,通过不同的机器或不同端口运行:
bash
复制
# Machine A — Researcheropenclaw start--config researcher/settings.json --port 18789# Machine B — Writeropenclaw start--config writer/settings.json --port 18790# Machine C — Revieweropenclaw start--config reviewer/settings.json --port 18791Researcher Agent 的配置:
json
复制
{"name": "Agent-Researcher","channels": {"discord": {"token": "${DISCORD_BOT_TOKEN_RESEARCHER}","guild_id": "YOUR_GUILD_ID","listen_channels": ["coordination", "research"],"respond_to_mentions": true,"respond_to_channels": ["research"] } },"skills": ["web-search", "browser-tools", "summarizer"],"model": "gpt-4o"}通信模式有三种:
直接提及——@Agent-Writer 研究已完成,附件是数据源 频道广播——在 #coordination 频道向所有 Agent 发布任务 私讯转发——用于传输机密数据
六、ACP 协议:调用外部专业 AI
Agent Team 不局限于 OpenClaw 自己的 Agent。通过 ACP(Agent Client Protocol),OpenClaw 可以调度外部专业 AI 工具——Codex、Claude Code、Gemini CLI、Qwen Code、Kiro 等。
ACP 解决的问题是:OpenClaw 擅长消息路由、任务编排、定时调度,但不一定擅长某项专业技能(比如 Claude Code 的编码能力、Gemini 的超长上下文处理)。ACP 让 OpenClaw 成为元代理(Meta-Agent),动态编排这些专业工具。
6.1 ACP 核心配置
json
复制
6.2 调用 ACP Agent
通过 sessions_spawn 指定 runtime: "acp" 即可调用外部 AI:
json
复制
{"task": "打开仓库 /workspace/my-project 并运行完整测试套件,总结失败的测试","runtime": "acp","agentId": "claude","thread": true,"mode": "session"}关键参数:runtime: "acp" 是开关,agentId 指定调用哪个外部 AI,thread: true 请求线程绑定(Discord Thread 或 Telegram Forum Topic 中的消息自动路由到这个 ACP 会话)。
6.3 持久化绑定
可以将特定频道永久绑定到某个 ACP Agent,发往该频道的消息自动路由:
json
复制
{"bindings": [ {"type": "acp","agentId": "codex","match": {"channel": "discord","peer": { "kind": "channel", "id": "222222222222222222" } },"acp": {"label": "codex-main","cwd": "/projects/main-repo" } } ]}6.4 MCP + ACP 双协议协作
最前沿的 Agent Team 架构是 MCP + ACP 双协议双向协作。以 Kiro(AWS AI Agent)和 OpenClaw 为例:
协议 | 方向 | 作用 | 通信模式 |
MCP | Kiro → OpenClaw | Kiro 调用 OpenClaw 的工具能力 | 同步/异步工具调用 |
ACP | OpenClaw → Kiro | OpenClaw 向 Kiro 委派复杂任务 | 异步任务委派 |
Kiro 擅长代码生成和架构设计,但它不能发消息、不能操作设备、不能跑定时任务。OpenClaw 擅长这些,但推理能力不如专业编码 AI。双协议让两者互相补位:
json
复制
// Kiro 侧的 MCP 配置{"mcpServers": {"openclaw": {"command": "npx","args": ["-y", "openclaw-mcp@latest"],"env": {"OPENCLAW_GATEWAY": "https://gw.openclaw.ai","OPENCLAW_TOKEN": "${OPENCLAW_TOKEN}" } } }}实际效果:Kiro 通过 MCP 让 OpenClaw 在飞书群发通知、跑定时任务、操作服务器;OpenClaw 通过 ACP 把复杂的代码编写和架构评审任务委派给 Kiro。Kiro 获得了"手",OpenClaw 获得了"脑"。
七、目录结构与工程实践
7.1 推荐目录结构
7.2 Workspace 共享 vs 独立
有两种策略:
独立 Workspace——每个 Agent 有完全独立的 Workspace,记忆完全隔离。适合工作/生活场景分离、多用户共用。
共享 Workspace——多个 Agent 指向同一个 Workspace 路径,通过 Markdown 文件中的角色标记实现记忆共享。适合紧密协作的小团队。
共享 Workspace 的记忆写入规范:
markdown
复制
# memory/2026-03-29.md## [pm] 需求变更- 用户注册流程新增手机号验证步骤- 优先级:高## [coder] 完成事项- 完成 /src/api/register.py 手机号验证接口- 新增 /src/utils/sms.py 短信发送工具## [tester] 测试结果- 手机号验证:通过- 短信发送:因 SMTP 未配置,跳过通过 [pm]、[coder]、[tester] 标记,每个 Agent 可以读取所有成员的工作成果,实现无中间人的直接协作。
7.3 CLI 常用命令
bash
复制
八、安全防护五层模型
Agent Team 一旦上线,安全就是头等大事。多个 Agent 互相通信、调用外部工具、访问文件系统,攻击面比单 Agent 大数倍。OpenClaw 提供了五层安全模型:
第一层:通信白名单——agentToAgent.allow 严格控制哪些 Agent 可以互相通信。不在白名单里的 Agent 之间无法发送任何消息。
第二层:工具权限矩阵——每个 Agent 独立的 allow / deny / requireConfirmation 列表。Tester 不能写文件,Coder 的 exec 需要确认,PM 不能直接操作数据库。
第三层:沙箱隔离——从 v2026.1.6 起支持每 Agent 独立沙箱:
json
复制
{"id": "family","sandbox": {"mode": "all","scope": "agent","docker": { "setupCommand": "apt-get update && apt-get install -y git curl" } },"tools": {"allow": ["read"],"deny": ["exec", "write", "edit"] }}第四层:Sub-Agent 层级限制——maxSpawnDepth: 2 防止无限递归创建子 Agent。maxConcurrent: 8 限制全局并发数,防止资源耗尽。maxChildrenPerAgent: 5 限制单个 Agent 最多创建 5 个子 Agent。
第五层:非交互式权限控制——ACP Agent 运行在宿主机上,没有 TTY 交互能力。通过 acpx 插件的 permissionMode 和 nonInteractivePermissions 配置,确保自动化流程不会因等待用户输入而卡死:
bash
复制
openclawconfigsetplugins.entries.acpx.config.permissionModeapprove-allopenclawconfigsetplugins.entries.acpx.config.nonInteractivePermissionsdeny九、成本优化:模型分配策略
Agent Team 运行成本是生产环境的硬约束。不同角色使用不同级别的模型,是性价比最优的策略:
角色类型 | 推荐模型 | 价格参考($/1M tokens) | 理由 |
协调者/架构师 | Claude Opus 4 | $15 | 最强推理,负责复杂决策 |
编码/重构 | Claude Sonnet 4 | $3 | 速度与质量平衡 |
代码审查/测试 | GPT-5.4 Mini | $0.4 | 快速响应,成本极低 |
信息搜索/摘要 | Gemini 3.1 Flash | $0.15 | 超低成本,大上下文窗口 |
数据分析 | DeepSeek V4 | $0.27 | 数学推理强,性价比高 |
子 Agent 还可以按任务动态覆盖模型——简单任务用便宜模型,复杂任务临时切换到强模型:
bash
复制
# 简单任务用轻量模型/subagents spawn --model gpt-5.4-mini "把这个函数的注释翻译成英文"# 复杂任务用强模型/subagents spawn --model claude-opus-4 "分析这段代码的安全漏洞"十、总结
OpenClaw Agent Team 的核心工程思想可以提炼为三句话:
隔离是基础。 每个 Agent 拥有独立的 Workspace、AgentDir、会话存储和工具权限,通过 allowAgents 白名单控制通信。隔离做得越好,系统越稳定。
通信是关键。 sessions_spawn 解决单向委派(上下级),sessions_send 解决双向协商(同事),ACP 解决跨平台调度(外包)。三种机制覆盖了所有协作模式。
简单是目标。 配置文件是一个 JSON,人格定义是 Markdown,Agent 对话在 Discord 频道里,子 Agent 一条命令派生。不需要 Kubernetes,不需要微服务框架,不需要 RPC。一个 openclaw.json 加几个 SOUL.md 文件,就是一支完整的 AI 团队。
行动清单:
- 今天
——在本地安装 OpenClaw,创建 3 个 Persistent Agent(PM/Coder/Tester),配置 bindings 路由 - 本周
——实现一个完整的"需求 → 编码 → 测试"自动化流水线,验证 sessions_send 双向通信 - 本月
——接入 ACP 协议,让 OpenClaw 调度 Claude Code 或 Codex 完成真实项目编码
参考资料
OpenClaw 多智能体路由 - 官方文档 OpenClaw Multi-Agent 系统实战:sessions_spawn、sessions_send 与持久化代理的完整解析 OpenClaw 多 Agent 实战指南:Multi-Agent Routing 与 Sub-Agents OpenClaw 多智能体协作配置完全指南:从单兵作战到 AI 团队 OpenClaw 多 Agents 分工协作教程,轻松打造一个研发团队 深入剖析 OpenClaw 中 ACP Agents 的全方位实现机制 当 Kiro 遇上 OpenClaw:AI Agent 双向协作的实践探索(AWS 官方博客) OpenClaw MasterClass 模块 8:多 Agent 架构
夜雨聆风