前言:
针对不同的工作场景需要使用不同的AI助理,实现隔离,还能够设置独立的工作区域,不同的模型,身份和SKILLS,以及不同的通讯账号路由。
第一步:多Agent提前规划和准备
比如,我有股市分析和公众号发布2个使用场景,需要新建2个agents:
main 日常聊天,全功能 飞书机器人,微信机器人 Deepseek chat模型 stocker: 股市助手,专注于股市数据采集,股市分析 飞书机器人,QQ机器人 Deepseek推理模型 publisher: 写作助手,专注于本地md文档上传到不同的平台。 飞书机器人 Deepseek chat模型 Tips 以上为使用不同模型的场景,可以共用一个对话模型,但是对于stocker这个agent我们使用了推理模型。
⁘ 飞书机器人配置:
参考如下文档配置:
⁘ QQ机器人配置:
参考如下文档配置:
⁘ 微信机器人配置:
参考如下文档配置:
第二步:创建多AGENTS
⁘ 使用命令创建Agents
1.登录服务器,输入命令检查当前的agent配置。
openclaw agents
2.输入命令增加新的agent
openclaw agents add stocker
询问是否创建工作区,回车默认选择是,
询问是否选择创建model,我们选择No,
询问是否选择创建channel,我们选择No,
命令完成后提示agent已经准备好。
⁘ 修改配置文件
1.提前备份openclaw.json文件 2.手动更改opencalw.json文件里面的agents.list,增加stocker,其中main agent和publisher使用DeepSeek Chat模型,stocker agent使用DeepSeek Reasoner模型。
"models":{"mode":"merge","providers":{"deepseek":{"baseUrl":"https://api.deepseek.com/v1","apiKey":"sk-xxxxxx","api":"openai-completions","models":[{"id":"deepseek-chat","name":"DeepSeek Chat"},{"id":"deepseek-reasoner","name":"DeepSeek Reasoner"}]}}},"agents":{"defaults":{"model":{"primary":"deepseek/deepseek-chat" #主模型为deepseek-chat},"workspace":"/root/.openclaw/workspace","compaction":{"mode":"safeguard"}},"list":[{"id":"main"},{"id":"stocker","name":"stocker","workspace":"/root/.openclaw/workspace-stocker","agentDir":"/root/.openclaw/agents/stocker/agent","model":{"primary":"deepseek/deepseek-reasoner" #主模型为deepseek-reasoner}},{"id":"publisher","name":"publisher","workspace":"/root/.openclaw/workspace-publisher","agentDir":"/root/.openclaw/agents/publisher/agent"}]},3.手动opencalw.json文件里面增加channels内容,配置新增的QQ机器人。
"channels":{"feishu":{"enabled":true,"domain":"feishu","accounts":{"main":{"appId":"xxxxxx","appSecret":"xxxxxxxx"},"stocker":{"appId":"xxxxx","appSecret":"xxxxx"},"publisher":{"appId":"xxxxx","appSecret":"xxxxx"},"default":{"groupPolicy":"open"}}},"qqbot":{"enabled":true,"accountId":"stocker_qq","appId":"xxxxx","clientSecret":"xxxxx"}},4.手动在opencalw.json文件里面增加blindings内容,基于用户路由到不同的agent中。
"bindings":[{"agentId":"main","match":{"channel":"feishu","accountId":"main"}},{"agentId":"stocker","match":{"channel":"feishu","accountId":"stocker"}},{"agentId":"publisher","match":{"channel":"feishu","accountId":"publisher"}},{"agentId":"stocker","match":{"channel":"qqbot","accountId":"stocker_qq" #关联stocker_qq的通道}}],配置完成后,输入命令检查JSON文件的合法项,再次重启gateway
openclaw config validate
openclaw gateway restart
第三步:验证机器人是否正常
在飞书对话框输入/status,对应model为deepseek-chat
🦞 OpenClaw 2026.3.8 (3caab92) 🧠 Model: anthropic/deepseek-chat · 🔑 unknown 🧮 Tokens: 48k in / 421 out 🗄️ Cache: 53% hit · 54k cached, 0 new 📚 Context: 54k/200k (27%) · 🧹 Compactions: 0 🧵 Session: agent:main:feishu:direct:ou_ee8445960212974ec2dee6835ae087f6 • updated just now ⚙️ Runtime: direct · Think: off 🪢 Queue: collect (depth 0)新增的飞书机器人,如果输入/status,提示如下:
OpenClaw: access not configured.Your Feishu user id: ou_7ed79f74fa2dbb0a49824d170a0b2c12Pairing code: JZ7RQ8VKAsk the bot owner to approve with: openclaw pairing approve feishu JZ7RQ8VK需要登录OpenClaw安装的宿主机,输入最后的命令:
openclaw pairing approve feishu JZ7RQ8VK
在QQ对话框输入/status,对应model为deepseek-reasoner
🦞 OpenClaw 2026.3.8 (3caab92)🧠 Model: anthropic/deepseek-reasoner · 🔑 unknown📚 Context: 0/200k (0%) · 🧹 Compactions: 0🧵 Session: agent:stocker:qqbot:direct:015d9cf81ec8db40723db94b40bf2744 • updated just now⚙️ Runtime: direct · Think: off🪢 Queue: collect (depth 0)微信对话框输入/status,对应model为deepseek-chat
🦞 OpenClaw 2026.3.8 (3caab92)🧠 Model: anthropic/deepseek-chat · 🔑 unknown📚 Context: 0/200k (0%) · 🧹 Compactions: 0🧵 Session: agent:main:openclaw-weixin:direct:o9cq80w8cloyu1gi8lz0l4b2xed8@im.wechat • updated just now⚙️ Runtime: direct · Think: off🪢 Queue: collect (depth 0)第四步:对不同的Agetnt配置文件进行设置
⁘ 多Agent配置文件说明:
配置完成后,上述3个agent对应不同的工作区,每个工作区对应相同的文件:
root@VM-0-7-ubuntu:~/.openclaw/workspace# lsAGENTS.md BOOTSTRAP.md HEARTBEAT.md IDENTITY.md skills SOUL.md TOOLS.md USER.mdroot@VM-0-7-ubuntu:~/.openclaw/workspace-publisher# lsAGENTS.md BOOTSTRAP.md HEARTBEAT.md IDENTITY.md SOUL.md TOOLS.md USER.mdroot@VM-0-7-ubuntu:~/.openclaw/workspace-stocker# lsAGENTS.md BOOTSTRAP.md HEARTBEAT.md IDENTITY.md SOUL.md TOOLS.md USER.md共同的文件定义见下表:
| 身份层 | 认知与人格 | 定义智能体的底层人格、身份边界与服务对象。 | |
| 操作层 | 流程与执行 | 定义工作流程、工具边界与自愈机制。 | |
| 知识层 | 记忆与进化 | 三级记忆架构:实现从短期日志到长期经验的沉淀。memory/ 目录下的每日日志,记录原始操作记录和反馈,新会话只加载最近两天 。 2. 长期记忆:MEMORY.md 存储精炼后的经验、教训和用户偏好,每次会话自动加载 。 |
BOOTSTRAP.md为初始化引导文件,启动后删除。
根据文件的定义以及前面的描述,我们当前的3个agent本身是为了将工作完全分开,stocker和publisher基本上是无交集的,本篇文章我们仅讨论这种职责明确的工作,对于通过多个agent进行交互来完成一个工作的配置在后续会逐步介绍。
下面我们就上面几个文件的配置来给出一个例子,用于知道其它智能体的配置。
⁘ Publisher智能体的初始配置
这个智能体本身为了解决markdown文档发布到公众号的自动化流程,可以参考前面的配置文章[[Markdown文件直接发布到微信公众号]]里面有详细描述。
先来配置身份相关的3个文件:
SOUL.md 可以理解为该智能体的"灵魂", 具体定义参考上表,我们的配置如下所示:
# SOUL.md – Publisher 智能体人格## 核心身份我是 **Publisher**,一名专业的微信公众号发布助手。我的唯一使命:让内容发布变得简单、可靠、高效。## 核心价值观1. **精准至上**:绝不篡改正文内容,只处理元数据(标题、封面、摘要)。2. **安全第一**:发布前必须确认,避免误发或重复发布。草稿箱是安全缓冲区。3. **用户主导**:我是执行者,你是决策者。重要操作等待你的确认。## 沟通风格- 结论先行,用 ✅/⚠️/❌ 快速反馈状态- 避免冗长解释,用列表呈现关键信息- 示例输出:📄 待发布:article.md🖼 封面:已自动匹配 Unsplash📝 标题:每日科技简报✅ 确认无误后回复“发布”## 绝对红线- ❌ 禁止修改文档正文内容- ❌ 禁止未经确认直接发布- ❌ 禁止删除源文件(除非你明确授权)- ❌ 禁止编造标题或封面IDENTITY.md
可以理解为该智能体的"名片", 具体定义参考上表,我们的配置如下所示:
# IDENTITY.md## 一句话角色你的微信公众号发布助手,把 Markdown 变成公众号草稿箱里的成品。## 昵称小刊## 氛围标签- 靠谱 📮- 话少活好 🚀- 不问第二遍 💡## 问候语“Ready. 有文章要发吗?”USER.md
服务的用户画像, 具体定义参考上表,我们的配置如下所示:
这里是指使用者本人的画像,不是智能体的画像,这里主要描述使用者的基础信息,偏好,公众号信息,常用发布目录,沟通偏好。
# USER.md## 基础信息- 称呼:可以直呼我- 时区:Asia/Shanghai- 角色:独立开发者 / 内容创作者## 发布偏好- 默认主题:`phycat`(物理猫风格)- 默认代码高亮:`solarized-light`- 默认封面:`/home/ubuntu/publish/default-cover.jpg`- 默认关闭:`--no-footnote`(不需要脚注)## 公众号信息- 名称:AI狗的技术骨头- 类型:订阅号- 认证状态:已认证## 常用发布目录- 待发布队列:`/home/ubuntu/publish/`- 已发布归档:`/home/ubuntu/published/`- 封面图库:`/home/ubuntu/covers/`## 沟通偏好- 批量发布时逐篇确认,不要一口气全发- 失败时告诉我原因,不要只说“失败了”- 保持简洁,用 emoji 快速传达状态再来配置操作相关的3个文件:
AGENT.md 相当于操作手册, 具体定义参考上表,我们的配置如下所示:
这里明确了触发条件和执行步骤,以及记忆管理和对产生错误时候的安全边界进行定义。
# AGENTS.md## 启动协议每次会话开始时自动执行:1. 读取 `SOUL.md` - 加载人格2. 读取 `USER.md` - 了解你的偏好3. 读取 `memory/YYYY-MM-DD.md` - 获取最近上下文## 发布流程 SOP### 触发条件- 你说“发布这篇文章”- 你说“发公众号”- 你说“/publish”### 执行步骤1. **确认文档** - 优先使用你直接提供的文件路径 - 若未指定,扫描 `/home/ubnutu/publish` 目录2. **检查格式** - 确保文件包含 frontmatter(title + cover) - 若缺少 cover,使用 USER.md 中的默认封面3. **确认发布** - 输出待发布信息(标题、封面预览) - 等待你回复“发布”或“确认”4. **执行发布** - 调用 `TOOLS.md` 中定义的发布脚本 - 命令格式:`cd /root/.openclaw/workspace-publisher/skills/wechat-publisher && ./scripts/publish.sh [文件] -t [主题] -h [高亮]`5. **记录归档** - 发布成功后记录到 `memory/YYYY-MM-DD.md` - 返回 Media ID 和草稿箱链接## 记忆管理| 层级 | 路径 | 用途 ||------|------|------|| 日志层 | `memory/YYYY-MM-DD.md` | 每日发布记录 || 长期记忆 | `MEMORY.md` | 用户偏好、常用封面 || 项目层 | `memory/publisher.md` | 待发布队列、历史统计 |## 安全边界- 破坏性操作(删除文件)前必须询问- 批量发布时逐篇确认- 遇到错误时重试一次,失败则报告TOOLS.md
相当于工具箱说明, 具体定义参考上表,我们的配置如下所示:
这里面需要主要的是,这里面的TOOLS不包括安装的skills以及,以及plugin和MCP的能力,只包含openclaw自身的能力,比如我们这里需要将WECHAT_APP_ID和WECHAT_APP_SECRET变量进行export,配合前面AGENTS.md里面的执行发布步骤。
# TOOLS.md## 微信公众号发布技能### 技能位置`/root/.openclaw/workspace-publisher/skills/wechat-publisher`## 🔐 WeChat Official Account (微信公众号)export WECHAT_APP_ID="xxxxxx"export WECHAT_APP_SECRET="xxxxxx"HEARTBEAT.md
心跳检测/健康检查, 具体定义参考上表,我们的配置如下所示
这里可以使用心跳检测检查固定文件夹下是否存在文件,检查命令是否可用以及API连通性等。
# HEARTBEAT.md## 定时任务### 每 4 小时(工作日 09:00-21:00)- 扫描 `/home/ubuntu/publish/` 目录- 如有待发布文件,提醒:“有 X 篇文章待发布,需要处理吗?”### 每日 20:00- 汇总今日发布记录- 输出到 `memory/YYYY-MM-DD.md` 并标记 `#publish-summary`### 条件触发- 如果连续 3 次发布失败 → 提醒检查环境变量和 IP 白名单- 如果 `/home/ubuntu/publish/` 积压超过 5 篇 → 提醒清理或批量发布## 健康检查- 检查 `wenyan` 命令是否可用- 检查环境变量是否配置完整- 检查公众号 API 连通性由于本身文章发布的工作并不是一个定时的工作,所有对于cron的部分不涉及。
最后一部分,我们来配置记忆相关的部分:
包含MEMORY.md为长期记忆的沉淀,在使用这个脚本分布的时候我们只明确了发布的风格,这里我们作为长期记忆先写入,后续可以直接在对话框中要求写入。
# MEMORY.md - 长期记忆## 用户偏好记录### 基础信息- **称呼**: 大熊- **时区**: Asia/Shanghai- **角色**: 独立开发者 / 内容创作者### 微信公众号发布设置基于 2026-03-26 首次发布测试验证的默认配置:#### 主题配置- **默认主题**: `phycat`(物理猫风格)- **默认代码高亮**: `solarized-light`- **脚注处理**: 默认关闭(`--no-footnote`)每日日志(memory/2026-03-11.md):存储在memory/目录下的原始操作记录,是MEMORY.md的原材料,这里面为系统自动记录,暂时不需要更改。
后记:
本文讲述了分离式的多Agent部署,基于功能实现创建不同的智能体,通过加载文件的配置,赋予智能体身份认证,SOP工作流和工具使用,以及心跳机制的创建保证智能体健康等环节基于初始化配置,同时通过对memory的内容也做了简要的配置。
夜雨聆风