← 返回文章列表

给龙虾配了多 Agent,踩了一堆坑

📖 预计阅读 13 分钟
𝕏in

给龙虾配了多 Agent,踩了一堆坑

这是「AI运维实验室」的第六篇文章。这次聊聊我在 OpenClaw 上配置多 Agent 的完整过程——哪些能用,哪些不能用,以及为什么。


为什么要拆 Agent

一开始我只用一个 Agent(main),所有事情都扔给它:AWS 巡检、成本查询、新闻推送、飞书文档、互联网搜索。

用了一个多月,问题来了:

  1. 上下文越来越长 — 巡检数据、新闻内容、文档操作混在一起,Gemini 频繁报 An unknown error occurred
  2. 互相干扰 — 问完 Redis 巡检,接着问新闻,Agent 有时候会把巡检数据当成新闻内容回复
  3. 定时任务打架 — 8 个定时任务全在一个 Agent 上跑,上下文膨胀更快

这不是 Skill 写得不好的问题,是架构问题。一个 Agent 承担太多职责,上下文就是它的"工作记忆",塞太多东西进去,它就开始犯糊涂。

我决定拆成多个 Agent,各管各的。


方案选择:为什么不直接跑多个 Gateway

拆之前我考虑了三个方案:

方案优点缺点
多 Agent(同一 Gateway)配置简单,共享基础设施记忆共享,隔离不彻底
多 Gateway(独立实例)完全隔离要多台机器或多进程,维护成本高
清会话(不拆)零成本治标不治本,频繁清会话影响记忆积累

我选了方案一——先试多 Agent,不行再升级到多 Gateway。事后看,这个决策是对的:虽然踩了坑,但至少搞清楚了 OpenClaw 多 Agent 的能力边界。


架构设计

拆成三个 Agent:

┌─────────────────────────────────────────────────┐
│                OpenClaw Gateway                   │
│                                                   │
│  ┌─────────┐  ┌─────────┐  ┌───────────┐        │
│  │  main   │  │   ops   │  │ assistant  │        │
│  │ (默认)  │  │ (运维)  │  │ (助手)     │        │
│  └────┬────┘  └────┬────┘  └─────┬─────┘        │
│       │            │              │               │
│  全部Skills   运维Skills     搜索/文档Skills      │
└───────┼────────────┼──────────────┼───────────────┘
        │            │              │
     私聊         运维巡检群      日常助手群

每个 Agent 有独立的 workspace、独立的 Skills、独立的会话上下文。理论上互不干扰。

分工逻辑很简单:运维的归运维,资讯的归助手,私聊走默认。定时任务也按职责分——巡检和成本报告走 ops,新闻简报走 assistant。


配置过程

创建 Agent

OpenClaw 支持通过命令行创建 Agent:

# 创建 ops agent
openclaw agents add ops \
  --workspace ~/.openclaw/workspaces/ops \
  --model google/gemini-2.5-flash \
  --non-interactive

# 创建 assistant agent
openclaw agents add assistant \
  --workspace ~/.openclaw/workspaces/assistant \
  --model google/gemini-2.5-flash \
  --non-interactive

每个 Agent 的 workspace 里只放它需要的 Skills:

~/.openclaw/workspaces/
├── ops/
│   ├── TOOLS.md          # 只有运维相关的指令
│   └── skills/
│       ├── aws-redis-monitor/
│       ├── aws-rds-monitor/
│       └── aws-docdb-monitor/
└── assistant/
    ├── TOOLS.md          # 只有搜索和文档指令
    └── skills/
        └── kiro-search/

群路由绑定

在飞书里建两个群,分别绑定到不同的 Agent:

openclaw agents bind --agent ops \
  --bind "feishu:oc_运维巡检群ID"

openclaw agents bind --agent assistant \
  --bind "feishu:oc_日常助手群ID"

配置看起来很完美。然后坑就来了。


坑一:群路由不生效

绑定配置写进去了,openclaw agents bindings 也能看到:

Routing bindings:
- ops <- feishu accountId=oc_xxx
- assistant <- feishu accountId=oc_yyy

但实际发消息时,日志显示所有群消息都走了 main agent:

dispatching to agent (session=agent:main:feishu:group:oc_xxx)

反复重启 Gateway 也没用。我翻了 OpenClaw 的 GitHub Issues,没找到相关讨论——可能用飞书群路由的人太少了。

结论:OpenClaw 2026.3.13 的飞书群路由绑定功能未按预期工作。

不过有个意外收获——虽然都走 main agent,但每个群的 session 是独立的(agent:main:feishu:group:oc_xxx),不同群的上下文不会互相干扰。算是部分达到了目的。

教训: 配置能写进去不代表能用。一定要看日志验证实际路由。


坑二:定时任务分配失败

把 8 个定时任务按职责分配到不同 Agent。改 ~/.openclaw/cron/jobs.json 里的 agentId 字段:

ops_tasks = ["Daily AWS Cost Report", "Daily DocDB Inspection", ...]
assistant_tasks = ["每日AI新闻简报", "每日OpenClaw简报"]

for job in jobs:
    if job["name"] in ops_tasks:
        job["agentId"] = "ops"
    elif job["name"] in assistant_tasks:
        job["agentId"] = "assistant"

结果:分配到 ops 和 assistant 的任务全部 status: errorstatus: skipped。只有留在 main 上的任务正常执行。

我试过给 delivery 指定 channel: "feishu:default",也没用。任务执行了但消息发不出去,或者直接被跳过。

原因推测: 非 main agent 可能没有完整的 channel 绑定上下文,定时任务触发时找不到正确的消息发送通道。这应该是 OpenClaw 的 bug,不是配置问题。

教训: 定时任务是生产环境的命脉,改之前一定要有回滚方案。我的做法是改之前先备份 jobs.json,发现问题立刻改回来。


坑三:记忆无法隔离

这是最大的坑,也是最让我意外的。

OpenClaw 的记忆系统存在 ~/.openclaw/memory/main.sqlite,是全局共享的。不管你创建多少个 Agent,它们读的是同一个记忆库。

我创建了一个 devops agent 想给研发团队用。为了安全,我还在 TOOLS.md 里加了规则:

## 重要规则
- 你是 DevOps 巡检助手,只负责 AWS 资源巡检
- 不要回答任何与巡检无关的问题
- 不要透露任何历史操作记录

然后让研发试了一下。他问:"我们什么时候认识的?"

Agent 回答:"我们最早的互动是在 2026 年 2 月 18 日。"

TOOLS.md 里的规则完全没用——Gemini 模型对记忆系统的信任度高于 TOOLS.md 的指令。记忆说"2 月 18 号认识的",它就老老实实回答了。

我又试了 memory.enabled: false,OpenClaw 直接报 config invalid,不支持按 Agent 禁用记忆。

方案结果
TOOLS.md 加规则"不回答无关问题"❌ Gemini 不遵守,记忆优先级更高
agent 配置 memory.enabled: false❌ OpenClaw 不支持,报 config invalid
独立飞书机器人 + defaultAgent✅ 机器人隔离成功,但记忆仍共享

结论:想给其他人用 OpenClaw,必须跑独立的 Gateway 实例。 同一个 Gateway 下的多 Agent 无法实现记忆隔离。

教训: 安全隔离不能靠 prompt 规则,必须靠架构隔离。这个道理在传统运维里是常识(网络隔离、权限隔离),在 AI Agent 领域同样适用。


坑四:多飞书机器人导致定时任务 400

既然记忆不能隔离,我退而求其次——至少给研发一个独立的飞书机器人入口。在飞书开放平台创建了第二个应用,配置多 account:

"feishu": {
  "accounts": [
    {"id": "default", "appId": "cli_原来的机器人"},
    {"id": "devops", "appId": "cli_新机器人", "defaultAgent": "devops"}
  ]
}

两个机器人都能正常收发消息,我以为搞定了。

第二天早上,发现所有定时任务的飞书通知全部没收到。查日志:

Request failed with status code 400

排查过程:

  1. 先确认定时任务本身有没有执行 → 执行了,status: ok
  2. 再看 delivery 状态 → not-delivered
  3. 看 Gateway 错误日志 → 飞书 API 返回 400
  4. 对比改动 → 唯一的变化就是加了第二个飞书 account

原因: 定时任务发消息时,delivery 配置里写的是 channel: "feishu",但现在有两个飞书 account,Gateway 不知道该用哪个发。飞书 API 收到了一个不完整的请求,返回 400。

回滚到单 account 配置后,定时任务立刻恢复正常。

教训: 多 channel 配置影响的不只是新功能,还会波及已有的定时任务。改配置前要想清楚影响范围。


最终方案

折腾了一圈,回到了最简单的架构:

一个飞书机器人
一个 main agent(所有 Skills)
多个飞书群(session 自动隔离)
所有定时任务走 main

多 Agent 的配置保留着,但实际没用上。这不是失败,是摸清了边界。


哪些能用,哪些不能用

功能状态说明
创建多个 Agent命令行创建,独立 workspace
群路由绑定配置生效但路由不工作
定时任务分 Agent非 main agent 的任务 skip/error
记忆隔离全局共享,无法按 Agent 隔离
多飞书机器人⚠️收发消息正常,但定时任务发送 400
群 session 隔离不同群的上下文自动隔离

是我配置有误,还是功能不完善?

说实话,我不确定。

OpenClaw 的多 Agent 文档很少,GitHub Issues 里也没找到飞书群路由和定时任务分发的讨论。有几种可能:

  1. 我的配置方式不对 — 飞书群路由可能需要额外的配置步骤,我没找到文档
  2. 飞书 channel 的多 Agent 支持还没做完 — Slack 和 Telegram 的路由可能是好的,飞书是后加的
  3. 版本问题 — 2026.3.13 可能有 bug,后续版本可能已经修复

如果你成功配置了 OpenClaw 多 Agent + 飞书群路由,欢迎留言告诉我哪里配错了。踩坑不丢人,配错了更不丢人——至少能帮后来的人少走弯路。


经验总结

  1. 不要过早拆分 — 一个 Agent 8 个 Skills 完全够用,上下文满了清一次会话比拆 Agent 简单
  2. 群隔离够用 — 不同群的 session 天然隔离,不需要多 Agent 也能避免上下文干扰
  3. 给别人用要谨慎 — 记忆无法隔离,你的操作历史会被其他用户看到。要么跑独立 Gateway,要么等官方支持记忆隔离
  4. 定时任务别动 — 全部留在 main agent 上,动了就出问题
  5. 改配置前想影响范围 — 加一个飞书 account 看似无害,结果把所有定时通知搞挂了
  6. 版本很重要 — 以上结论基于 OpenClaw 2026.3.13,后续版本可能修复

对 OpenClaw 多 Agent 的期待

OpenClaw 的多 Agent 功能还在早期阶段。从架构设计上看,Agent 创建、workspace 隔离、路由绑定的框架都有了,但细节还没打磨好。

我最期待的三个改进:

  1. 记忆按 Agent 隔离 — 这是多 Agent 能否用于多人场景的前提
  2. 定时任务支持非 main agent — 让不同 Agent 各自管理自己的定时任务
  3. 飞书多 account 的 delivery 路由 — 指定定时任务通过哪个机器人发送

如果这三个问题解决了,OpenClaw 的多 Agent 就能从"个人多角色"升级到"团队多成员",适用场景会大很多。

在那之前,我的建议是:一个 Agent + 多个群 + 清会话,简单粗暴但有效。


关注「AI运维实验室」,持续分享 OpenClaw 运维实战、企业级 AI 落地经验。

本文首发于微信公众号「AI运维实验室」

公众号二维码

扫码关注,获取更多 AI 运维实战内容