## 什么是多智能体
默认情况下,OpenClaw 运行一个智能体(agentId = `main`),所有渠道的消息都由它处理。但在实际使用中,你可能需要多个"大脑"来处理不同场景:
- 一个智能体负责日常闲聊,另一个专注深度工作
- 不同联系人路由到不同智能体
- 家庭群组用一个专用智能体,工作群用另一个
多智能体架构就是在**一个 Gateway** 上运行**多个独立智能体**,每个智能体拥有独立的:
- **工作区(workspace)**:独立的 AGENTS.md、SOUL.md、MEMORY.md 等配置
- **会话(sessions)**:独立的对话历史
- **认证和权限**:独立的工具权限和沙箱配置
它们共享同一个 Gateway 进程、同一套渠道连接和同一个模型配置。
## 单智能体模式(默认)
安装 OpenClaw 后,默认只有一个智能体 `main`,它的工作区就是:
```
~/.openclaw/workspace/
```
所有渠道的消息都路由到 `main` 智能体。对大多数用户来说,单智能体模式完全够用。
你可以通过以下命令确认当前的智能体列表:
```bash
openclaw agents list
```
输出类似:
```
Agents:
main (default)
workspace: ~/.openclaw/workspace
sessions: ~/.openclaw/sessions
```
## 添加新智能体
当你需要第二个"大脑"时,使用交互式向导创建:
```bash
openclaw agents
```
向导会引导你完成以下步骤:
1. **输入智能体 ID**:给新智能体起个名字,比如 `work`、`family`、`assistant`
2. **选择模板**:可以从空白开始,也可以复制现有智能体的配置
3. **配置工作区**:自动创建独立的工作区目录
创建完成后,新智能体的文件结构:
```
~/.openclaw/
├── workspace/ # main 智能体的工作区
├── sessions/ # main 智能体的会话
└── agents/
└── work/ # 新智能体 "work"
├── workspace/ # work 的独立工作区
│ ├── AGENTS.md
│ ├── SOUL.md
│ └── MEMORY.md
└── sessions/ # work 的独立会话
```
你可以分别编辑每个智能体的 SOUL.md 来定义不同的人格:
```bash
# 编辑 main 智能体的人设
nano ~/.openclaw/workspace/SOUL.md
# 编辑 work 智能体的人设
nano ~/.openclaw/agents/work/workspace/SOUL.md
```
## Bindings 路由规则
有了多个智能体后,关键问题是:**哪条消息发给哪个智能体?**
这就是 Bindings(绑定)的作用。Bindings 是在 `openclaw.json` 中定义的路由规则,决定消息如何分发。
### 路由匹配优先级
Bindings 的匹配遵循**最具体者优先**原则:
1. **peer 匹配**(最高优先级):指定某个联系人/群组路由到某个智能体
2. **渠道匹配**:指定某个渠道的所有消息路由到某个智能体
3. **默认匹配**(最低优先级):没有匹配到任何规则时,使用默认智能体
### 配置示例
在 `~/.openclaw/openclaw.json` 中配置 Bindings:
```json
{
"bindings": [
{
"agentId": "work",
"channel": "telegram",
"comment": "Telegram 上的所有消息都给 work 智能体"
},
{
"agentId": "family",
"channel": "whatsapp",
"peer": "家庭群",
"comment": "WhatsApp 家庭群专用智能体"
},
{
"agentId": "main",
"comment": "其他所有消息给 main(默认)"
}
]
}
```
### 匹配字段说明
| 字段 | 说明 | 示例 |
|------|------|------|
| `agentId` | 目标智能体 ID | `"work"`、`"family"` |
| `channel` | 渠道类型 | `"telegram"`、`"whatsapp"`、`"discord"` |
| `peer` | 联系人/群组标识 | 电话号码、群组名、用户 ID |
| `accountId` | 渠道账号 ID | 多账号场景下区分不同账号 |
| `comment` | 备注说明 | 方便自己记住这条规则的用途 |
### 匹配规则详解
当一条消息到达时,Gateway 按以下顺序查找匹配的 Binding:
```
消息到达 → 遍历 bindings 数组
→ 检查 peer 是否匹配(如果定义了)
→ 检查 channel 是否匹配(如果定义了)
→ 检查 accountId 是否匹配(如果定义了)
→ 所有定义的字段都匹配 → 使用该 binding 的 agentId
→ 没有字段定义(空 binding)→ 作为默认路由
```
规则越具体(定义的字段越多),优先级越高。
## 实用场景
### 场景一:WhatsApp 日常 + Telegram 深度工作
```json
{
"bindings": [
{
"agentId": "deep-work",
"channel": "telegram",
"comment": "Telegram 用于深度工作,智能体更专注、更严谨"
},
{
"agentId": "main",
"comment": "WhatsApp 和其他渠道用默认智能体,轻松日常"
}
]
}
```
`deep-work` 智能体的 SOUL.md 可以设置为更专业、更严谨的风格:
```markdown
# SOUL.md (deep-work)
你是一个专注的工作助手。回答要精确、有条理。
不闲聊,不开玩笑。每次回答都要有明确的行动建议。
```
### 场景二:一个号码服务多人
如果你用一个 WhatsApp 号码同时服务多个客户,可以按联系人路由:
```json
{
"bindings": [
{
"agentId": "client-a",
"channel": "whatsapp",
"peer": "+8613800138001",
"comment": "客户 A 专用智能体"
},
{
"agentId": "client-b",
"channel": "whatsapp",
"peer": "+8613900139001",
"comment": "客户 B 专用智能体"
},
{
"agentId": "main",
"comment": "其他人用默认智能体"
}
]
}
```
每个客户的智能体可以有独立的记忆和上下文,互不干扰。
### 场景三:家庭群组专用智能体
```json
{
"bindings": [
{
"agentId": "family-bot",
"channel": "whatsapp",
"peer": "我的家庭群",
"comment": "家庭群专用,语气亲切友好"
},
{
"agentId": "main"
}
]
}
```
### 场景四:每个渠道一个 Bot
如果你同时运行 Discord Bot 和 Telegram Bot,可以让它们使用不同的智能体:
```json
{
"bindings": [
{
"agentId": "discord-bot",
"channel": "discord",
"comment": "Discord 服务器专用"
},
{
"agentId": "telegram-bot",
"channel": "telegram",
"comment": "Telegram 频道专用"
},
{
"agentId": "main"
}
]
}
```
## 按智能体配置沙箱和工具权限
多智能体的一个重要优势是可以**按智能体独立配置安全策略**。
### 沙箱模式
在 `openclaw.json` 中,可以为每个智能体设置不同的沙箱模式:
```json
{
"agents": {
"main": {
"sandbox": {
"mode": "off"
}
},
"untrusted": {
"sandbox": {
"mode": "docker",
"image": "openclawai/sandbox:latest"
}
}
}
}
```
沙箱模式选项:
| 模式 | 说明 |
|------|------|
| `off` | 不使用沙箱,直接在主机执行(默认) |
| `docker` | 在 Docker 容器中执行,完全隔离 |
### 工具权限
可以为每个智能体配置不同的工具白名单/黑名单:
```json
{
"agents": {
"main": {
"tools": {
"allow": ["*"],
"deny": []
}
},
"restricted": {
"tools": {
"allow": ["web_search", "read", "memory_search"],
"deny": ["exec", "write", "browser"]
}
}
}
}
```
这样 `restricted` 智能体只能搜索网页、读取文件和搜索记忆,不能执行命令、写文件或控制浏览器。
### 实际建议
- **日常智能体**:权限宽松,方便使用
- **面向外部用户的智能体**:开启沙箱 + 严格工具白名单
- **自动化任务智能体**:只开放必要的工具权限
## 路径速查
多智能体模式下,各种文件的路径规律:
| 路径 | 说明 |
|------|------|
| `~/.openclaw/openclaw.json` | Gateway 主配置(包含 bindings) |
| `~/.openclaw/workspace/` | `main` 智能体的工作区 |
| `~/.openclaw/sessions/` | `main` 智能体的会话 |
| `~/.openclaw/agents//workspace/` | 其他智能体的工作区 |
| `~/.openclaw/agents//sessions/` | 其他智能体的会话 |
常用管理命令:
```bash
# 列出所有智能体
openclaw agents list
# 创建新智能体(交互式)
openclaw agents
# 查看某个智能体的状态
openclaw agents status work
# 删除智能体
openclaw agents remove work
```
## 注意事项
1. **智能体 ID 命名**:使用小写字母和连字符,如 `deep-work`、`family-bot`
2. **默认路由**:bindings 数组中至少保留一个没有 channel/peer 限定的条目作为默认路由
3. **配置热重载**:修改 `openclaw.json` 后,Gateway 会自动检测变更并重新加载(如果开启了热重载模式)
4. **资源消耗**:多个智能体共享同一个 Gateway 进程,不会显著增加内存或 CPU 消耗
5. **会话隔离**:不同智能体的会话完全隔离,互相看不到对方的对话历史
## 小结
多智能体是 OpenClaw 的一个强大特性,让你可以用一个 Gateway 实例满足多种场景需求。核心要点:
- 每个智能体有独立的工作区、会话和权限配置
- Bindings 路由规则按"最具体者优先"匹配
- 可以按渠道、联系人、账号灵活路由
- 沙箱和工具权限可以按智能体独立配置
---
#OpenClaw多智能体 #路由配置 #Bindings #沙箱隔离 #龙虾技能库