实现多个 Agent 之间的协同工作。我们将以“研发 Agent 请求运维 Agent 提供 Hive 机器信息”的典型场景为例,逐步说明配置方法和操作流程。
1. 前置条件
已安装并运行 OpenClaw 核心服务(版本 ≥ 2026.03)。
具备基本配置文件(openclaw.json)的编辑权限。
了解 Agent、技能(Skill)、绑定(Binding)和钩子(Hook)的基本概念。
已接入至少一个消息渠道(如 WhatsApp、飞书、Slack),用于测试。
2. 整体架构
[用户消息] → Gateway (路由表) → 研发 Agent
│
│ (通过 assign_task 技能)
▼
Gateway (Hook 调度)
│
│ (启动运维 Agent)
▼
运维 Agent → 执行技能 (查架构/机器信息)
│
│ (结果存入共享记忆 或 通过 Hook 回调)
▼
研发 Agent → 整合结果 → 回复用户
协作方式采用 Agent Teams(显式编排):研发 Agent 作为协调者,通过任务分配触发运维 Agent 工作。
3. 配置步骤
3.1 定义 Agent
在 openclaw.json 的 agents.list 中分别定义研发 Agent 和运维 Agent。
{
"agents": {
"list": [
{
"id": "研发-协调者",
"name": "研发负责人",
"model": {
"provider": "openai",
"name": "gpt-4-turbo"
},
"tools": {
"allow": ["assign_task"] // 允许使用任务分配技能
},
"workspace": "./workspaces/dev" // 独立工作区(可选)
},
{
"id": "运维-执行者",
"name": "运维专家",
"model": {
"provider": "anthropic",
"name": "claude-3-haiku"
},
"tools": {
"allow": [
"query_hive_architecture",
"get_machine_info"
]
},
"workspace": "./workspaces/ops"
}
]
}
}
3.2 配置消息路由(Bindings)
将外部消息(如来自飞书的特定群组)路由给研发 Agent。
{
"bindings": [
{
"agentId": "研发-协调者",
"match": {
"channel": "feishu",
"peer": {
"kind": "group",
"id": "oc_xxxxx" // 实际群 ID
}
}
}
]
}
3.3 创建 Agent 技能(Skills)
每个技能对应一个 Markdown 文件,放在 ~/.openclaw/skills/ 目录下。
assign_task 技能(研发 Agent 使用)
文件:~/.openclaw/skills/assign_task/SKILL.md
# assign_task
## 描述
当你需要其他专家 Agent(如运维)协助时,使用此技能分配任务。
## 参数
- `target_agent_id`: 目标 Agent 的 ID(字符串)
- `task_description`: 清晰的任务描述(字符串)
## 工作流程
1. 明确需要哪个 Agent 做什么事。
2. 调用底层工具 `sessions_send`,将任务信息发送到内部总线。
- 消息格式:`{ "type": "task_assignment", "targetAgentId": "...", "taskDescription": "..." }`
3. 告知用户任务已分配,请稍候。
## 示例
用户要求获取 Hive 架构图时,应设置:
- `target_agent_id`: "运维-执行者"
- `task_description`: "请提供生产环境 Hive 机器的架构图和以下 IP 的详细信息:10.0.1.10, 10.0.1.11"
实际调用 sessions_send 的细节由 OpenClaw 运行时自动处理,技能作者只需描述参数和意图。
运维 Agent 技能
文件:~/.openclaw/skills/query_hive_architecture/SKILL.md
# query_hive_architecture
## 描述
获取 Hive 集群的架构图和相关机器信息。
## 工作流程
1. 调用内部 CMDB API 获取最新架构图。
2. 解析返回的 JSON 数据,生成 Markdown 格式的报告。
3. 将结果写入共享记忆,键名为 `hive_architecture_<会话ID>`。
文件:~/.openclaw/skills/get_machine_info/SKILL.md
# get_machine_info
## 参数
- `ip_list`: 以逗号分隔的 IP 地址列表
## 描述
查询指定机器的 CPU、内存、磁盘等详细信息。
## 工作流程
1. 调用内部监控 API 获取实时指标。
2. 整理成表格返回。
3.4 配置任务分发 Hook
在 openclaw.json 的 hooks 数组中添加规则,使 Gateway 能够监听 sessions_send 发出的任务分配事件,并启动对应的 Agent。
{
"hooks": [
{
"event": "internal:message", // 内部消息事件
"condition": {
"field": "payload.type",
"operator": "eq",
"value": "task_assignment" // 仅处理类型为 task_assignment 的消息
},
"action": {
"type": "start_agent",
"agentId": "{{payload.targetAgentId}}", // 从事件中动态获取目标 Agent ID
"payload": {
"kind": "agentTurn",
"message": "{{payload.taskDescription}}",
"sessionTarget": "isolated" // 隔离会话,避免污染原对话
}
}
}
]
}
3.5 (可选)配置共享记忆
如果希望运维 Agent 的结果能被研发 Agent 自动感知,可以启用共享记忆插件(如 @openclaw/memory-plugin)。
在 Agent 配置中添加记忆相关设置:
{
"agents": {
"list": [
{
"id": "研发-协调者",
"memory": {
"provider": "sqlite",
"autoRecall": true, // 自动召回相关记忆
"namespace": "shared" // 与其他 Agent 共享的命名空间
}
},
{
"id": "运维-执行者",
"memory": {
"provider": "sqlite",
"autoStore": true, // 自动存储结果
"namespace": "shared"
}
}
]
}
}
此时运维 Agent 的执行结果会自动存入共享记忆,研发 Agent 在后续回复时会自动召回这些信息。
4. 操作流程(用户视角)
用户提出问题:在已绑定的飞书群中发送:“生产环境 Hive 查询变慢,研发帮忙看看?”
研发 Agent 接收:Gateway 根据 Binding 将消息发给研发 Agent。
研发 Agent 分析:
识别到需要 Hive 架构图和机器信息。
调用 assign_task 技能,参数为:
target_agent_id: 运维-执行者
task_description: “请提供生产环境 Hive 机器的架构图和以下 IP 的详细信息:10.0.1.10, 10.0.1.11”
技能内部通过 sessions_send 发送内部消息。
研发 Agent 回复用户:“正在调取运维数据,请稍候...”
Gateway 调度:Hook 监听到内部消息,根据 targetAgentId 启动运维 Agent,并将任务描述作为输入。
运维 Agent 执行:
调用 query_hive_architecture 技能获取架构图。
调用 get_machine_info 技能获取指定 IP 的机器信息。
将结果(Markdown 格式)通过 sessions_send 发送回 Gateway(或存入共享记忆)。
结果返回:
如果配置了共享记忆,研发 Agent 在下一轮回复时会自动召回数据,直接生成最终答案。
或者 Gateway 可以通过另一个 Hook 将结果转发给研发 Agent(需要额外配置)。
研发 Agent 整合并回复:生成包含架构图和机器信息的完整分析报告,回复给用户。
5. 验证与调试
检查 Agent 日志:每个 Agent 的运行日志默认在 ~/.openclaw/logs/ 下,可查看调用过程。
测试技能:可以在 Agent 工作区中手动执行技能,确保技能本身能正常工作。
模拟内部消息:使用 openclaw-cli 工具发送测试内部消息,验证 Hook 是否触发。
查看共享记忆:如果使用了记忆插件,可查询数据库确认数据是否成功存储。
6. 注意事项
任务分配不要循环:确保 Hook 配置不会导致 Agent 互相无限触发(例如研发 Agent 分配任务给运维,运维完成后又分配任务给研发)。可在任务负载中加入唯一 ID 或会话标记,避免重复处理。
隔离会话:使用 sessionTarget: "isolated" 确保运维 Agent 的执行环境与用户对话隔离,防止混淆。
技能参数格式:确保技能定义的参数格式与 Agent 实际调用时一致。建议使用 JSON 或明确的分隔符。
权限控制:不同 Agent 可使用不同的 API 密钥,避免跨 Agent 权限滥用。
监控与告警:对关键 Agent 的任务执行时间、失败率设置监控,及时发现异常。
7. 扩展:其他协作模式
事件驱动 + 共享记忆:如果不需要显式任务分配,可以让 Agent 将结果存入共享记忆,其他 Agent 通过自动召回获取信息。此模式耦合度更低,适合信息查询类场景。
多 Agent 轮询:通过 Hook 链式触发多个 Agent,实现流水线处理(如数据采集 → 分析 → 报告生成)。