Skip to content

第15章 多Workspace与多Agent

🎯 本章目标:学完这章,你能配置多Workspace和多Agent,满足进阶隔离需求

⏱️ 预计时间:20分钟

📋 前置要求:已完成第8章(配置文件)

  • 什么时候需要拆分Workspace
  • 多Agent的最小可用配置与路由
  • Session 隔离策略(dmScope,可理解为“私聊怎么分会话”)
  • 反模式:过度拆分的问题

先记一句:
Workspace 是默认工作目录(default cwd,默认操作目录),不是硬沙箱。

也就是说:

  • 相对路径默认在 workspace 里执行;
  • 绝对路径仍可能访问主机其它位置(除非你另行开启沙箱能力)。

官方默认相关路径(建议先记住):

  • 总配置:~/.openclaw/openclaw.json
  • 默认 workspace:~/.openclaw/workspace
  • 智能体状态目录:~/.openclaw/agents/<agentId>/agent
  • 会话目录:~/.openclaw/agents/<agentId>/sessions

建议在下面三类场景拆分:

  1. 工作 / 生活分离(避免上下文串味)
  2. 多客户分离(客户A与客户B的数据、习惯、提示词独立)
  3. 团队角色分离(如 support / coding 两个 agent 的知识边界不同)

一个简单目录参考:

~/.openclaw/
├── openclaw.json
├── workspace-home
├── workspace-work
└── agents/
├── home/
│ ├── agent/
│ └── sessions/
└── work/
├── agent/
└── sessions/

给你一个简单决策规则(够用就好):

  • 只有一个人、任务也不复杂:先不拆
  • 一旦出现“上下文串味”或“客户数据混用风险”:再拆
  • 拆分后如果你自己都记不住路由:说明拆太细了。

  • 你是单人使用,任务类型也不复杂;
  • 只是想“显得专业”而拆很多 workspace(先别这么干);
  • 当前问题主要是模型/渠道不稳定,不是“结构不够复杂”。

在 OpenClaw 里,一个 agent 是一整套“独立大脑”:

  • 独立 workspace
  • 独立 agentDir(认证、模型注册等状态)
  • 独立 sessions(聊天历史)

不要把多个 agent 指向同一个 agentDir,否则很容易出现认证/会话冲突。

先用命令创建第二个 agent(示例:work):

Terminal window
openclaw agents add work --workspace ~/.openclaw/workspace-work

查看当前 agent 与绑定情况:

Terminal window
openclaw agents list --bindings

操作提醒:改完 bindings 后,一定马上执行这条命令核对;不要等线上收不到消息才回头看分流。

如果你是第一次做多 agent,建议只做最小两角色:

  1. home:个人日常;
  2. work:工作事务。

先跑一周稳定后,再考虑第三个 agent。这样最不容易把自己绕晕。

然后在 ~/.openclaw/openclaw.json 中使用官方结构(agents.list[] + bindings[]):

{
agents: {
list: [
{
id: "home",
default: true,
workspace: "~/.openclaw/workspace-home",
agentDir: "~/.openclaw/agents/home/agent",
},
{
id: "work",
workspace: "~/.openclaw/workspace-work",
agentDir: "~/.openclaw/agents/work/agent",
},
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
channels: {
whatsapp: {
accounts: {
personal: {},
biz: {},
},
},
}
}

官方路由是确定性的,不是“随缘猜测”。

优先级可这样理解(从高到低):

  1. peer 精确匹配(某个私聊/群聊)
  2. 平台维度(如 Discord 的 guildId、Slack 的 teamId
  3. accountId 匹配(同一渠道多账号)
  4. 渠道级匹配
  5. 默认 agent(agents.list[].default 或列表第一个)

一句话:越具体,优先级越高。


session.dmScope 决定“私聊怎么分会话(分桶)”。官方可选值:

  • main(默认):所有私聊走同一主会话(连续性最好)
  • per-peer:按用户隔离(跨渠道同人可合并)
  • per-channel-peer:按渠道+用户隔离(多人收件箱常用)
  • per-account-channel-peer:按账号+渠道+用户隔离(多账号场景推荐)

如果你是团队/多人用,建议优先从 per-channel-peer 开始。

小白直接按这个选就行:

  • 只求省心连续main
  • 多人同时使用,怕串话per-channel-peer
  • 多账号运营(同渠道多个号)per-account-channel-peer

15.3.2 会话重置策略(常用配置)

Section titled “15.3.2 会话重置策略(常用配置)”
{
session: {
dmScope: "per-channel-peer",
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 120,
},
},
}
  • mode: "daily":每天固定时刻切新会话;
  • idleMinutes:空闲多久后切新会话;
  • 两者同时存在时,按“先到者”触发重置。

Terminal window
openclaw sessions
Terminal window
openclaw sessions --json
Terminal window
openclaw sessions --active 120

15.4.1 反模式1:把一个 agent 拆成一堆“技术栈 agent”

Section titled “15.4.1 反模式1:把一个 agent 拆成一堆“技术栈 agent””

例如拆成 js-coderpython-codergo-coder
结果通常是:

  • 路由规则越来越复杂;
  • 你自己都记不住该 @ 谁;
  • 配置维护成本持续上升。

更稳的做法:按业务角色拆(如 support / coding),不是按语言拆。

15.4.2 反模式2:多个 agent 复用同一个 agentDir

Section titled “15.4.2 反模式2:多个 agent 复用同一个 agentDir”

这会导致认证、模型状态、会话状态互相污染。
官方建议:每个 agent 独立 agentDir

15.4.3 反模式3:只建 agent,不建 bindings

Section titled “15.4.3 反模式3:只建 agent,不建 bindings”

只定义 agents.list 但没有 bindings,会出现“以为分流了,实际没分流”。
要用这条命令确认:

Terminal window
openclaw agents list --bindings

  1. 先跑单 agent,把模型和渠道稳定跑通;
  2. 再加第二个 agent(openclaw agents add ...);
  3. bindings 做明确分流;
  4. 最后再细化 dmScope(私聊分会话规则)和 reset 策略。

多Workspace/Agent的核心要点:

  1. Workspace 是默认 cwd,不是硬沙箱(别误解边界)
  2. 多 agent 用官方结构:agents.list[] + bindings[]
  3. Session 隔离看 dmScope(私聊分会话规则),不是旧的 shared/user/strict
  4. 每个 agent 独立 agentDir,避免状态冲突
  5. 先稳后拆,先少后多

下一步:第16章,部署与运维。


  1. 新建一个 work agent:openclaw agents add work --workspace ~/.openclaw/workspace-work
  2. ~/.openclaw/openclaw.json 增加一条 bindings
  3. 执行 openclaw agents list --bindings 检查是否生效
  4. 执行 openclaw sessions --json 观察不同会话键是否按预期隔离