目录
-
- 热门文章推荐
- 摘要
- [1. 引言 - 多智能体协作的价值](#1. 引言 - 多智能体协作的价值)
-
- [1.1 为什么需要多智能体协作?](#1.1 为什么需要多智能体协作?)
- [1.2 OpenClaw 多智能体架构概览](#1.2 OpenClaw 多智能体架构概览)
- [1.3 多智能体协作的应用场景](#1.3 多智能体协作的应用场景)
- [1.4 多智能体协作的核心优势](#1.4 多智能体协作的核心优势)
- [2. 协作模式详解 - 主从、对等、层级](#2. 协作模式详解 - 主从、对等、层级)
-
- [2.1 主从模式(Master-Worker)](#2.1 主从模式(Master-Worker))
- [2.2 对等模式(Peer-to-Peer)](#2.2 对等模式(Peer-to-Peer))
- [2.3 层级模式(Hierarchical)](#2.3 层级模式(Hierarchical))
- [2.4 三种模式对比](#2.4 三种模式对比)
- [3. 任务分解与分配 - 智能任务拆解](#3. 任务分解与分配 - 智能任务拆解)
-
- [3.1 任务分解原则](#3.1 任务分解原则)
- [3.2 任务分解流程](#3.2 任务分解流程)
- [3.3 任务分解实现](#3.3 任务分解实现)
- [3.4 依赖关系处理](#3.4 依赖关系处理)
- [4. 结果聚合与整合 - 多 Agent 输出合并](#4. 结果聚合与整合 - 多 Agent 输出合并)
-
- [4.1 聚合策略分类](#4.1 聚合策略分类)
- [4.2 子智能体结果通告机制](#4.2 子智能体结果通告机制)
- [4.3 结果聚合实现](#4.3 结果聚合实现)
- [4.4 通告消息格式](#4.4 通告消息格式)
- [5. 冲突解决机制 - 结果冲突处理](#5. 冲突解决机制 - 结果冲突处理)
-
- [5.1 冲突类型分析](#5.1 冲突类型分析)
- [5.2 冲突检测机制](#5.2 冲突检测机制)
- [5.3 冲突解决策略](#5.3 冲突解决策略)
- [5.4 冲突预防最佳实践](#5.4 冲突预防最佳实践)
- [6. 实战案例 - 复杂任务的多 Agent 协作](#6. 实战案例 - 复杂任务的多 Agent 协作)
-
- [6.1 系统架构设计](#6.1 系统架构设计)
- [6.2 配置文件](#6.2 配置文件)
- [6.3 协作流程实现](#6.3 协作流程实现)
- [6.4 运行效果](#6.4 运行效果)
- [7. 最佳实践与设计模式](#7. 最佳实践与设计模式)
-
- [7.1 智能体设计原则](#7.1 智能体设计原则)
- [7.2 协作模式选择指南](#7.2 协作模式选择指南)
- [7.3 成本优化策略](#7.3 成本优化策略)
- [7.4 安全配置建议](#7.4 安全配置建议)
- [7.5 常见问题与解决方案](#7.5 常见问题与解决方案)
- [8. 总结](#8. 总结)
- 参考资料
热门文章推荐
摘要
本文深入探讨 OpenClaw 框架中多智能体协作的高级应用与设计模式。从协作模式设计、任务分解策略、结果聚合方法到冲突解决机制,全面解析如何构建高效的多 Agent 协作系统。通过主从模式、对等模式、层级模式三种核心协作架构的对比分析,结合实际代码示例,帮助读者掌握复杂任务场景下的多智能体编排技巧。文章还涵盖沙箱隔离、工具策略配置、子智能体管理等关键技术要点,为构建企业级 AI 协作平台提供实践指导。🎯
1. 引言 - 多智能体协作的价值
1.1 为什么需要多智能体协作?
在 AI 应用日益复杂的今天,单一智能体已经难以满足多样化的业务需求。想象一下,你正在构建一个智能客服系统:它需要同时处理用户咨询、查询数据库、生成报告、发送通知------这些任务各有特点,如果全部由一个智能体承担,不仅效率低下,还容易出错。
多智能体协作的核心价值在于分工与专业化。就像一个高效的团队,每个成员都有自己的专长,通过协作完成复杂目标。OpenClaw 的多智能体架构正是基于这一理念设计,让不同的智能体各司其职,协同工作。🤝
1.2 OpenClaw 多智能体架构概览
OpenClaw 提供了一套完整的多智能体协作框架,主要包括以下核心组件:
🔧 工具层
🤖 智能体层
🌐 Gateway 网关层
👤 用户层
飞书用户
Telegram用户
Discord用户
消息路由
会话管理
认证授权
主智能体
Main Agent
子智能体
Subagent
专用智能体
Specialized Agent
文件操作
代码执行
浏览器控制
消息发送
上图展示了 OpenClaw 多智能体架构的整体设计。用户通过不同渠道(飞书、Telegram、Discord 等)发送消息,Gateway 网关负责消息路由、会话管理和认证授权,然后将请求分发给相应的智能体处理。智能体可以调用各种工具完成任务,也可以生成子智能体进行并行处理。
1.3 多智能体协作的应用场景
多智能体协作在实际应用中有着广泛的使用场景。随着 AI 技术的快速发展,单一智能体已经难以应对日益复杂的业务需求。多智能体协作通过分工与专业化,让不同的智能体各司其职,协同完成复杂目标。以下是一些典型的应用场景:
| 应用场景 | 协作模式 | 典型任务 |
|---|---|---|
| 智能客服 | 主从模式 | 主 Agent 接收问题,子 Agent 查询知识库、生成回复 |
| 数据分析 | 层级模式 | 调度 Agent 分配任务,执行 Agent 处理数据,汇总 Agent 生成报告 |
| 内容创作 | 对等模式 | 多个 Agent 并行创作,投票选出最佳内容 |
| 自动化运维 | 主从模式 | 监控 Agent 发现异常,执行 Agent 修复问题 |
| 研究助手 | 层级模式 | 主 Agent 分解课题,子 Agent 分别调研、整理、汇总 |
| 金融风控 | 对等模式 | 多个 Agent 分别评估不同风险维度,综合决策 |
| 医疗诊断 | 层级模式 | 分诊 Agent 初步判断,专科 Agent 深度分析,汇总 Agent 生成报告 |
1.4 多智能体协作的核心优势
相比单一智能体,多智能体协作具有以下显著优势:
🎯 专业分工:每个智能体可以专注于特定领域,提供更专业的服务。例如,一个智能体专门负责自然语言理解,另一个专门负责数据分析,第三个专门负责报告生成。这种专业化分工使得每个智能体都能在其擅长领域发挥最大价值。
⚡ 并行处理:多个智能体可以同时处理不同任务,显著提高整体效率。在处理大规模数据或复杂任务时,并行处理可以将总耗时缩短数倍。例如,一个需要搜索 10 个不同主题的任务,如果串行执行需要 10 分钟,并行执行可能只需要 2 分钟。
🛡️ 容错能力:当某个智能体失败时,其他智能体可以继续工作,系统具有更强的鲁棒性。在对等模式下,即使部分智能体失败,系统仍然可以通过投票或融合机制得出有效结果。
🔧 灵活扩展:可以根据业务需求动态添加或移除智能体,系统具有良好的可扩展性。当业务规模增长时,只需增加相应类型的智能体即可应对,无需重构整个系统。
💰 成本优化:不同智能体可以使用不同成本的模型,在保证质量的同时控制总体成本。关键决策使用高质量模型,辅助任务使用便宜模型,实现成本与质量的平衡。
2. 协作模式详解 - 主从、对等、层级
OpenClaw 支持三种核心的多智能体协作模式,每种模式适用于不同的业务场景。理解这些模式的特点和适用场景,是构建高效协作系统的基础。🏗️
2.1 主从模式(Master-Worker)
主从模式是最常见的协作模式,由一个主智能体(Master)负责任务分配和结果汇总,多个子智能体(Worker)负责具体执行。
任务1
任务2
任务3
用户请求
主智能体
Master Agent
任务分析
子智能体 A
子智能体 B
子智能体 C
结果汇总
返回用户
核心特点:
- 主智能体拥有全局视角,负责决策和协调
- 子智能体专注执行,不参与决策
- 任务流向清晰,易于管理和监控
- 子智能体之间相互隔离,互不干扰
适用场景:
- 任务可以明确分解为独立子任务
- 需要统一协调和结果汇总
- 子任务之间没有复杂的依赖关系
配置示例:
json
{
"agents": {
"list": [
{
"id": "main",
"name": "主智能体",
"default": true,
"workspace": "~/.openclaw/workspace",
"sandbox": { "mode": "off" }
},
{
"id": "research-worker",
"name": "研究助手",
"workspace": "~/.openclaw/workspace-research",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["read", "web_search", "web_fetch"],
"deny": ["exec", "write", "edit"]
}
},
{
"id": "code-worker",
"name": "代码助手",
"workspace": "~/.openclaw/workspace-code",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["read", "write", "exec", "process"],
"deny": ["browser", "message"]
}
}
]
}
}
上述配置定义了一个主智能体和两个专用子智能体。主智能体运行在主机上,拥有完全的工具访问权限;研究助手只能进行网络搜索和文件读取;代码助手可以执行代码但不能访问浏览器和发送消息。这种细粒度的权限控制确保了系统的安全性。🔒
2.2 对等模式(Peer-to-Peer)
对等模式中,所有智能体地位平等,没有主从之分。每个智能体都可以独立接收任务、执行操作、返回结果。这种模式适用于需要多角度分析或投票决策的场景。
对等智能体组
智能体 A
分析视角1
智能体 B
分析视角2
智能体 C
分析视角3
任务输入
结果聚合
投票/融合
最终输出
核心特点:
- 所有智能体地位平等,无主从关系
- 并行处理相同或相似任务
- 通过投票、融合等方式确定最终结果
- 具有容错能力,单个智能体失败不影响整体
适用场景:
- 需要多角度分析的问题
- 内容质量评估与投票
- 冗余执行以提高可靠性
实现方式:
对等模式通常通过主智能体同时启动多个子智能体来实现,每个子智能体使用相同的任务描述但可能有不同的模型或配置:
json
{
"agents": {
"defaults": {
"subagents": {
"maxConcurrent": 5,
"model": "gpt-4o-mini"
}
}
}
}
2.3 层级模式(Hierarchical)
层级模式是一种树状结构,顶层智能体负责战略决策,中层智能体负责战术规划,底层智能体负责具体执行。这种模式适用于复杂的多阶段任务。
⚙️ 执行层
📋 规划层
🎯 决策层
调度智能体
Orchestrator
研究规划
开发规划
测试规划
搜索Agent
分析Agent
编码Agent
调试Agent
测试Agent
报告Agent
核心特点:
- 清晰的层级结构,职责分明
- 上层智能体负责分解任务和分配
- 下层智能体负责具体执行
- 支持递归分解,处理复杂任务
适用场景:
- 大型项目的自动化管理
- 复杂工作流的编排
- 需要多阶段处理的任务
2.4 三种模式对比
| 特性 | 主从模式 | 对等模式 | 层级模式 |
|---|---|---|---|
| 结构复杂度 | 低 ⭐ | 中 ⭐⭐ | 高 ⭐⭐⭐ |
| 协调开销 | 低 | 中 | 高 |
| 容错能力 | 中 | 高 ✅ | 低 |
| 扩展性 | 好 | 一般 | 好 |
| 适用任务 | 独立子任务 | 并行分析 | 复杂流程 |
| 实现难度 | 简单 | 中等 | 复杂 |
3. 任务分解与分配 - 智能任务拆解
任务分解是多智能体协作的核心环节。一个好的分解策略能够最大化并行度,减少依赖,提高整体效率。🎯
3.1 任务分解原则
有效的任务分解应遵循以下原则:
- 独立性原则:子任务之间应尽量独立,减少相互依赖
- 均衡性原则:子任务的工作量应尽量均衡,避免负载不均
- 原子性原则:每个子任务应是不可再分的最小单元
- 完整性原则:所有子任务完成后应能还原完整结果
3.2 任务分解流程
可分解
不可分解
接收任务
任务分析
识别子任务
直接执行
确定依赖关系
生成执行计划
分配智能体
并行执行
结果聚合
任务完成
3.3 任务分解实现
OpenClaw 使用 sessions_spawn 工具来创建子智能体并分配任务。下面是一个完整的任务分解与分配示例:
python
# 任务分解与分配的核心逻辑
# 主智能体通过 sessions_spawn 启动子智能体
class TaskDecomposer:
"""任务分解器:将复杂任务拆解为可并行的子任务"""
def __init__(self, main_agent_id: str):
self.main_agent_id = main_agent_id
self.subagent_results = {}
def decompose(self, task: str) -> list[dict]:
"""
分析任务并生成子任务列表
Args:
task: 用户输入的原始任务描述
Returns:
子任务列表,每个子任务包含 id、description、dependencies
"""
# 使用 LLM 分析任务结构
analysis = self._analyze_task_structure(task)
# 生成子任务列表
subtasks = []
for i, sub in enumerate(analysis.get("subtasks", [])):
subtasks.append({
"id": f"subtask_{i}",
"description": sub["description"],
"dependencies": sub.get("dependencies", []),
"assigned_agent": sub.get("suggested_agent", "default")
})
return subtasks
def spawn_subagents(self, subtasks: list[dict]) -> list[str]:
"""
为每个子任务启动对应的子智能体
Args:
subtasks: 子任务列表
Returns:
启动的子智能体 runId 列表
"""
run_ids = []
for subtask in subtasks:
# 调用 sessions_spawn 工具启动子智能体
result = sessions_spawn(
task=subtask["description"],
agentId=subtask["assigned_agent"],
label=subtask["id"],
model="gpt-4o-mini", # 使用更便宜的模型
thinking="low" # 子任务不需要深度思考
)
run_ids.append(result["runId"])
return run_ids
上述代码展示了任务分解的核心逻辑。TaskDecomposer 类首先通过 LLM 分析任务结构,识别出可并行的子任务,然后为每个子任务启动对应的子智能体。注意这里使用了 gpt-4o-mini 模型和 low 思考级别,这是成本优化的最佳实践------让主智能体使用高质量模型进行决策,子智能体使用便宜模型执行具体任务。💡
3.4 依赖关系处理
当子任务之间存在依赖关系时,需要按拓扑顺序执行:
python
def execute_with_dependencies(self, subtasks: list[dict]):
"""
按依赖关系顺序执行子任务
Args:
subtasks: 包含依赖关系的子任务列表
"""
# 构建依赖图
dependency_graph = self._build_dependency_graph(subtasks)
# 拓扑排序获取执行顺序
execution_order = self._topological_sort(dependency_graph)
# 按顺序执行
completed = set()
for batch in execution_order:
# 同一批次的任务可以并行执行
parallel_tasks = [t for t in subtasks if t["id"] in batch]
# 启动并行子智能体
run_ids = self.spawn_subagents(parallel_tasks)
# 等待当前批次完成
results = self._wait_for_completion(run_ids)
# 保存结果供后续任务使用
for task_id, result in zip(batch, results):
completed.add(task_id)
self.subagent_results[task_id] = result
4. 结果聚合与整合 - 多 Agent 输出合并
当多个子智能体完成任务后,主智能体需要将各部分结果聚合为完整输出。结果聚合是多智能体协作的关键环节,直接影响最终输出质量。📊
4.1 聚合策略分类
根据任务类型和输出格式,OpenClaw 支持多种聚合策略:
| 聚合策略 | 适用场景 | 输出类型 | 复杂度 |
|---|---|---|---|
| 简单拼接 | 独立内容合并 | 文本、列表 | 低 ⭐ |
| 结构化合并 | JSON 对象合并 | JSON | 中 ⭐⭐ |
| 投票选择 | 多方案决策 | 离散选项 | 中 ⭐⭐ |
| 加权融合 | 数值结果整合 | 数值、评分 | 中 ⭐⭐ |
| LLM 综合 | 复杂内容整合 | 任意 | 高 ⭐⭐⭐ |
4.2 子智能体结果通告机制
OpenClaw 的子智能体通过通告步骤将结果返回给主智能体。这个过程是自动化的,主智能体无需主动轮询:
聊天渠道 子智能体B 子智能体A Gateway 主智能体 聊天渠道 子智能体B 子智能体A Gateway 主智能体 par [并行执行] sessions_spawn(任务A) runId_A sessions_spawn(任务B) runId_B 执行任务A 执行任务B 通告结果A 发布到请求者聊天 通告结果B 发布到请求者聊天 接收结果通知
4.3 结果聚合实现
python
from typing import Any
import json
class ResultAggregator:
"""结果聚合器:合并多个子智能体的输出"""
def __init__(self):
self.results = {}
def collect_result(self, subagent_id: str, result: Any):
"""
收集子智能体的结果
Args:
subagent_id: 子智能体标识
result: 子智能体的输出结果
"""
self.results[subagent_id] = {
"data": result,
"timestamp": time.time(),
"status": "completed"
}
def aggregate(self, strategy: str = "merge") -> Any:
"""
根据策略聚合所有结果
Args:
strategy: 聚合策略 (merge/vote/llm_synthesize)
Returns:
聚合后的最终结果
"""
if not self.results:
return None
if strategy == "merge":
return self._simple_merge()
elif strategy == "vote":
return self._voting_aggregate()
elif strategy == "llm_synthesize":
return self._llm_synthesize()
else:
raise ValueError(f"Unknown strategy: {strategy}")
def _simple_merge(self) -> dict:
"""简单合并:将所有结果合并为一个字典"""
merged = {}
for subagent_id, result_info in self.results.items():
data = result_info["data"]
if isinstance(data, dict):
merged.update(data)
else:
merged[subagent_id] = data
return merged
def _voting_aggregate(self) -> Any:
"""投票聚合:选择出现次数最多的结果"""
from collections import Counter
values = [r["data"] for r in self.results.values()]
counter = Counter(str(v) for v in values)
most_common = counter.most_common(1)[0][0]
# 返回原始值(非字符串形式)
for v in values:
if str(v) == most_common:
return v
def _llm_synthesize(self) -> str:
"""LLM 综合:使用 LLM 整合多个结果"""
results_text = "\n\n".join(
f"=== {sid} ===\n{r['data']}"
for sid, r in self.results.items()
)
prompt = f"""请将以下多个智能体的分析结果整合为一个完整的报告:
{results_text}
要求:
1. 去除重复内容
2. 保留各智能体的独特见解
3. 按逻辑顺序组织内容
4. 使用专业但易懂的语言
"""
# 调用 LLM 进行综合
return llm_task(prompt=prompt, maxTokens=2000)
上述代码实现了三种聚合策略。_simple_merge 适用于结构化数据的合并;_voting_aggregate 适用于需要决策的场景;_llm_synthesize 则使用 LLM 对复杂内容进行智能整合。选择合适的聚合策略是保证输出质量的关键。🔑
4.4 通告消息格式
子智能体完成后的通告消息遵循标准化格式:
Status: success
Result: [子智能体的输出摘要]
Notes: [错误详情或其他上下文]
---
runtime 5m12s | tokens 12K/3K/15K | cost $0.02
sessionKey: agent:main:subagent:abc123
sessionId: sess_xyz
transcript: /path/to/transcript.json
主智能体可以通过 sessions_history 工具获取子智能体的完整执行历史,用于深度分析和结果验证。
5. 冲突解决机制 - 结果冲突处理
在多智能体协作中,不同智能体可能产生相互矛盾的结果。如何检测和解决这些冲突,是保证系统可靠性的重要课题。⚖️
5.1 冲突类型分析
| 冲突类型 | 描述 | 示例 | 解决难度 |
|---|---|---|---|
| 数据冲突 | 不同智能体返回不一致的数据 | Agent A: 价格 100, Agent B: 价格 120 | 中 ⭐⭐ |
| 结论冲突 | 分析结论相互矛盾 | Agent A: 看涨, Agent B: 看跌 | 高 ⭐⭐⭐ |
| 格式冲突 | 输出格式不兼容 | JSON vs 纯文本 | 低 ⭐ |
| 时序冲突 | 结果依赖过时数据 | 使用不同时间点的数据 | 中 ⭐⭐ |
| 权限冲突 | 操作权限不足 | 尝试执行被拒绝的操作 | 低 ⭐ |
5.2 冲突检测机制
格式不一致
格式一致
数据不一致
数据一致
逻辑矛盾
逻辑一致
收集所有结果
格式检查
格式冲突
数据一致性检查
数据冲突
逻辑一致性检查
结论冲突
无冲突
触发冲突解决
正常聚合
5.3 冲突解决策略
OpenClaw 提供多种冲突解决策略,可根据业务需求选择:
python
from enum import Enum
from typing import Any, Optional
import statistics
class ConflictResolutionStrategy(Enum):
"""冲突解决策略枚举"""
LATEST = "latest" # 使用最新结果
MAJORITY = "majority" # 多数投票
WEIGHTED = "weighted" # 加权平均
HIGHEST_CONFIDENCE = "highest_confidence" # 最高置信度
ARBITRATOR = "arbitrator" # 仲裁者决策
class ConflictResolver:
"""冲突解决器:处理多智能体结果冲突"""
def __init__(self, strategy: ConflictResolutionStrategy):
self.strategy = strategy
self.confidence_scores = {} # 各智能体的置信度评分
def resolve(self, results: list[dict]) -> Any:
"""
根据策略解决冲突
Args:
results: 冲突的结果列表,每个结果包含 data 和 metadata
Returns:
解决冲突后的最终结果
"""
if len(results) == 1:
return results[0]["data"]
if self.strategy == ConflictResolutionStrategy.LATEST:
return self._resolve_by_latest(results)
elif self.strategy == ConflictResolutionStrategy.MAJORITY:
return self._resolve_by_majority(results)
elif self.strategy == ConflictResolutionStrategy.WEIGHTED:
return self._resolve_by_weighted(results)
elif self.strategy == ConflictResolutionStrategy.HIGHEST_CONFIDENCE:
return self._resolve_by_confidence(results)
elif self.strategy == ConflictResolutionStrategy.ARBITRATOR:
return self._resolve_by_arbitrator(results)
def _resolve_by_latest(self, results: list[dict]) -> Any:
"""使用时间戳最新的结果"""
sorted_results = sorted(
results,
key=lambda r: r.get("metadata", {}).get("timestamp", 0),
reverse=True
)
return sorted_results[0]["data"]
def _resolve_by_majority(self, results: list[dict]) -> Any:
"""多数投票:选择出现次数最多的结果"""
from collections import Counter
values = [str(r["data"]) for r in results]
counter = Counter(values)
most_common_str = counter.most_common(1)[0][0]
# 返回原始值
for r in results:
if str(r["data"]) == most_common_str:
return r["data"]
def _resolve_by_weighted(self, results: list[dict]) -> Any:
"""加权平均:适用于数值型结果"""
weights = []
values = []
for r in results:
agent_id = r.get("agent_id", "unknown")
weight = self.confidence_scores.get(agent_id, 1.0)
weights.append(weight)
values.append(float(r["data"]))
return statistics.mean(values) # 简化版,实际应使用加权平均
def _resolve_by_confidence(self, results: list[dict]) -> Any:
"""选择置信度最高的结果"""
sorted_results = sorted(
results,
key=lambda r: r.get("metadata", {}).get("confidence", 0),
reverse=True
)
return sorted_results[0]["data"]
def _resolve_by_arbitrator(self, results: list[dict]) -> Any:
"""使用仲裁智能体(通常是主智能体)决策"""
conflict_description = self._format_conflict(results)
prompt = f"""多个智能体对同一问题给出了不同的答案,请作为仲裁者选择最合理的答案:
{conflict_description}
请分析每个答案的优缺点,然后给出你的最终决定。
"""
return llm_task(prompt=prompt, maxTokens=1000)
def _format_conflict(self, results: list[dict]) -> str:
"""格式化冲突描述"""
lines = []
for i, r in enumerate(results, 1):
agent_id = r.get("agent_id", "unknown")
data = r["data"]
confidence = r.get("metadata", {}).get("confidence", "N/A")
lines.append(f"{i}. 智能体 {agent_id}: {data} (置信度: {confidence})")
return "\n".join(lines)
上述代码实现了五种冲突解决策略。LATEST 策略适用于数据时效性重要的场景;MAJORITY 适用于有明确正确答案的问题;WEIGHTED 适用于数值型数据的融合;HIGHEST_CONFIDENCE 信任最有把握的智能体;ARBITRATOR 则引入第三方仲裁,适用于复杂的主观判断问题。选择合适的策略需要根据具体业务场景权衡。🎯
5.4 冲突预防最佳实践
除了事后解决,更重要的是预防冲突的发生:
- 明确分工:确保每个智能体有清晰的职责边界
- 统一标准:使用相同的数据格式和输出规范
- 版本控制:为数据和时间戳建立版本机制
- 置信度标注:要求智能体输出时附带置信度评分
- 人工介入:对于高风险决策,设置人工确认环节
6. 实战案例 - 复杂任务的多 Agent 协作
让我们通过一个完整的实战案例,演示如何使用 OpenClaw 构建一个多智能体协作系统。我们将实现一个智能研究报告生成器,它能够自动搜索、分析、整合信息,生成高质量的研究报告。📝
6.1 系统架构设计
🔧 工具集
🤖 子智能体池
🎯 主智能体
👤 用户交互
用户请求
Orchestrator
任务调度
搜索 Agent
分析 Agent
写作 Agent
审核 Agent
web_search
web_fetch
read/write
llm_task
6.2 配置文件
json
{
"agents": {
"defaults": {
"workspace": "~/.openclaw/workspace",
"subagents": {
"maxConcurrent": 4,
"model": "gpt-4o-mini",
"archiveAfterMinutes": 30
}
},
"list": [
{
"id": "main",
"name": "研究报告协调器",
"default": true,
"sandbox": { "mode": "off" },
"tools": {
"allow": ["*"],
"deny": []
}
},
{
"id": "search-agent",
"name": "信息搜索专家",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["web_search", "web_fetch", "read"],
"deny": ["exec", "write", "edit", "browser", "message"]
}
},
{
"id": "analysis-agent",
"name": "数据分析专家",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["read", "llm-task"],
"deny": ["exec", "web_search", "browser", "message"]
}
},
{
"id": "writer-agent",
"name": "内容创作专家",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["read", "write", "edit"],
"deny": ["exec", "web_search", "browser", "message"]
}
}
]
},
"bindings": [
{
"agentId": "main",
"match": {
"provider": "feishu",
"accountId": "*"
}
}
]
}
这个配置文件定义了一个完整的多智能体系统。主智能体拥有完全权限,负责协调整个流程;搜索智能体只能进行网络搜索和读取文件;分析智能体专注于数据处理;写作智能体负责内容创作。每个子智能体都在独立的沙箱环境中运行,确保安全性。🛡️
6.3 协作流程实现
python
import json
from typing import Optional
class ResearchReportOrchestrator:
"""研究报告生成器:多智能体协作的主控制器"""
def __init__(self):
self.subagent_results = {}
self.report_stages = [
"search", # 信息搜索阶段
"analysis", # 数据分析阶段
"writing", # 内容撰写阶段
"review" # 审核优化阶段
]
async def generate_report(self, topic: str, requirements: dict) -> str:
"""
生成研究报告的主流程
Args:
topic: 研究主题
requirements: 报告要求(字数、格式、重点等)
Returns:
完整的研究报告内容
"""
# 阶段1:并行搜索多个信息源
search_results = await self._execute_search_phase(topic)
# 阶段2:分析搜索结果
analysis_results = await self._execute_analysis_phase(
search_results,
topic
)
# 阶段3:撰写报告
draft_report = await self._execute_writing_phase(
topic,
requirements,
analysis_results
)
# 阶段4:审核优化
final_report = await self._execute_review_phase(draft_report)
return final_report
async def _execute_search_phase(self, topic: str) -> dict:
"""搜索阶段:启动多个搜索智能体并行工作"""
search_queries = self._generate_search_queries(topic)
# 并行启动搜索智能体
run_ids = []
for query in search_queries:
result = sessions_spawn(
task=f"搜索以下主题的相关信息:{query}",
agentId="search-agent",
label=f"search_{query[:20]}",
model="gpt-4o-mini"
)
run_ids.append(result["runId"])
# 等待所有搜索完成(结果会自动通告)
# 实际实现中,这里会等待通告消息
return self._collect_subagent_results(run_ids)
async def _execute_analysis_phase(
self,
search_results: dict,
topic: str
) -> dict:
"""分析阶段:对搜索结果进行深度分析"""
# 启动分析智能体
result = sessions_spawn(
task=f"""分析以下搜索结果,提取关键信息:
主题:{topic}
搜索结果:{json.dumps(search_results, ensure_ascii=False)}
请输出:
1. 核心观点
2. 数据支撑
3. 潜在问题
4. 建议方向
""",
agentId="analysis-agent",
label="analysis_main",
model="gpt-4o" # 分析需要更高质量的模型
)
return self._collect_subagent_results([result["runId"]])
async def _execute_writing_phase(
self,
topic: str,
requirements: dict,
analysis_results: dict
) -> str:
"""撰写阶段:根据分析结果生成报告"""
result = sessions_spawn(
task=f"""根据以下分析结果撰写研究报告:
主题:{topic}
要求:{json.dumps(requirements, ensure_ascii=False)}
分析结果:{json.dumps(analysis_results, ensure_ascii=False)}
报告结构:
1. 摘要
2. 背景介绍
3. 核心分析
4. 结论与建议
""",
agentId="writer-agent",
label="writing_main",
model="gpt-4o"
)
results = self._collect_subagent_results([result["runId"]])
return results.get("draft", "")
async def _execute_review_phase(self, draft: str) -> str:
"""审核阶段:优化报告质量"""
result = sessions_spawn(
task=f"""审核并优化以下报告:
{draft}
检查要点:
1. 逻辑连贯性
2. 数据准确性
3. 语言流畅度
4. 格式规范性
请输出优化后的报告。
""",
agentId="analysis-agent",
label="review_main",
model="gpt-4o"
)
results = self._collect_subagent_results([result["runId"]])
return results.get("final_report", draft)
def _generate_search_queries(self, topic: str) -> list[str]:
"""生成搜索查询列表"""
# 使用 LLM 生成多样化的搜索查询
prompt = f"为主题'{topic}'生成5个不同角度的搜索查询"
queries = llm_task(prompt=prompt, maxTokens=500)
return json.loads(queries)
def _collect_subagent_results(self, run_ids: list[str]) -> dict:
"""收集子智能体结果(实际由通告机制触发)"""
# 这里是简化实现,实际由 Gateway 的通告机制处理
return {}
上述代码展示了研究报告生成器的完整实现。系统分为四个阶段:搜索、分析、撰写、审核,每个阶段由专门的智能体负责。主智能体作为协调器,负责任务分配和结果整合。通过 sessions_spawn 工具,主智能体可以灵活地启动子智能体,并指定不同的模型和配置。这种设计既保证了专业性,又实现了高效并行。🚀
6.4 运行效果
当用户发送"帮我生成一份关于 AI Agent 发展趋势的研究报告"时,系统会:
- 搜索阶段:并行启动 5 个搜索智能体,分别搜索技术发展、市场趋势、应用场景、投资动态、学术进展
- 分析阶段:分析智能体整合搜索结果,提取关键信息
- 撰写阶段:写作智能体根据分析结果生成报告初稿
- 审核阶段:审核智能体检查并优化报告质量
整个过程自动化完成,用户只需等待最终报告。
7. 最佳实践与设计模式
基于 OpenClaw 多智能体协作的实践经验,总结以下最佳实践和设计模式。💡
7.1 智能体设计原则
| 原则 | 描述 | 示例 |
|---|---|---|
| 单一职责 | 每个智能体只负责一类任务 | 搜索 Agent 只做搜索,不做分析 |
| 最小权限 | 只授予完成任务所需的最小权限 | 只读智能体不应有写权限 |
| 明确边界 | 清晰定义智能体的能力边界 | 在配置中明确 allow/deny |
| 可观测性 | 保留足够的日志和追踪信息 | 使用 transcript 记录执行过程 |
7.2 协作模式选择指南
否
是
是
否
是
否
是
否
开始选择协作模式
任务是否可分解?
单智能体处理
子任务是否独立?
需要统一协调?
是否有层级关系?
主从模式
对等模式
层级模式
主从模式 + 依赖处理
7.3 成本优化策略
多智能体协作会显著增加 API 调用成本,以下策略可以帮助优化:
- 模型分层:主智能体使用高质量模型,子智能体使用便宜模型
- 思考级别 :子智能体使用
low思考级别,减少推理开销 - 超时控制 :设置
runTimeoutSeconds避免无限等待 - 自动归档 :配置
archiveAfterMinutes及时清理会话 - 结果缓存:对重复任务实现缓存机制
json
{
"agents": {
"defaults": {
"subagents": {
"model": "gpt-4o-mini",
"thinking": "low",
"archiveAfterMinutes": 30
}
}
}
}
7.4 安全配置建议
| 安全措施 | 配置方式 | 作用 |
|---|---|---|
| 沙箱隔离 | sandbox.mode: "all" |
隔离执行环境 |
| 工具限制 | tools.allow/deny |
限制可用工具 |
| 提权禁用 | tools.elevated.enabled: false |
禁止提权操作 |
| 会话隔离 | sandbox.scope: "agent" |
每智能体独立容器 |
| 认证隔离 | 独立 agentDir |
凭证不共享 |
7.5 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 子智能体无法启动 | 工具权限不足 | 检查 tools.allow 配置 |
| 结果未通告 | Gateway 重启 | 通告是尽力而为,增加重试机制 |
| 执行超时 | 任务过于复杂 | 设置 runTimeoutSeconds |
| 沙箱不生效 | 配置优先级问题 | 检查 agents.list[].sandbox |
| 工具被拒绝 | 多层过滤限制 | 检查过滤顺序:全局→智能体→沙箱 |
8. 总结
本文全面探讨了 OpenClaw 多智能体协作的进阶应用,从理论到实践,为读者构建企业级 AI 协作系统提供了完整指导。🎯
核心要点回顾
1. 协作模式选择:主从模式适合任务可独立分解的场景,对等模式适合需要多角度分析的问题,层级模式适合复杂的多阶段任务。选择合适的模式是成功的第一步。
2. 任务分解策略 :遵循独立性、均衡性、原子性、完整性四大原则。使用 sessions_spawn 工具启动子智能体,通过 model 和 thinking 参数优化成本。
3. 结果聚合方法:根据输出类型选择合适的聚合策略------简单拼接、结构化合并、投票选择、加权融合或 LLM 综合。利用 OpenClaw 的自动通告机制,无需主动轮询。
4. 冲突解决机制:识别数据冲突、结论冲突、格式冲突等类型,采用最新优先、多数投票、加权平均、最高置信度或仲裁者决策等策略解决。预防胜于治疗,明确分工和统一标准是关键。
5. 安全与成本:通过沙箱隔离、工具限制、认证隔离保障安全;通过模型分层、思考级别控制、自动归档优化成本。
思考题
- 在你的业务场景中,哪种协作模式最适合?为什么?
- 如何设计一个既能保证安全性又不影响灵活性的多智能体系统?
- 如果子智能体之间需要共享状态,你会如何实现?