摘要:本文深入解析 OpenClaw 的多 Agent 架构,包括核心概念、三层隔离机制、配置实战和安全最佳实践。无论你是想实现工作/生活隔离,还是想安全地分享 AI 能力给朋友,这篇文章都能给你答案。
提醒:该文章内容与 OpenClaw 共同探索完成,主要用作笔记参考,请辩证看待。
📖 目录
- 为什么需要多 Agent?
- 核心概念:什么是"一个 Agent"
- 三层隔离机制详解
- 实战:配置访客 Agent
- 安全最佳实践
- 常见问题解答
为什么需要多 Agent?
真实场景驱动
在研究 OpenClaw 多 Agent 架构之前,我们遇到了一个真实需求:
场景:我想把 AI 助手分享给朋友体验,或者帮朋友解决一些具体问题。但我不希望直接把主 Agent 提供给他们——我担心主 Agent 被"污染",同时主 Agent 具备的权限太高了。我需要一个权限足够低、完全不可能威胁到我隐私、可用性以及宿主机安全的 Agent。
这个需求揭示了多 Agent 架构的核心价值:
| 需求 | 单 Agent 方案 | 多 Agent 方案 |
|---|---|---|
| 工作/生活隔离 | 会话混合,记忆污染 | 完全物理隔离 |
| 权限控制 | 全有或全无 | 细粒度权限控制 |
| 分享体验 | 暴露全部隐私 | 独立沙盒环境 |
| 多人共享 | 会话历史混乱 | 每人独立 Agent |
多 Agent 的真正价值场景
- 个人用户:工作/生活分离,不同人格切换
- 团队共享:多人共享一个 Gateway,每人独立 AI
- 访客体验:安全地分享 AI 能力,权限受限
- 专业隔离:不同领域专家(编程、写作、研究)
核心概念:什么是"一个 Agent"
在 OpenClaw 中,一个 Agent 是一个完全隔离的"大脑",拥有独立的:
1. Workspace(工作区)
~/.openclaw/workspace-main/
├── SOUL.md # 人格设定
├── AGENTS.md # 操作指令
├── USER.md # 用户信息
├── TOOLS.md # 工具笔记
├── MEMORY.md # 长期记忆
└── skills/ # 专属技能
这是 Agent 的"知识库"和"人格设定"。
2. AgentDir(状态目录)
~/.openclaw/agents/main/agent/
├── auth-profiles.json # API 密钥
├── models.json # 模型配置
└── config.json # 专属配置
这是 Agent 的"认证信息"和"配置中心"。
3. Sessions(会话存储)
~/.openclaw/agents/main/sessions/
├── session-001.jsonl
├── session-002.jsonl
└── ...
这是 Agent 的"对话历史"。
关键理解
- ✅ 每个 Agent 完全独立 — 不共享认证、会话、记忆
- ✅ 技能可以共享 —
~/.openclaw/skills是全局技能库 - ✅ Workspace 是隔离的 — 但只是逻辑隔离,不是物理沙盒
三层隔离机制详解
OpenClaw 提供三个层次的隔离,可以叠加使用:
层级 1:逻辑隔离(必选,Always On)
┌─────────────────────────────────────┐
│ Gateway 进程 │
│ ┌───────────┐ ┌───────────┐ │
│ │ main │ │ guest │ │
│ │ Agent │ │ Agent │ │
│ │ │ │ │ │
│ │ Workspace │ │ Workspace │ │
│ │ 隔离 │ │ 隔离 │ │
│ │ Session │ │ Session │ │
│ │ 隔离 │ │ 隔离 │ │
│ │ Auth │ │ Auth │ │
│ │ 隔离 │ │ 隔离 │ │
│ └───────────┘ └───────────┘ │
└─────────────────────────────────────┘
隔离内容:
- Workspace 隔离 — 每个 Agent 有自己的工作目录
- Session 隔离 — 会话存储在不同文件夹
- Auth 隔离 — API Keys 独立
- 配置隔离 — 每个 Agent 可以有不同的配置
实现方式:配置文件中定义 agents.list[],Gateway 内部路由时根据 agentId 切换上下文。
这是 OpenClaw 的核心能力 — 无需 Docker,原生支持。
层级 2:工具权限隔离(可选,配置实现)
{
agents: {
list: [
{
id: "main",
tools: {
profile: "full", // 完整工具集
},
},
{
id: "guest",
tools: {
profile: "restricted", // 限制工具集
allow: ["read", "web_search"], // 白名单
},
},
],
},
}
隔离内容:
- 工具白名单 — guest Agent 只能用允许的工具
- 命令限制 — 可以禁止
exec - 文件操作限制 — 可以禁止
edit/write
实现方式:配置 tools.profile 和 tools.allow,Gateway 在工具调用前检查权限。
这也是核心能力 — 配置驱动,无需额外组件。
层级 3:沙盒隔离(可选,需要 Docker)
┌─────────────────────────────────────────────┐
│ Gateway 进程 │
│ ┌───────────┐ ┌───────────┐ │
│ │ main │ │ guest │ │
│ │ Agent │ │ Agent │ │
│ │ (直接运行) │ │ (沙盒运行)│ │
│ │ │ │ │ │
│ │ ┌─────┐ │ │ ┌─────┐ │ │
│ │ │工具 │ │ │ │工具 │ │ │
│ │ │执行 │ │ │ │执行 │ │ │
│ │ └──┬──┘ │ │ └──┬──┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ │ │ ▼ │ │
│ │ 宿主机 │ │ Docker │ │
│ │ 文件系统 │ │ Container│ │
│ │ │ │ ┌─────┐ │ │
│ │ │ │ │隔离 │ │ │
│ │ │ │ │文件系统│ │ │
│ │ │ │ └─────┘ │ │
│ └───────────┘ └───────────┘ │
└─────────────────────────────────────────────┘
隔离内容:
- 文件系统隔离 — 容器内无法访问宿主机文件
- 进程隔离 — 容器内进程与宿主机隔离
- 网络隔离 — 可限制容器网络访问
- 资源限制 — 可限制 CPU/内存使用
实现方式:配置 agents.defaults.sandbox.mode,Gateway 启动 Docker 容器,工具执行在容器内进行。
这是可选能力 — 需要 Docker,但配置简单。
三层隔离对比表
| 隔离层级 | 是否需要 Docker | 配置复杂度 | 安全级别 | 适用场景 |
|---|---|---|---|---|
| 逻辑隔离 | ❌ 否 | ⭐ 简单 | ⭐⭐ 基础 | 信任用户、工作/生活分离 |
| 工具权限 | ❌ 否 | ⭐⭐ 中等 | ⭐⭐⭐ 中等 | 访客体验、权限控制 |
| 沙盒隔离 | ✅ 是 | ⭐⭐⭐ 较高 | ⭐⭐⭐⭐ 最高 | 不受信任用户、高风险操作 |
实战:配置访客 Agent
场景描述
你想让朋友体验 AI 能力,但希望:
- ✅ 主 Agent 不被"污染"(记忆、会话历史)
- ✅ 朋友无法访问你的文件
- ✅ 即使被滥用,影响也局限在安全范围内
步骤 1:创建访客 Agent
# 创建 guest Agent
openclaw agents add guest --workspace ~/.openclaw/workspace-guest
这会创建:
-
~/.openclaw/workspace-guest/— 独立工作区 -
~/.openclaw/agents/guest/— 独立认证和会话存储
步骤 2:配置访客 Agent 的身份
创建 ~/.openclaw/workspace-guest/SOUL.md:
# SOUL.md - Guest Agent
你是一个友好的 AI 助手,专门帮助用户体验 AI 能力。
## 边界
- 不访问用户个人文件
- 不执行系统命令
- 不存储敏感信息
- 只提供通用帮助和演示
## 能力
- 网络搜索
- 网页内容提取
- 通用问题解答
- 代码示例(不执行)
## 语气
- 友好、耐心
- 适合新手体验
创建 ~/.openclaw/workspace-guest/AGENTS.md:
# AGENTS.md - Guest Agent
## 工作目录
- 仅限:`~/.openclaw/workspace-guest/`
- 禁止:访问其他目录
## 可用工具
- ✅ read (只读工作区内文件)
- ✅ web_search
- ✅ web_fetch
- ❌ exec (禁止命令执行)
- ❌ edit/write (禁止修改文件)
步骤 3:配置主配置文件
编辑 ~/.openclaw/openclaw.json:
{
// 定义两个 Agent
agents: {
list: [
{
id: "main",
workspace: "~/.openclaw/workspace",
tools: {
profile: "full",
},
},
{
id: "guest",
workspace: "~/.openclaw/workspace-guest",
// 🔒 安全限制
tools: {
profile: "restricted",
allow: [
"read",
"web_search",
"web_fetch",
],
deny: [
"exec",
"edit",
"write",
],
},
// 可选:启用沙盒(需要 Docker)
sandbox: {
mode: "all",
},
},
],
},
// 📡 路由配置
bindings: [
// 你的飞书 → main Agent
{
agentId: "main",
match: { channel: "feishu", accountId: "default" },
},
// 朋友的 Telegram → guest Agent
{
agentId: "guest",
match: { channel: "telegram", accountId: "guest-bot" },
},
],
// 💬 渠道配置
channels: {
feishu: {
accounts: {
default: {
appId: "cli_xxx",
appSecret: "***",
},
},
},
telegram: {
accounts: {
"guest-bot": {
botToken: "GUEST_BOT_TOKEN",
dmPolicy: "allowlist",
allowFrom: ["tg:friend_user_id"], // 只允许特定朋友
},
},
},
},
}
步骤 4:验证配置
# 查看 Agent 列表
openclaw agents list
# 查看路由绑定
openclaw agents list --bindings
# 重启 Gateway
openclaw gateway restart
安全最佳实践
1. 最小权限原则
访客 Agent 只授予必要的权限:
{
id: "guest",
tools: {
profile: "restricted",
allow: [
"read", // 只读
"web_search", // 搜索
"web_fetch", // 抓取网页
],
// 明确禁止
deny: [
"exec", // 禁止命令
"edit", // 禁止编辑
"write", // 禁止写入
"message", // 禁止主动发消息
],
},
}
2. 工作区隔离
确保访客 Agent 的 Workspace 是干净的:
# 创建干净的工作区
mkdir -p ~/.openclaw/workspace-guest
# 只复制必要的文件
cp ~/Library/pnpm/global/5/.pnpm/openclaw@*/node_modules/openclaw/skills/README.md ~/.openclaw/workspace-guest/
3. 渠道访问控制
使用 allowFrom 限制访问用户:
{
channels: {
telegram: {
accounts: {
"guest-bot": {
dmPolicy: "allowlist",
allowFrom: [
"tg:123456789", // 朋友 A
"tg:987654321", // 朋友 B
],
},
},
},
},
}
4. 沙盒加固(可选)
对于不受信任的用户,启用 Docker 沙盒:
# 创建沙盒镜像
openclaw sandbox setup
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // 非 main Agent 都用沙盒
scope: "session", // 每会话一个容器
},
},
},
}
5. 监控和审计
定期检查访客 Agent 的使用情况:
# 查看会话历史
openclaw sessions list --agent guest
# 查看日志
openclaw logs --follow | grep "guest"
常见问题解答
Q1: 多 Agent 会影响性能吗?
A: 影响很小。多个 Agent 运行在同一个 Gateway 进程里,只是逻辑隔离。只有启用沙盒时,Docker 容器会有轻微开销(约 5-10%)。
Q2: 每个 Agent 需要独立的 API Key 吗?
A: 是的。每个 Agent 有独立的 auth-profiles.json,需要分别配置 API Key。这是为了审计和权限控制。
Q3: 可以在同一个渠道(如飞书)上使用多 Agent 吗?
A: 可以,但需要多个 Bot 账号。飞书企业应用可以创建多个 Bot,每个 Bot 绑定一个 Agent。如果只有一个 Bot 账号,可以根据发送者路由到不同 Agent(见官方文档 multi-agent.md)。
Q4: 沙盒是必须的吗?
A: 不是。对于信任的用户(如自己的工作/生活分离),逻辑隔离 + 工具权限已经足够。沙盒适用于不受信任的用户(如公开分享)。
Q5: 如何删除一个 Agent?
# 删除 Agent(会删除所有会话和配置)
openclaw agents delete guest
# 手动清理工作区
rm -rf ~/.openclaw/workspace-guest
Q6: 可以在运行时切换 Agent 吗?
A: 不能。Agent 是在消息接收时根据 bindings 路由确定的。但你可以在对话中使用 /new 命令创建新会话,实现"软切换"。
Q7: 多 Agent 的最佳实践是什么?
A:
- 从单 Agent 开始,有需求再拆分
- 按场景拆分(工作/生活、专业领域)
- 不要过度拆分(维护成本高)
- 访客 Agent 必须限制权限
- 定期审计和清理
总结
OpenClaw 的多 Agent 架构提供了灵活、安全、可扩展的隔离方案:
| 隔离层级 | 配置难度 | 安全级别 | 推荐场景 |
|---|---|---|---|
| 逻辑隔离 | ⭐ | ⭐⭐ | 工作/生活分离 |
| + 工具权限 | ⭐⭐ | ⭐⭐⭐ | 访客体验 |
| + 沙盒隔离 | ⭐⭐⭐ | ⭐⭐⭐⭐ | 不受信任用户 |
核心要点:
- 多 Agent 是 OpenClaw 的核心能力,无需额外组件
- 三层隔离可以叠加使用,按需选择
- 访客 Agent 必须限制权限,推荐使用沙盒
- 定期审计和清理,保持系统安全
参考资料
作者: SLASH 🦞
最后更新: 2026-03-12
基于: OpenClaw v2026.3.8
欢迎转发分享,转载请注明出处。