第14篇讲了多 Agent 的基础配置。这篇做一个真实项目:自动抬杠系统。你扔进去一个辩题,正方、反方、裁判三个 Agent 自动依次出场,完成一场辩论,最后裁判宣布胜负。
这个项目会用到 OpenClaw 最有意思的功能之一:Agent 之间互相发消息。
一、多智能体通信机制
在 OpenClaw 里,Agent 之间通信有两种方式:
sessions_spawn(异步派发)
主 Agent 把一个任务丢给另一个 Agent,然后继续干自己的事。目标 Agent 完成任务后,结果会播报回来。
coordinator → sessions_spawn("帮我论证…") → pro Agent
↓(完成后)
coordinator ←─────────────── 播报结果 ───────
适合:并行任务、不需要等待结果的场景。
sessions_send(同步直连)
两个 Agent 之间直接对话,来一句回一句,最多可以来回 maxPingPongTurns 轮(默认 5 轮)。
coordinator → sessions_send("论点是…") → con Agent
coordinator ←──── 反驳结果 ─────────────
适合:需要链式传递上下文的场景,比如”把正方的论点传给反方让它反驳”。
重要:默认是关闭的
Agent 间通信默认禁用,必须在配置里显式开启,并指定哪些 Agent 之间可以通信。
二、辩论系统架构
我们要搭建的系统有四个角色:
用户
│
▼
coordinator(协调者)
├── sessions_spawn ──→ pro(正方)
│ │ 论点文本
├── sessions_send ───→ con(反方,接收正方论点)
│ │ 反驳文本
└── sessions_spawn ──→ judge(裁判,接收双方论点)
│
▼
最终判决发回用户
流程说明:
- 用户向 coordinator 发送辩题
- coordinator 调用 pro,让它给出支持论点
- coordinator 把 pro 的论点转发给 con,让它反驳
- coordinator 把双方论点一起交给 judge,由 judge 宣判
- coordinator 把判决结果整理后发回用户
三、创建 Agent
openclaw agents add coordinator
openclaw agents add pro
openclaw agents add con
openclaw agents add judge
执行后,每个 Agent 会有独立的目录:
~/.openclaw/agents/coordinator/
~/.openclaw/agents/pro/
~/.openclaw/agents/con/
~/.openclaw/agents/judge/
~/.openclaw/workspace-coordinator/
~/.openclaw/workspace-pro/
~/.openclaw/workspace-con/
~/.openclaw/workspace-judge/
四、配置文件
编辑 ~/.openclaw/openclaw.json:
{
// 开启 Agent 间通信
tools: {
agentToAgent: {
enabled: true,
// coordinator 可以调用所有三个专家 Agent
allowlist: ["pro", "con", "judge"]
}
},
session: {
agentToAgent: {
maxPingPongTurns: 3 // 每次 sessions_send 最多来回 3 轮
}
},
agents: {
maxSpawnDepth: 2, // 允许 coordinator 派发子任务
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6"
}
},
list: [
{
id: "coordinator",
agentDir: "~/.openclaw/agents/coordinator",
workspace: "~/.openclaw/workspace-coordinator",
tools: {
// coordinator 需要 sessions 工具来派发任务
allow: ["group:sessions", "group:messaging"]
}
},
{
id: "pro",
agentDir: "~/.openclaw/agents/pro",
workspace: "~/.openclaw/workspace-pro",
tools: { profile: "messaging" }
},
{
id: "con",
agentDir: "~/.openclaw/agents/con",
workspace: "~/.openclaw/workspace-con",
tools: { profile: "messaging" }
},
{
id: "judge",
agentDir: "~/.openclaw/agents/judge",
workspace: "~/.openclaw/workspace-judge",
tools: { profile: "messaging" }
}
],
// 用户消息全部进入 coordinator
bindings: [
{ channel: "telegram", agentId: "coordinator" }
]
}
}
五、给每个 Agent 写角色人格(SOUL.md)
每个 Agent 工作目录下放一个 SOUL.md,定义它的角色设定。
coordinator 的 SOUL.md
# 你是辩论主持人
你负责组织一场辩论,但你自己不参与辩论、不发表观点。
当用户给你一个辩题时,你的流程是:
1. 用 sessions_spawn 调用 pro Agent,让它给出支持这个辩题的论点
2. 等待 pro 的论点
3. 用 sessions_send 调用 con Agent,把 pro 的论点传给它,让它反驳
4. 等待 con 的反驳
5. 用 sessions_spawn 调用 judge Agent,把正反双方的完整论点都传给它,请它裁判
6. 等待判决,然后把完整的辩论过程(正方论点 + 反方反驳 + 裁判判决)整理成清晰的格式发给用户
格式示例:
---
⚔️ 辩题:[辩题]
🔵 正方:
[正方论点]
🔴 反方:
[反方反驳]
⚖️ 裁判判决:
[判决内容]
---
pro 的 SOUL.md
# 你是正方辩手
你的任务是为给定的辩题提供有力的支持论点。
要求:
- 立场坚定,始终支持辩题
- 给出 2-3 个核心论点,每个论点有简短的论据支撑
- 语言有说服力,逻辑清晰
- 回复控制在 200 字以内
con 的 SOUL.md
# 你是反方辩手
你的任务是反驳正方的论点,并提出自己的反方立场。
要求:
- 先针对正方的每个论点进行反驳
- 再提出 1-2 个支持反方立场的独立论点
- 语言犀利,逻辑严密
- 回复控制在 200 字以内
judge 的 SOUL.md
# 你是辩论裁判
你会收到正方和反方的完整论点,需要做出公正的裁判。
裁判标准:
1. 论点的逻辑性(40分)
2. 论据的充分性(30分)
3. 反驳的有效性(30分)
裁判格式:
- 简评正方表现
- 简评反方表现
- 宣布胜方及理由
- 回复控制在 150 字以内
把这四个文件分别放到对应的工作目录:
cat > ~/.openclaw/workspace-coordinator/SOUL.md << 'EOF'
# 你是辩论主持人
...(内容粘贴进去)
EOF
# 其他三个同理
六、实际效果演示
配置完成后,在 Telegram 给 Bot 发:
辩题:早起比熬夜更健康
coordinator 接收到消息,自动开始调度。几秒钟后,你会收到类似这样的结果:
⚔️ 辩题:早起比熬夜更健康
🔵 正方:
早起与健康生活节律高度吻合。其一,早晨皮质醇分泌旺盛,身体处于最佳唤醒状态,此时工作效率最高;其二,早起者往往有固定作息,充足睡眠有助于免疫系统修复;其三,研究表明长期夜型作息与代谢综合征、抑郁风险正相关,早起人群整体健康指标更优。
🔴 反方:
“早起比熬夜更健康”忽视了个体差异的核心问题。首先,约40%的人群属于”夜型人”,强行早起反而破坏其自然节律,导致慢性睡眠剥夺;其次,“健康”的关键是睡眠总量和质量,而非起床时间——凌晨2点睡8小时,优于23点睡5小时;第三,现代研究更关注”睡眠规律性”,与起床时间无关。
⚖️ 裁判判决:
正方论点聚焦皮质醇和统计数据,有一定说服力,但忽视了个体节律差异这一重大反例。反方针对性强,以”睡眠总量优先于起床时间”有效拆解了正方的核心假设,且引入了”规律性”这一更科学的健康维度。
判决:反方胜。 核心理由:健康睡眠的本质是总量和规律性,而非起床时间本身。
七、进阶:用 Lobster 做多轮辩论
如果想要多轮辩论(正方反驳 → 反方再反驳 → 最终裁判),可以用 OpenClaw 的 Lobster 工作流引擎,用 YAML 定义辩论结构:
# ~/.openclaw/workspace-coordinator/debate.yaml
loop:
maxIterations: 2 # 辩论 2 轮
steps:
- agent: pro
label: "正方第{{iteration}}轮"
- agent: con
label: "反方第{{iteration}}轮"
# 循环结束后由裁判总结
finalStep:
agent: judge
在 coordinator 的 SOUL.md 里加一行说明它可以调用这个工作流,Lobster 就会按 YAML 定义的顺序自动编排多个 Agent。
Lobster 的核心原则:让 YAML 负责流程控制(路由、轮次、条件),让 LLM 负责内容创作——两者各司其职,不要让 AI 模型来决定”下一步找谁”。
八、常见问题
Agent 没有响应
先检查 agentToAgent.enabled 是否为 true,再检查 allowlist 里是否包含了目标 Agent 的 ID。
openclaw config get tools.agentToAgent
openclaw agents list --bindings
派发的任务超时
sessions_spawn 默认有超时限制。如果辩论内容较长,可以在调用时设置更长的超时:
runTimeoutSeconds: 60
防止无限循环
设置 maxSpawnDepth: 2 后,子 Agent 的子 Agent 就不能再派发新任务了,这是防止无限递归的硬性限制。