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