Multi-Agent Communication - 多智能体通信协议指南

核心观点:单Agent是独狼,Multi-Agent是狼群。通信协议是狼群的「嚎叫系统」——让每个Agent知道该进攻、该撤退、还是该支援队友。

为什么需要Multi-Agent通信

凌晨4点17分,你的AI系统需要同时处理:搜索信息、分析数据、生成报告、发送通知。单个Agent做不到?那就让多个Agent协作——但它们需要一个统一的「语言」来交流。

Multi-Agent Communication解决的核心问题:

通信协议对比

A2A Protocol (Agent-to-Agent)

特点:Google主导,标准化的Agent间通信协议

  • 支持能力发现
  • 消息格式标准化
  • 跨平台兼容

MCP (Model Context Protocol)

特点:Anthropic主导,工具和上下文共享

  • 资源(Resources)共享
  • 工具(Tools)调用
  • 提示词(Prompts)模板

OpenClaw Sessions

特点:原生多Agent通信机制

  • Session间消息传递
  • Sub-Agent调度
  • 结果聚合

AG-UI Protocol

特点:CopilotKit主导,前端Agent通信

  • UI事件驱动
  • 实时流式传输
  • 用户交互集成

A2A协议详解

消息格式

// A2A标准消息格式
{
  "version": "1.0",
  "messageId": "msg_abc123",
  "sender": {
    "agentId": "agent_search",
    "capabilities": ["web_search", "content_fetch"]
  },
  "receiver": {
    "agentId": "agent_writer",
    "capabilities": ["content_generation"]
  },
  "messageType": "task_request",
  "payload": {
    "task": "search_and_summarize",
    "parameters": {
      "query": "OpenClaw最新特性",
      "format": "bullet_points",
      "maxLength": 500
    }
  },
  "context": {
    "conversationId": "conv_xyz",
    "priority": "normal",
    "deadline": "2026-05-14T10:00:00Z"
  },
  "metadata": {
    "timestamp": "2026-05-14T01:00:00Z",
    "traceId": "trace_123"
  }
}

能力发现

// Agent能力声明
{
  "agentId": "agent_data_analyzer",
  "capabilities": [
    {
      "name": "statistical_analysis",
      "description": "执行统计分析",
      "inputs": ["data", "method"],
      "outputs": ["results", "charts"]
    },
    {
      "name": "visualization",
      "description": "生成数据可视化",
      "inputs": ["data", "chart_type"],
      "outputs": ["image"]
    }
  ],
  "constraints": {
    "maxDataSize": "10MB",
    "supportedFormats": ["csv", "json", "xlsx"]
  }
}

OpenClaw Multi-Agent实战

Session间通信

// OpenClaw Session通信
// 发送消息到另一个Session
await sessions_send({
  sessionKey: "agent_writer_session",
  message: "请根据以下搜索结果生成文章",
  attachments: [
    { name: "search_results.json", content: searchResults }
  ]
});

// 接收另一个Session的结果
const result = await sessions_send({
  sessionKey: "agent_analyzer_session",
  message: "分析这份数据并返回报告",
  timeoutSeconds: 300
});

Sub-Agent调度

// 启动子Agent执行任务
const subAgent = await sessions_spawn({
  runtime: "subagent",
  agentId: "data-processor",
  task: "处理CSV文件并生成统计报告",
  attachments: [
    { name: "data.csv", content: csvContent }
  ],
  mode: "run",  // 单次执行
  timeoutSeconds: 600
});

// 获取子Agent结果
const report = subAgent.result;

并行Agent编排

# OpenClaw并行Agent工作流
name: parallel_agent_workflow
description: 多Agent并行处理任务

agents:
  - id: search_agent
    task: "搜索AI新闻"
    
  - id: analyze_agent
    task: "分析市场数据"
    
  - id: report_agent
    task: "生成综合报告"
    depends_on: [search_agent, analyze_agent]

execution:
  mode: parallel
  parallel_agents: [search_agent, analyze_agent]
  
  aggregation:
    agent: report_agent
    inputs:
      - source: search_agent
        field: results
      - source: analyze_agent  
        field: analysis
        
  timeout: 30m

协作模式详解

1. 层级协作(Hierarchical)

        ┌───────────────┐
        │  Orchestrator │
        │   (主控Agent)  │
        └───────┬───────┘
                │
    ┌───────────┼───────────┐
    │           │           │
┌───▼───┐   ┌───▼───┐   ┌───▼───┐
│Agent A│   │Agent B│   │Agent C│
│(搜索) │   │(分析) │   │(写作) │
└───┬───┘   └───┬───┘   └───┬───┘
    │           │           │
    └───────────┴───────────┘
                │
        ┌───────▼───────┐
        │   结果聚合    │
        └───────────────┘

2. 网状协作(Mesh)

Agent A ─────► Agent B
    │              │
    │              │
    ▼              ▼
Agent C ◄────── Agent D
    │              │
    └──────────────┘
选择协作模式:

最佳实践

1. 消息设计原则

2. 状态管理

// Agent状态追踪
const agentStates = {
  search_agent: {
    status: "completed",
    result: {...},
    timestamp: "2026-05-14T01:05:00Z"
  },
  analyze_agent: {
    status: "running",
    progress: 60,
    estimated_completion: "2026-05-14T01:10:00Z"
  },
  report_agent: {
    status: "waiting",
    depends_on: ["search_agent", "analyze_agent"]
  }
};

3. 错误传播

// 当一个Agent失败时
if (agentA.status === "failed") {
  // 通知依赖的Agents
  notifyDependents(agentA, {
    type: "dependency_failed",
    error: agentA.error,
    action: "cancel_or_retry"
  });
}

相关资源