多智能体路由教程

advanced
## 什么是多智能体 默认情况下,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 #沙箱隔离 #龙虾技能库