第15章 多Workspace与多Agent
🎯 本章目标:学完这章,你能配置多Workspace和多Agent,满足进阶隔离需求
⏱️ 预计时间:20分钟
📋 前置要求:已完成第8章(配置文件)
本章你将学会什么
Section titled “本章你将学会什么”- 什么时候需要拆分Workspace
- 多Agent的最小可用配置与路由
- Session 隔离策略(
dmScope,可理解为“私聊怎么分会话”) - 反模式:过度拆分的问题
15.1 什么时候需要拆分Workspace
Section titled “15.1 什么时候需要拆分Workspace”15.1.1 什么是 Workspace
Section titled “15.1.1 什么是 Workspace”先记一句:
Workspace 是默认工作目录(default cwd,默认操作目录),不是硬沙箱。
也就是说:
- 相对路径默认在 workspace 里执行;
- 绝对路径仍可能访问主机其它位置(除非你另行开启沙箱能力)。
官方默认相关路径(建议先记住):
- 总配置:
~/.openclaw/openclaw.json - 默认 workspace:
~/.openclaw/workspace - 智能体状态目录:
~/.openclaw/agents/<agentId>/agent - 会话目录:
~/.openclaw/agents/<agentId>/sessions
15.1.2 拆分Workspace的场景
Section titled “15.1.2 拆分Workspace的场景”建议在下面三类场景拆分:
- 工作 / 生活分离(避免上下文串味)
- 多客户分离(客户A与客户B的数据、习惯、提示词独立)
- 团队角色分离(如 support / coding 两个 agent 的知识边界不同)
一个简单目录参考:
~/.openclaw/├── openclaw.json├── workspace-home├── workspace-work└── agents/ ├── home/ │ ├── agent/ │ └── sessions/ └── work/ ├── agent/ └── sessions/给你一个简单决策规则(够用就好):
- 只有一个人、任务也不复杂:先不拆;
- 一旦出现“上下文串味”或“客户数据混用风险”:再拆;
- 拆分后如果你自己都记不住路由:说明拆太细了。
15.1.3 不拆分的场景
Section titled “15.1.3 不拆分的场景”- 你是单人使用,任务类型也不复杂;
- 只是想“显得专业”而拆很多 workspace(先别这么干);
- 当前问题主要是模型/渠道不稳定,不是“结构不够复杂”。
15.2 多Agent的配置与路由
Section titled “15.2 多Agent的配置与路由”15.2.1 什么是多Agent
Section titled “15.2.1 什么是多Agent”在 OpenClaw 里,一个 agent 是一整套“独立大脑”:
- 独立 workspace
- 独立
agentDir(认证、模型注册等状态) - 独立 sessions(聊天历史)
不要把多个 agent 指向同一个 agentDir,否则很容易出现认证/会话冲突。
15.2.2 配置多个Agent
Section titled “15.2.2 配置多个Agent”先用命令创建第二个 agent(示例:work):
openclaw agents add work --workspace ~/.openclaw/workspace-work查看当前 agent 与绑定情况:
openclaw agents list --bindings操作提醒:改完 bindings 后,一定马上执行这条命令核对;不要等线上收不到消息才回头看分流。
如果你是第一次做多 agent,建议只做最小两角色:
home:个人日常;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: {}, }, }, }}15.2.3 Agent路由
Section titled “15.2.3 Agent路由”官方路由是确定性的,不是“随缘猜测”。
优先级可这样理解(从高到低):
peer精确匹配(某个私聊/群聊)- 平台维度(如 Discord 的
guildId、Slack 的teamId) accountId匹配(同一渠道多账号)- 渠道级匹配
- 默认 agent(
agents.list[].default或列表第一个)
一句话:越具体,优先级越高。
15.3 Session隔离策略
Section titled “15.3 Session隔离策略”15.3.1 什么是Session
Section titled “15.3.1 什么是Session”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:空闲多久后切新会话;- 两者同时存在时,按“先到者”触发重置。
15.3.3 如何查看当前会话
Section titled “15.3.3 如何查看当前会话”openclaw sessionsopenclaw sessions --jsonopenclaw sessions --active 12015.4 反模式:过度拆分的问题
Section titled “15.4 反模式:过度拆分的问题”15.4.1 反模式1:把一个 agent 拆成一堆“技术栈 agent”
Section titled “15.4.1 反模式1:把一个 agent 拆成一堆“技术栈 agent””例如拆成 js-coder、python-coder、go-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,会出现“以为分流了,实际没分流”。
要用这条命令确认:
openclaw agents list --bindings15.4.4 推荐落地顺序
Section titled “15.4.4 推荐落地顺序”- 先跑单 agent,把模型和渠道稳定跑通;
- 再加第二个 agent(
openclaw agents add ...); - 补
bindings做明确分流; - 最后再细化
dmScope(私聊分会话规则)和 reset 策略。
多Workspace/Agent的核心要点:
- Workspace 是默认 cwd,不是硬沙箱(别误解边界)
- 多 agent 用官方结构:
agents.list[]+bindings[] - Session 隔离看
dmScope(私聊分会话规则),不是旧的shared/user/strict - 每个 agent 独立
agentDir,避免状态冲突 - 先稳后拆,先少后多
下一步:第16章,部署与运维。
- 新建一个
workagent:openclaw agents add work --workspace ~/.openclaw/workspace-work - 在
~/.openclaw/openclaw.json增加一条bindings - 执行
openclaw agents list --bindings检查是否生效 - 执行
openclaw sessions --json观察不同会话键是否按预期隔离