第九章:多智能体与会话管理

多 Agent 架构模式

多智能体(Multi-Agent)系统是 OpenClaw 最强大的高级特性之一。它允许你同时运行多个具有不同角色和能力的 AI 智能体,协同完成复杂的业务场景。每个 Agent 可以拥有独立的系统提示词、模型配置和工具集,彼此之间可以相互通信和委托任务。

OpenClaw 支持三种核心的多 Agent 架构模式:

  • 主从模式(Master-Slave):一个主 Agent 负责接收所有用户请求,根据内容将任务分发给不同的子 Agent。适用于有明显任务分类的场景。
  • 对等模式(Peer-to-Peer):所有 Agent 地位平等,通过消息总线通信。适用于需要多角色协作的复杂场景。
  • 流水线模式(Pipeline):多个 Agent 按顺序处理请求,前一个 Agent 的输出是后一个 Agent 的输入。适用于内容处理工作流。

Agent 编排策略

编排策略决定了用户消息如何在多个 Agent 之间分发。OpenClaw 提供了三种内置编排策略:

策略名称工作原理适用场景延迟影响
轮询(Round Robin)按顺序轮流分配请求负载均衡、无状态场景
路由(Router)根据消息内容或元数据匹配客服分流、技能路由
广播(Broadcast)同时发送给所有 Agent 汇总结果多角度分析、聚合决策

路由策略配置

路由策略是实际项目中最常用的编排方式。以下是一个基于意图识别的路由配置:

import { defineMultiAgentConfig } from 'openclaw/agents';

export default defineMultiAgentConfig({
  strategy: 'router',
  router: {
    model: 'claude-sonnet-4-20250514',
    rules: [
      {
        intent: 'order',
        target: 'order-agent',
        description: '处理订单相关查询',
        examples: ['我的订单到哪里了?', '我要退货'],
      },
      {
        intent: 'after-sales',
        target: 'after-sales-agent',
        description: '处理售后相关问题',
        examples: ['产品坏了', '退款'],
      },
      {
        intent: 'general',
        target: 'qa-agent',
        description: '产品咨询和通用问题',
        examples: ['这个产品有什么功能?', '价格多少?'],
      },
    ],
    fallback: 'human-service',
  },
});

会话管理与上下文共享

在多 Agent 系统中,会话管理变得尤为复杂。用户可能在同一个会话中与多个 Agent 交互,如何保持上下文的连贯性是关键挑战。OpenClaw 采用分层会话模型来解决这个问题:

  • 全局会话(Global Session):存储用户的基本信息和长期偏好
  • Agent 会话(Agent Session):每个 Agent 拥有独立的对话历史
  • 共享上下文(Shared Context):所有 Agent 可读写的公共数据区域
// 会话共享上下文 API
import { getSharedContext, setSharedContext } from 'openclaw/agents';

// 在 order-agent 中设置共享信息
await setSharedContext(sessionId, {
  lastOrderId: 'ORD-20240521-001',
  customerSatisfaction: 'pending',
  preferredLanguage: 'zh-CN',
});

// 在 after-sales-agent 中读取
const context = await getSharedContext(sessionId);
console.log(context.lastOrderId);
// 输出: ORD-20240521-001

子 Agent 任务委派

当 Agent 遇到需要其他 Agent 专业技能的任务时,可以通过委派机制将子任务交由特定 Agent 处理,并等待结果返回:

// 在 order-agent 中委派任务给 logistics-agent
const trackingResult = await ctx.delegateTo('logistics-agent', {
  task: '查询物流状态',
  input: {
    orderId: 'ORD-20240521-001',
    expressNo: 'SF1234567890',
  },
  timeout: 10000, // 10 秒超时
});

// 处理委派结果
if (trackingResult.success) {
  return `物流信息:${trackingResult.data.status}`;
} else {
  return `暂时无法查询物流信息,请稍后重试。`;
}

实战:搭建客服 + 技术支持双 Agent 系统

下面展示一个完整的双 Agent 客服系统的配置和部署:

# agents-config.yaml
agents:
  customer-service:
    displayName: 客服助手
    model:
      provider: anthropic
      model: claude-sonnet-4-20250514
    systemPrompt: |
      你是一个友好专业的客服代表。你的职责包括:
      - 解答订单、支付、物流相关问题
      - 处理退换货申请
      - 收集用户反馈
      如果遇到技术问题,请转接给技术支持 Agent。
    tools:
      - order_query
      - refund_processing

  tech-support:
    displayName: 技术支持
    model:
      provider: anthropic
      model: claude-opus-4-20250514
    systemPrompt: |
      你是资深技术支持工程师。处理以下问题:
      - 产品安装和配置问题
      - Bug 排查和解决方案
      - API 集成技术咨询
      请使用专业术语但保持耐心友好的态度。
    tools:
      - remote_diagnosis
      - knowledge_base

orchestration:
  strategy: router
  transferMessage: |
    已将您转接至 {targetAgent},请稍候...

多 Agent vs 单 Agent 性能对比

对比维度单 Agent 系统多 Agent 系统
任务专注度所有任务统一处理,容易混淆每个 Agent 专注特定领域
系统提示词复杂度需在单个提示词中覆盖所有场景每个 Agent 提示词简短精炼
模型成本所有请求使用同一模型可根据任务分配不同规格模型
响应延迟无路由开销,延迟低增加路由和上下文传递的开销
扩展性添加新功能会使配置膨胀新增 Agent 即可扩展能力
故障隔离单点故障影响全部单个 Agent 故障不影响其他
调试复杂度单一入口,日志集中分布式日志,调试较复杂

对于生产环境,建议从单 Agent 起步,当对话场景复杂度上升后再逐步引入多 Agent 架构。合理的 Agent 划分能够让每个智能体保持专注,显著提升对话质量和用户满意度,同时也可以通过为不同 Agent 配置不同规格的模型来优化成本。