第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(裁判,接收双方论点)
101112                      最终判决发回用户

流程说明:

  1. 用户向 coordinator 发送辩题
  2. coordinator 调用 pro,让它给出支持论点
  3. coordinator 把 pro 的论点转发给 con,让它反驳
  4. coordinator 把双方论点一起交给 judge,由 judge 宣判
  5. 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 就不能再派发新任务了,这是防止无限递归的硬性限制。

自动辩论只是多智能体路由的一个具体例子。同样的模式可以用来搭建:代码 review 流水线(写代码 → 审核 → 测试)、内容生产线(写作 → 编辑 → 校对)、或者任何需要多个专家协作的工作流。