【OpenClaw】OpenClaw实现多智能体协同工作
一、创建新的智能体分支
想为特定任务专门培养一个“专家”吗?用 openclaw agents add 命令就能轻松创建一个新智能体。
openclaw agents add --workspace ~/.openclaw/workspace-ui ui-service-agent
这里有两个关键参数:
--workspace:这个参数指定了该智能体的专属“大脑”目录。这个目录用于存储它的长期记忆和身份设定(比如 SOUL.md 文件),是实现与其他智能体逻辑隔离的核心。
ui-service-agent:为你新建的智能体设置一个唯一的ID,方便后续管理和调用。
命令执行成功后,通常会看到类似下图的提示:
二、配置消息路由
创建好智能体只是第一步,接下来得告诉系统:什么样的消息该交给谁来处理。这就需要配置消息路由(bindings)。
注意:接下来的命令会覆盖所有现有的绑定规则。稳妥起见,操作前建议先备份原有配置。
场景一:绑定到特定群聊
假设你希望刚创建的 customer-service-agent 专门负责处理某个飞书群里的所有提问。操作分两步:首先获取该群的 conversation_id,然后配置绑定规则。
openclaw config set --json bindings '[{"agentId": "customer-service-agent", "match": {"channel": "feishu", "peer": {"kind": "group", "id": "oc_xxxxxx" # 替换为实际的群ID}}}]'
这里有个细节需要注意:如果你的主智能体(main)还需要继续处理其他渠道的消息,就必须将原有的绑定规则也一并写入这个 JSON 数组。否则,主智能体就可能“停工”。
场景二:智能体之间的内部调用
比起静态绑定,更高级的玩法是动态调度。你可以让主智能体扮演“项目经理”的角色。当它接到一个复杂任务(比如编写一段代码)时,可以动态地使用 sessions_send 工具,将这项专业工作“派发”给专门的智能体(例如 code-agent)去处理。待专家处理完毕,再将结果回收并整合。这才是真正意义上的多智能体协同作战。
三、智能体之间的内部调用的具体示例
光说概念可能有点抽象,我们通过一个完整的例子,来看看如何实现上文中提到的“项目经理”调度“技术专家”。
第一步:创建你的“技术专家”智能体
首先,我们需要一位专业人士。假设要创建一个专门负责写代码的智能体,就叫它 code-agent。
创建智能体并分配独立工作空间:
在服务器终端执行下面的命令。这行命令不仅创建了ID为 code-agent 的智能体,还通过 --workspace 参数为它分配了一个独立的目录作为“大脑”。这保证了它的记忆和技能与其他智能体互不干扰。
# 创建一个ID为‘code-agent’的智能体,并指定其专属工作空间 openclaw agents add code-agent --workspace ~/.openclaw/workspace-code-agent
赋予它专业能力:
为了让 code-agent 成为一名优秀的“程序员”,你可以在它的工作空间(~/.openclaw/workspace-code-agent)里做文章。通过编辑 SOUL.md 文件,将其身份设定为资深开发工程师;在 TOOLS.md 中,则可以详细指导它如何使用各种代码工具。至于更精细的权限控制,我们下一步为主智能体配置时会涉及。
第二步:配置核心权限,让“项目经理”学会调度
现在,我们需要修改主智能体(main)的配置,赋予它调用其他同事的权限,也就是学会使用 sessions_send 这个“内部通话工具”。
1. 编辑主智能体的工具配置文件:
你需要修改位于 ~/.openclaw/ 目录下的 openclaw.json 文件。修改前备份是个好习惯:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup
2.在配置中启用 sessions_send 工具:
使用你熟悉的编辑器(如 vim)打开 openclaw.json,找到或创建针对 main 智能体的配置部分。关键点在于其 tools 配置项,需要确保它能使用 group:sessions 工具组下的功能(该组包含了 sessions_send 和 sessions_spawn 等)。
一个高效的做法是直接使用专为通信角色设计的 messaging 配置模板。你可以参考下面的配置片段:
{"agents": {"list": [{"id": "main", // ... 其他配置 ... "tools": {"profile": "messaging" // 使用“messaging”配置模板会自动包含 sessions_send, sessions_list 等通信工具 }}, {"id": "code-agent", "workspace": "~/.openclaw/workspace-code-agent", // 可以为 code-agent 配置不同的工具集,例如赋予它 coding 能力 "tools": {"profile": "coding" }}]}}
来看看这里的门道:
将 main 智能体的 tools.profile 设置为 "messaging",就相当于给了它一部“内部电话”和一本“通讯录”,使其有权使用 sessions_send 来联系其他智能体。
同时,将 code-agent 的 tools.profile 设置为 "coding",这意味着它将自动获得读写文件、执行命令等编程相关的工具权限。当然,你也可以根据实际安全需求,通过 allow 和 deny 列表进行更精细的控制。
3. 重启网关服务使配置生效:
配置修改完成后,别忘了重启网关服务来加载新设置:
openclaw gateway restart
第三步:实战演练,让“项目经理”发号施令
准备工作全部就绪!现在,当主智能体 main 接到一个写代码的请求时,它就可以召唤专家 code-agent 来帮忙了。
你可以在与 main 智能体的对话中,发出清晰的指令来触发这场协同。为了让智能体能准确理解意图,指令需要足够明确。
例如,你可以这样说:
“@main 请帮我写一个Python脚本,用来计算斐波那契数列。你让 code-agent 来写,写完后给我。”
接收到指令后,main 智能体内部会发生以下操作:
它会解析你的需求,并决定调用 sessions_send 工具。其内部执行的逻辑类似于下面这条指令(请注意,这是智能体内部的行为逻辑,并非需要用户手动输入的命令):
# 这是智能体内部调用的逻辑,不是你需要手动执行的命令 sessions_send \ --session-key "agent:code-agent:main" \ # 告诉系统,要呼叫 code-agent 这个智能体 --message "请帮我写一个Python脚本,用来计算斐波那契数列。要求代码简洁,包含注释。完成后将代码返回给我。"
这里的 session-key 格式 agent:<目标智能体ID>:<源智能体ID> 是 OpenClaw 系统中用于唯一标识和路由智能体间会话的关键。
最终,你将看到这样的效果:
code-agent 在自己的独立工作空间中,利用其编程工具集开始完成任务。完成后,它将结果传回给 main,最后由 main 将整理好的代码呈现给你。整个协同过程对用户而言几乎是透明的,你只需与主智能体对话,就能享受到背后专家团队的支持。
