第九章:多智能体与会话管理
多 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 配置不同规格的模型来优化成本。