乐于分享
好东西不私藏

OpenClaw Multi-Agent 实战:三大职责 Agent 协作配置指南

OpenClaw Multi-Agent 实战:三大职责 Agent 协作配置指南

OpenClaw Multi-Agent 实战:三大职责 Agent 协作配置指南

你有没有遇到过这种情况——让 AI 写代码,它顺便帮你发了条朋友圈;让 AI 做日程,它把你的邮件草稿发出去了。

问题不在 AI 太强,而在于没有给它划定职责边界

今天的文章,用 OpenClaw 的 Multi-Agent 架构,真正配置出三个各司其职的数字员工:生活助手 Agent 负责基金/黄金推送和日常提醒、公众号写作 Agent 负责研究和写稿、代码助手 Agent 负责需求到代码的全流程。每个 Agent 独立记忆、独立技能、独立工作,互不干扰。

读完这篇,你将掌握:

  • 如何用一条命令创建独立 Agent
  • 如何给每个 Agent 配置专属技能(Skills)
  • 如何用 Bindings 把不同消息路由到不同 Agent
  • 如何用 Cron Job 让 Agent 自动执行定时任务
  • 完整的三 Agent 协作架构搭建

一、Multi-Agent 架构解析:一个命令创建一个"脑子"

什么是 Agent

在 OpenClaw 里,一个 Agent = 一个独立的大脑,它拥有:

  • 独立 Workspace:自己的文件、SOUL.md、AGENTS.md、USER.md
  • 独立状态目录~/.openclaw/agents/<agentId>/agent/,包含认证配置和模型注册表
  • 独立会话存储:聊天历史完全隔离,不会串台
  • 独立技能集:可以给每个 Agent 分配不同的 Skills

核心命令速查

# 创建新的独立 Agent(一条命令搞定)
openclaw agents add life_assistant

# 查看当前所有 Agent 及绑定关系
openclaw agents list --bindings

# 重启 Gateway(修改配置后必执行)
openclaw gateway restart

创建 Agent 时会发生什么? OpenClaw 会:

  1. ~/.openclaw/agents/<agentId>/ 下创建完整的目录结构
  2. 自动生成该 Agent 的 SOUL.mdAGENTS.md
  3. 为该 Agent 创建独立的会话存储

单 Agent vs 多 Agent

模式 适用场景
单 Agent(默认) 个人助手,所有消息由 main Agent 处理
多 Agent 需要不同职责、不同身份的场景

二、Agent 1:生活助手——定时推送基金和黄金价格

2.1 创建 Agent

openclaw agents add life_assistant

2.2 配置 Agent 身份(SOUL.md)

进入该 Agent 的 Workspace:

# Agent 的 workspace 路径
~/.openclaw/workspace-life_assistant/

编辑 SOUL.md

# SOUL.md - 生活助手

你是路飞的生活管家,职责如下:

## 核心职责
1. 每天 09:00、14:30 推送基金净值和黄金价格
2. 回答常见生活问题(天气、计算、换算)
3. 记录路飞的生活偏好(通过对话学习)

## 行为准则
- 推送内容简洁明了,数据突出
- 不确定的信息主动说明"数据仅供参考"
- 外部操作(发消息到外部)必须确认后执行
- 永远不说"好的,我现在帮你..."

## 定时任务
- 09:00 :上午市场开盘前推送
- 14:30 :下午开盘后推送当日行情

2.3 配置定时推送(Cron Job)

这是让 Agent 自动干活的关键。OpenClaw 内置了 Cron 调度器,不需要额外工具:

# 添加每天 09:00 的定时推送任务
openclaw cron add \
  --name "上午基金黄金推送" \
  --cron "0 9 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "查询今日基金净值(兴全合润163406、中欧医疗003095)和黄金价格,生成简洁行情摘要,通过飞书推送给路飞" \
  --announce \
  --channel feishu

# 添加每天 14:30 的定时推送
openclaw cron add \
  --name "下午市场收盘推送" \
  --cron "30 14 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "查询今日基金净值和黄金价格,生成简洁行情摘要,通过飞书推送给路飞" \
  --announce \
  --channel feishu

# 查看所有定时任务
openclaw cron list

# 查看任务执行历史
openclaw cron runs --id <job-id>

Cron 表达式说明0 9 * * * = 每天 9:00(分 时 日 月 周)

表达式 含义
0 9 * * * 每天 9:00
30 14 * * 1-5 工作日 14:30
0 */4 * * * 每 4 小时

2.4 定时任务执行风格

模式 说明 适用场景
main 在下一个心跳周期执行 提醒、简单系统事件
isolated 独立会话,每次全新开始 报告、后台任务
session:custom-id 持久化命名会话 需要跨次累积的工作流

推送类任务推荐用 isolated 模式,每次独立执行,不会有上下文污染。

2.5 配置 Bindings(路由规则)

让飞书消息中包含"推送"、"行情"、"基金"、"黄金"关键字的自动路由到生活助手:

编辑 ~/.openclaw/openclaw.json

{
  agents: {
    list: [
      { id: "main", workspace: "~/.openclaw/workspace" },
      { id: "life_assistant", workspace: "~/.openclaw/workspace-life_assistant" }
    ]
  },
  bindings: [
    {
      agentId: "life_assistant",
      match: {
        channel: "feishu",
        // 包含以下关键词的消息路由到生活助手
        message: { contains: ["推送", "行情", "基金", "黄金", "提醒"] }
      }
    }
  ]
}

修改配置后重启生效:

openclaw gateway restart

2.6 最终验证

# 确认 Agent 和绑定都正确
openclaw agents list --bindings

# 预期输出类似:
# agent: life_assistant
#   workspace: ~/.openclaw/workspace-life_assistant
#   bindings:
#     - channel: feishu, message contains: [推送, 行情, 基金, 黄金, 提醒]

三、Agent 2:公众号写作 Agent——自主研究与深度写作

3.1 创建 Agent

openclaw agents add article_writer

3.2 配置 SOUL.md

# SOUL.md - 公众号写作 Agent

你是公众号「OpenClaw实践派」的专职写手。

## 工作职责
1. 每天 09:00 前完成当日文章发布(通过 cron 自动触发)
2. 写之前必须先学习网上同主题优质资料
3. 文章要求:问题解决式写法、有真实命令示例、有深度
4. 禁止:跨篇引用、泛泛而谈、功能介绍式写法

## 写作流程(严格执行)
1. 读取 series_state.json 确定今日主题
2. 在 learning/ 目录查找相关素材,没有则跳过
3. 使用 agent-reach 搜索网上参考资料
4. 独立写作,原创内容,不复制素材
5. 用 wenyan-cli 发布到微信公众号草稿箱
6. 通过飞书通知路飞发布结果

## 文章质量标准(每篇都要过这三问)
1. 读者能得到什么具体、可复用的价值?
2. 有无真实命令/配置示例?
3. 和已发文章有什么不同,不重复有新东西?

3.3 安装写作相关 Skills

# 安装搜索+读取网上资料技能
openclaw skills install agent-reach

# 安装微信公众号发布技能
openclaw skills install wechat-publisher

# 安装内容总结提炼技能
openclaw skills install summarize

# 更新所有技能到最新版本
openclaw skills update --all

Skills 安装位置说明

~/.openclaw/skills/          ← 所有 Agent 共享的技能
~/.openclaw/workspace-article_writer/skills/  ← 写作 Agent 专属技能

优先级:Agent 专属 > 全局共享 > 打包技能

3.4 配置每日自动发布 Cron Job

# 每天 08:50 自动执行写作工作流
openclaw cron add \
  --name "每日公众号文章发布" \
  --cron "50 8 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "执行公众号每日发布流程:1)读取series_state.json获取今日主题 2)检查learning素材 3)如需生成则用generate_article.py 4)用wechat_publish.py发布到草稿箱 5)用飞书通知路飞结果" \
  --announce \
  --channel feishu

3.5 三 Agent 协作示例

写作 Agent 不是一个人在战斗,实际协作流程:

主 Agent(收到指令:"帮我研究竞品XXX并写篇文章")
    ↓ 委托(delegate)
研究 Agent(agent-reach 搜索)→ 读取竞品官网 → 生成摘要
    ↓
写作 Agent(接收摘要)→ 独立写作 → wenyan 发布
    ↓
飞书通知 → "文章已发布:XXX深度分析"

这就是 OpenClaw 的 Delegate 架构:一个 Agent 可以把任务委托给另一个 Agent 执行,结果返回后继续处理。


四、Agent 3:代码助手——需求到代码的全流程

4.1 创建 Agent

openclaw agents add coding_assistant

4.2 配置 SOUL.md

# SOUL.md - 代码助手

你是路飞的专属代码助手。

## 核心职责
1. 理解自然语言需求,转换为可执行代码
2. 编写 Python / Shell / JavaScript 脚本
3. 自动测试验证代码正确性
4. 代码审查和优化建议

## 工作原则
- 先理解需求,再动手写代码
- 代码必须有注释,变量命名清晰
- 涉及文件操作、系统命令时先确认
- 外部操作(发邮件、推送到外部)必须经路飞确认

## 技能
- exec: 执行 Shell 命令
- write/edit/read: 文件操作
- agent-reach: 搜索技术方案和最佳实践

## 输出格式
完成后说明:
1. 实现了什么功能
2. 怎么运行(Usage)
3. 依赖什么环境

4.3 工具限制配置(安全边界)

代码助手权限大,需要配置工具限制防止误操作:

编辑 ~/.openclaw/openclaw.json

{
  agents: {
    list: [
      { id: "coding_assistant", workspace: "~/.openclaw/workspace-coding_assistant" }
    ],
    defaults: {
      tools: {
        // 只允许使用这些工具
        allow: ["read", "exec", "write", "edit"],
        // 禁止这些危险操作
        deny: ["delete", "trash", "format"]
      }
    }
  }
}

4.4 代码助手 Skills

openclaw skills install openai-whisper   # 代码转语音(如需要)
openclaw skills install summarize        # 代码审查摘要

4.5 绑定路由

将包含"写代码"、"帮我写"、"代码"、"脚本"关键字的消息路由到代码助手:

{
  bindings: [
    {
      agentId: "coding_assistant",
      match: {
        channel: "feishu",
        message: { contains: ["写代码", "帮我写", "代码", "脚本", "function", "python", "shell"] }
      }
    }
  ]
}

4.6 完整使用示例

场景:路飞在飞书说"写一个 Python 脚本,自动抓取基金净值存到 SQLite 数据库"

代码助手 Agent 接收后:

Step 1:理解需求 → 确认数据源、存储结构、运行频率 Step 2:搜索最佳实践 → 用 agent-reach 查询基金数据 API Step 3:编写代码

#!/usr/bin/env python3
"""
基金净值自动抓取脚本
功能:每天定时抓取指定基金净值,存入 SQLite 数据库
作者:路飞
依赖:requests, sqlite3
"""


import requests
import sqlite3
import logging
from datetime import datetime

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 基金代码列表
FUNDS = {
    '163406''兴全合润',
    '003095''中欧医疗健康A'
}

DB_PATH = '~/.openclaw/fund_data.db'

def init_db(db_path: str):
    """初始化数据库"""
    conn = sqlite3.connect(db_path)
    conn.execute('''
        CREATE TABLE IF NOT EXISTS fund_nav (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            fund_code TEXT NOT NULL,
            fund_name TEXT,
            nav_date TEXT NOT NULL,
            nav REAL,
            change_pct REAL,
            fetch_time TEXT,
            UNIQUE(fund_code, nav_date)
        )
    '''
)
    conn.commit()
    return conn

def fetch_fund_nav(fund_code: str) -> dict:
    """从天天基金网获取基金净值"""
    url = f'https://fundgz.1234567.com.cn/js/{fund_code}.js'
    try:
        resp = requests.get(url, timeout=10)
        resp.raise_for_status()
        # 返回类似: jsonpgz({"fundcode":"163406","name":"兴全合润","jzrq":"2026-04-03","dwjz":"2.847","gsz":"2.853","gszzl":"0.21","gztime":"2026-04-03 15:00"})
        import re, json
        match = re.search(r'jsonpgz\((.+)\)', resp.text)
        if match:
            data = json.loads(match.group(1))
            return {
                'fund_code': data['fundcode'],
                'fund_name': data['name'],
                'nav_date': data['jzrq'],
                'nav'float(data['dwjz']),
                'change_pct'float(data['gszzl']),
                'fetch_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            }
    except Exception as e:
        logger.error(f"获取基金 {fund_code} 失败: {e}")
    return None

def main():
    db_path = DB_PATH.replace('~'str(__import__('os').path.expanduser('~')))
    conn = init_db(db_path)
    
    for fund_code, fund_name in FUNDS.items():
        data = fetch_fund_nav(fund_code)
        if data:
            conn.execute('''
                INSERT OR REPLACE INTO fund_nav 
                (fund_code, fund_name, nav_date, nav, change_pct, fetch_time)
                VALUES (?, ?, ?, ?, ?, ?)
            '''
, (data['fund_code'], data['fund_name'], data['nav_date'], 
                  data['nav'], data['change_pct'], data['fetch_time']))
            logger.info(f"✅ {fund_name}({fund_code}): 净值{data['nav']}, 涨跌{data['change_pct']}%")
    
    conn.commit()
    conn.close()
    logger.info("📊 数据已存入数据库")

if __name__ == "__main__":
    main()

Step 4:测试运行 → 验证通过 Step 5:告知使用方法


五、多飞书机器人配置(重点)

这是让三个 Agent 真正"分工明确"的关键:每个 Agent 对应一个独立的飞书机器人,不同 Bot 身份回复,一眼就能分辨是谁在工作。

5.1 飞书开放平台创建多个 Bot

Step 1:登录 飞书开放平台[1] → 创建企业自建应用

Step 2:创建 4 个应用(一个 Agent 一个)

Agent 应用名称 App ID 示例
main 小渝 cli_axxxx1
life_assistant 生活助手 cli_axxxx2
article_writer 写作助手 cli_axxxx3
coding_assistant 代码助手 cli_axxxx4

Step 3:给每个应用开启机器人能力

  • 进入应用 → 机器人 → 开启机器人
  • 申请权限:im:chat:bot(发送消息)、im:message(接收消息)

Step 4:创建应用凭证

  • 应用首页 → 凭证与基础信息 → 记录 App IDApp Secret

Step 5:发布应用

  • 版本管理与发布 → 创建版本 → 申请发布 → 企业管理员审核

5.2 获取飞书 Webhook 地址(可选,用于推送)

如果 Bot 需要主动推送消息,还需要:

  1. 进入群 → 设置 → 群机器人 → 添加机器人 → 自定义机器人
  2. 复制 Webhook 地址,格式如:
    https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  3. 将 Webhook 地址配置到对应 Agent 的环境变量或配置文件中

5.3 完整多飞书Bot配置

openclaw.json 中的多 Bot 配置:

{
  agents: {
    list: [
      { 
        id: "main", 
        workspace: "~/.openclaw/workspace",
        // main Agent 使用第一个飞书 Bot
        feishu: { accountId: "main" }
      },
      { 
        id: "life_assistant", 
        workspace: "~/.openclaw/workspace-life_assistant",
        feishu: { accountId: "life_assistant" }
      },
      { 
        id: "article_writer", 
        workspace: "~/.openclaw/workspace-article_writer",
        feishu: { accountId: "article_writer" }
      },
      { 
        id: "coding_assistant", 
        workspace: "~/.openclaw/workspace-coding_assistant",
        feishu: { accountId: "coding_assistant" }
      }
    ]
  },
  bindings: [
    {
      agentId: "life_assistant",
      match: {
        channel: "feishu",
        accountId: "life_assistant",  // 只监听 life_assistant 这个 Bot 收到的消息
        message: { contains: ["推送", "行情", "基金", "黄金", "提醒", "几点"] }
      }
    },
    {
      agentId: "coding_assistant",
      match: {
        channel: "feishu",
        accountId: "coding_assistant",
        message: { contains: ["写代码", "帮我写", "代码", "脚本", "python", "shell"] }
      }
    },
    {
      agentId: "article_writer",
      match: {
        channel: "feishu",
        accountId: "article_writer",
        message: { contains: ["写文章", "发公众号", "帮我写", "发文章"] }
      }
    }
  ],
  channels: {
    feishu: {
      // 飞书频道配置:每个 Agent 一个账号
      accounts: {
        main: {
          appId: "cli_axxxx1",
          appSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        },
        life_assistant: {
          appId: "cli_axxxx2",
          appSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        },
        article_writer: {
          appId: "cli_axxxx3",
          appSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        },
        coding_assistant: {
          appId: "cli_axxxx4",
          appSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        }
      }
    }
  }
}

5.4 群聊中的使用方式

创建 4 个 Bot 后,有两种使用模式:

模式 A:同一个群里mention不同Bot

在飞书群里:

  • @生活助手 今天基金怎么样? → 生活助手 Bot 回复
  • @写作助手 帮我写一篇关于xxx的文章 → 写作助手 Bot 回复
  • @代码助手 写一个Python脚本 → 代码助手 Bot 回复

需要在飞书群里把 4 个 Bot 都添加到群内。

模式 B:不同群对应不同Agent

群名 负责 Bot 职责
路飞-生活群 生活助手 基金/黄金/提醒
路飞-写作群 写作助手 文章撰写
路飞-开发群 代码助手 代码开发
路飞-主群 小渝(主) 协调/其他

这种模式下,每个 Bot 只加入对应的群,不需要 @ 触发,直接对话即可。

5.5 多Bot路由的核心逻辑

用户发消息到飞书群
       │
       ▼
OpenClaw Gateway 接收消息
       │
       ▼
根据 Bot 的 accountId 确定是哪个 Agent 收到消息
       │
       ▼
该 Agent 的 Bindings 规则匹配消息内容
       │
       ▼
匹配成功 → 该 Agent 处理并回复(通过同一个 Bot 发出)
匹配失败 → 交给下一个 Agent

关键点:每个 Bot 的 accountId 必须和 channels.feishu.accounts 里的 key 对应上,且 bindings 里的 accountId 要精确匹配。

5.6 验证配置是否正确

# 查看各 Bot 的连接状态
openclaw channels status --probe

# 查看 Agent 和 Bot 的绑定关系
openclaw agents list --bindings

# 重启 Gateway 使配置生效
openclaw gateway restart

六、完整Bindings + 多Bot配置示例

{
  agents: {
    list: [
      { id: "main", workspace: "~/.openclaw/workspace", feishu: { accountId: "main" } },
      { id: "life_assistant", workspace: "~/.openclaw/workspace-life_assistant", feishu: { accountId: "life_assistant" } },
      { id: "article_writer", workspace: "~/.openclaw/workspace-article_writer", feishu: { accountId: "article_writer" } },
      { id: "coding_assistant", workspace: "~/.openclaw/workspace-coding_assistant", feishu: { accountId: "coding_assistant" } }
    ]
  },
  bindings: [
    {
      agentId: "life_assistant",
      match: {
        channel: "feishu",
        accountId: "life_assistant",
        message: { contains: ["推送", "行情", "基金", "黄金", "提醒", "几点"] }
      }
    },
    {
      agentId: "coding_assistant",
      match: {
        channel: "feishu",
        accountId: "coding_assistant",
        message: { contains: ["写代码", "帮我写", "代码", "脚本", "python", "shell"] }
      }
    },
    {
      agentId: "article_writer",
      match: {
        channel: "feishu",
        accountId: "article_writer",
        message: { contains: ["写文章", "发公众号", "帮我写", "发文章"] }
      }
    }
  ],
  channels: {
    feishu: {
      accounts: {
        main: { appId: "cli_主Bot的AppID", appSecret: "主Bot的AppSecret" },
        life_assistant: { appId: "cli_生活Bot的AppID", appSecret: "生活Bot的AppSecret" },
        article_writer: { appId: "cli_写作Bot的AppID", appSecret: "写作Bot的AppSecret" },
        coding_assistant: { appId: "cli_代码Bot的AppID", appSecret: "代码Bot的AppSecret" }
      }
    }
  }
}

路飞(用户)
    │
    ├── @生活助手 "今天黄金多少?" → 生活助手Bot → [life_assistant Agent]
    │       │
    │       └── 自动推送:基金净值、黄金价格
    │
    ├── @写作助手 "帮我写一篇关于XXX的文章" → 写作助手Bot → [article_writer Agent]
    │       │
    │       └── 搜索素材 → 深度写作 → wenyan发布
    │
    ├── @代码助手 "写一个Python脚本" → 代码助手Bot → [coding_assistant Agent]
    │       │
    │       └── 需求理解 → 代码编写 → 测试验证
    │
    └── @小渝 "其他任何问题" → 小渝Bot → [main Agent]
            │
            └── 协调调度、回复用户

定时任务(Cron Job):
    ├── 生活助手:09:00、14:30 自动推送行情(通过生活助手Bot推送)
    └── 写作助手:08:50 自动发布文章 → 飞书通知路飞

每个 Agent = 独立大脑 + 独立飞书Bot + 独立 Workspace + 独立技能

八、Skill 系统详解

OpenClaw 的 Skill 就是给 Agent 装备"工具箱"。每个 Skill 是一个文件夹,内含 SKILL.md 描述用途。

Skill 安装命令

# 从 ClawHub 安装
openclaw skills install <skill-slug>

# 查看可用的技能列表
openclaw skills list

# 更新所有已安装技能
openclaw skills update --all

Skill 存放位置(优先级从高到低)

1. <workspace>/skills/                   ← Agent 专属技能(最高优先)
2. <workspace>/.agents/skills/          ← 项目级技能
3. ~/.agents/skills/                     ← 个人级技能(跨工作区共享)
4. ~/.openclaw/skills/                   ← 全局共享技能
5. 打包的 bundled skills

这意味着你可以给写作助手装"爆文标题生成器",给代码助手装"代码审查器",各自独立,互不影响。


九、总结

能力 命令
创建新 Agent openclaw agents add <name>
查看 Agent 列表 openclaw agents list --bindings
添加定时任务 openclaw cron add --name "..." --cron "0 9 * * *"
安装技能 openclaw skills install <slug>
查看 Bot 连接状态 openclaw channels status --probe
重启生效 openclaw gateway restart

Multi-Agent + 多飞书机器人 的核心价值:让专业的人做专业的事。四个 Bot 各司其职,你只需要设定目标、监督结果,而不是每次都手把手指挥。

引用链接

[1]飞书开放平台: https://open.feishu.cn/app