OpenClaw 多智能体协作进阶

目录

    • 热门文章推荐
    • 摘要
    • [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 浏览器自动化实战

摘要

本文深入探讨 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 任务分解原则

有效的任务分解应遵循以下原则:

  1. 独立性原则:子任务之间应尽量独立,减少相互依赖
  2. 均衡性原则:子任务的工作量应尽量均衡,避免负载不均
  3. 原子性原则:每个子任务应是不可再分的最小单元
  4. 完整性原则:所有子任务完成后应能还原完整结果

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 冲突预防最佳实践

除了事后解决,更重要的是预防冲突的发生:

  1. 明确分工:确保每个智能体有清晰的职责边界
  2. 统一标准:使用相同的数据格式和输出规范
  3. 版本控制:为数据和时间戳建立版本机制
  4. 置信度标注:要求智能体输出时附带置信度评分
  5. 人工介入:对于高风险决策,设置人工确认环节

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 发展趋势的研究报告"时,系统会:

  1. 搜索阶段:并行启动 5 个搜索智能体,分别搜索技术发展、市场趋势、应用场景、投资动态、学术进展
  2. 分析阶段:分析智能体整合搜索结果,提取关键信息
  3. 撰写阶段:写作智能体根据分析结果生成报告初稿
  4. 审核阶段:审核智能体检查并优化报告质量

整个过程自动化完成,用户只需等待最终报告。


7. 最佳实践与设计模式

基于 OpenClaw 多智能体协作的实践经验,总结以下最佳实践和设计模式。💡

7.1 智能体设计原则

原则 描述 示例
单一职责 每个智能体只负责一类任务 搜索 Agent 只做搜索,不做分析
最小权限 只授予完成任务所需的最小权限 只读智能体不应有写权限
明确边界 清晰定义智能体的能力边界 在配置中明确 allow/deny
可观测性 保留足够的日志和追踪信息 使用 transcript 记录执行过程

7.2 协作模式选择指南









开始选择协作模式
任务是否可分解?
单智能体处理
子任务是否独立?
需要统一协调?
是否有层级关系?
主从模式
对等模式
层级模式
主从模式 + 依赖处理

7.3 成本优化策略

多智能体协作会显著增加 API 调用成本,以下策略可以帮助优化:

  1. 模型分层:主智能体使用高质量模型,子智能体使用便宜模型
  2. 思考级别 :子智能体使用 low 思考级别,减少推理开销
  3. 超时控制 :设置 runTimeoutSeconds 避免无限等待
  4. 自动归档 :配置 archiveAfterMinutes 及时清理会话
  5. 结果缓存:对重复任务实现缓存机制
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 工具启动子智能体,通过 modelthinking 参数优化成本。

3. 结果聚合方法:根据输出类型选择合适的聚合策略------简单拼接、结构化合并、投票选择、加权融合或 LLM 综合。利用 OpenClaw 的自动通告机制,无需主动轮询。

4. 冲突解决机制:识别数据冲突、结论冲突、格式冲突等类型,采用最新优先、多数投票、加权平均、最高置信度或仲裁者决策等策略解决。预防胜于治疗,明确分工和统一标准是关键。

5. 安全与成本:通过沙箱隔离、工具限制、认证隔离保障安全;通过模型分层、思考级别控制、自动归档优化成本。

思考题

  1. 在你的业务场景中,哪种协作模式最适合?为什么?
  2. 如何设计一个既能保证安全性又不影响灵活性的多智能体系统?
  3. 如果子智能体之间需要共享状态,你会如何实现?

参考资料

相关推荐
一拳一个娘娘腔1 小时前
内网权限维持实战体系:从单机寄生到域控信任链的深度解析
网络·安全·信任链
北冥湖畔的燕雀1 小时前
Linux线程编程核心指南
linux·服务器·网络
@insist1233 小时前
信息安全工程师-物理隔离技术基础核心考点解析
开发语言·网络·安全·软考·信息安全工程师·软件水平考试
菜鸟分享录3 小时前
OpenClaw Docker一键部署(轻松实现多容器隔离)
docker·ai·openclaw·小龙虾
小乐笙3 小时前
笔记:纯真 IP 库使用
运维·网络·tcp/ip
计算机安禾3 小时前
【计算机网络】第8篇:IPv6协议设计的审慎与激进——地址空间、扩展头与邻居发现
网络·计算机网络
YBAdvanceFu3 小时前
开源版Suno来了!用扩散模型生成带歌词的完整歌曲,DiffRhythm2实战详解
人工智能·深度学习·机器学习·多智能体·智能体·suno·diffrhythm2
咖喱o3 小时前
DHCP
linux·运维·服务器·网络