一个飞书群,一个 Agent:我的 OpenClaw 多 Agent 是怎么搭起来的

用 OpenClaw 原生的 Agent 与 Binding,把不同飞书群连接到独立的工作区、规则、记忆和工具边界。

这套系统最初要解决的,不是让多个机器人同时说话,而是让不同工作上下文互不干扰。Amazon 日常运营、广告关键词和日常交流需要的资料、规则与判断方式完全不同;如果都塞进同一个 Agent,记忆越多,边界反而越模糊。

最终落地的是四个 Agent:Main 负责接收、判断和审阅,amazon-work 处理通用 Amazon 运营任务,ad-keyword 专注广告与关键词,casual-chat 则保留一个轻量的日常交流空间。三个飞书群分别绑定到后三个 Agent,每个 Agent 使用自己的 Workspace、Agent 目录和运行状态。

OpenClaw 官方网站首页,说明它是运行在本机的开源 AI 助手
本文讨论的多 Agent 结构建立在 OpenClaw 的本机运行、工具调用与消息入口能力之上。来源:OpenClaw 官方网站

先划边界,再增加 Agent

单 Agent 的问题并不是能力不够,而是上下文会互相借位。一次补货讨论里出现的库存假设,不应该顺手进入关键词分析;日常聊天形成的语气,也不适合影响业务交付。继续堆 Prompt 只能让规则越来越长,却不能真正分开文件、记忆和状态。

多 Agent 的第一步不是写更多 Prompt,而是先决定哪些上下文永远不该混在一起。

因此,拆分依据不是模型,也不是为了凑出几个角色,而是任务边界:输入从哪里来、允许读取什么、需要输出什么,以及结果由谁审阅。

最终采用 OpenClaw 原生 Agent 与 Binding

最初设想过单独写一层群路由器,真正实现时发现 OpenClaw 已经提供了更直接的结构:在 agents.list 中登记 Agent,再用 bindings 把飞书群映射到对应的 agentId。路由关系留在一份配置里,后续新增或调整职责时也更容易检查。

OpenClaw 官方 Control UI 文档页面
Control UI 只是可见入口之一;真正决定消息进入哪个 Agent 的仍是 Gateway、Binding 与 Workspace。来源:OpenClaw Control UI 文档
{
  "agents": {
    "list": [
      {
        "id": "amazon-work",
        "workspace": "~/.openclaw/workspaces/amazon-work",
        "agentDir": "~/.openclaw/agents/amazon-work/agent"
      },
      {
        "id": "ad-keyword",
        "workspace": "~/.openclaw/workspaces/ad-keyword",
        "agentDir": "~/.openclaw/agents/ad-keyword/agent"
      },
      {
        "id": "casual-chat",
        "workspace": "~/.openclaw/workspaces/casual-chat",
        "agentDir": "~/.openclaw/agents/casual-chat/agent"
      }
    ]
  },
  "bindings": [
    {
      "agentId": "amazon-work",
      "match": {
        "channel": "feishu",
        "peer": { "kind": "group", "id": "oc_group_amazon" }
      }
    },
    {
      "agentId": "ad-keyword",
      "match": {
        "channel": "feishu",
        "peer": { "kind": "group", "id": "oc_group_keywords" }
      }
    },
    {
      "agentId": "casual-chat",
      "match": {
        "channel": "feishu",
        "peer": { "kind": "group", "id": "oc_group_chat" }
      }
    }
  ]
}
当前配置的脱敏结构示例;飞书群 ID 使用样本值。

一条群消息如何找到正确的 Agent

  1. 飞书事件进入 OpenClaw,消息携带 channel 与群聊 peer 信息。
  2. Binding 用 channel + peer 匹配群聊,并选中对应的 agentId。
  3. OpenClaw 加载该 Agent 的 Workspace、角色规则、工具说明与记忆。
  4. 消息在对应 Agent 的状态中继续,不借用其他 Agent 的业务上下文。
  5. 需要跨领域处理时,由 Main 委派给专业 Agent,再接收产物和证据进行审阅。

这里最重要的一点是:群聊只负责把消息送到入口,业务边界并不写在飞书群名称里。真正决定 Agent 如何工作的,是它自己的 Workspace 和 worker contract。

真正的隔离发生在 Workspace

每个 Agent 都有独立目录,并维护自己的 AGENTS.md、SOUL.md、TOOLS.md 与 MEMORY.md。这样做比在一个总 Prompt 里反复强调“切换角色”更稳定,因为身份、操作规则、工具边界和长期记忆从文件层面就已经分开。

  • AGENTS.md:定义职责、工作流程、交付要求和禁止越界的任务。
  • SOUL.md:保留表达方式与判断原则,避免每次对话重新塑造角色。
  • TOOLS.md:说明可用工具及其使用约束,让能力边界保持可检查。
  • MEMORY.md:只沉淀本 Agent 值得长期保留的上下文,不与其他领域混写。
  • Agent state:各自保存运行状态,使连续对话仍然停留在正确的工作上下文里。

三个 Agent,不是三份换名字的 Prompt

amazon-work:承接通用运营执行

补货、发货、领星导出、补货编排、工时规划、本地脚本和系统工具任务都进入 amazon-work。它负责把任务真正做完,同时保留输入、输出与处理证据;关键词清洗、反查词映射等工作不会在这里顺手处理。

ad-keyword:把关键词工作做深

ad-keyword 只处理 Amazon 关键词相关任务,包括后台搜索词清洗与分类、自有 ASIN 反查词映射、竞品反查词筛选分级,以及关键词规则与投放建议。范围收窄后,规则文件可以写得更具体,输出也能固定为状态、产物路径、关键统计、证据和异常项。

casual-chat:保留轻量交流空间

casual-chat 不需要背负 Amazon 业务上下文。它保持轻量、直接和自然,日常讨论不会被业务规则打断,也不会把聊天内容带回运营 Agent。这个角色看似简单,却让整套系统的边界更完整。

专业 Agent 负责执行,Main 负责收口

两个业务 Agent 都有明确的 worker contract:接受 Main 委派,在自己的范围内完成实质执行,再把产物和证据交回 Main 审阅。这样既保留专业 Agent 的深度,也避免多个 Agent 同时向最终结果写入不同版本。

Worker contract

接收任务后先判断是否属于自己的职责范围。执行时保留输入、产物、关键统计、异常与证据;信息不足时返回缺失项,不假装完成;任务越界时交回 Main,由 Main 决定是否转交其他 Agent。

任务不完整时,Agent 不会假装已经完成,而是返回缺少的输入、当前状态和下一步;任务越界时,则交给职责对应的 Agent。这里的协作不是让所有 Agent 自由讨论,而是一条有交接标准的工作链。

这套结构带来的变化

OpenClaw 官方 Showcase 展示多 Agent 与个人工作流案例
官方 Showcase 中同样可以看到多 Agent、个人运营系统和日常工作流等不同使用形态。来源:OpenClaw Showcase
  • 飞书群本身成为稳定入口,群里的使用方式没有额外学习成本。
  • 业务规则可以针对一个领域持续细化,不必担心影响其他对话。
  • 每个 Agent 的文件、记忆和状态都能单独检查,问题更容易定位。
  • 新增领域时,只需新增 Agent、Workspace 与 Binding,不必重写整条消息入口。
  • Main 与专业 Agent 之间通过产物和证据交接,最终结果更容易复核。

回头看,最有价值的并不是同时运行了几个 Agent,而是每个 Agent 都知道自己该做什么、在哪里工作,以及什么时候应该把任务交出去。多 Agent 只有在边界可见、状态独立、交接清楚时,才真正比一个不断膨胀的总 Prompt 更可靠。

OpenClawMulti-AgentFeishuAgent Routing

Keep Reading