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 会:
在 ~/.openclaw/agents/<agentId>/下创建完整的目录结构自动生成该 Agent 的 SOUL.md、AGENTS.md为该 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 ID和App Secret
Step 5:发布应用
版本管理与发布 → 创建版本 → 申请发布 → 企业管理员审核
5.2 获取飞书 Webhook 地址(可选,用于推送)
如果 Bot 需要主动推送消息,还需要:
进入群 → 设置 → 群机器人 → 添加机器人 → 自定义机器人 复制 Webhook 地址,格式如: https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx将 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
夜雨聆风