什么是A2A协议?
想象一下,一个由5个Agent组成的团队——有的擅长搜索,有的擅长写作,有的擅长代码。它们如何协同完成一个复杂任务?这就是A2A(Agent-to-Agent)协议要解决的问题:定义Agent之间的通信标准和协作规范。
A2A协议就像企业里的内部通信规范——规定了谁可以找谁、怎么找、用什么格式说话、出了问题怎么处理。
💡 核心理念:A2A让独立的Agent组成一个有机系统。每个Agent保持独立和专业化,但通过标准协议实现无缝协作。
A2A协议架构
通信模型
A2A通信架构
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Agent A │ ←→ │ Gateway │ ←→ │ Agent B │
│ (搜索) │ │ (路由器) │ │ (写作) │
└──────────┘ └──────────┘ └──────────┘
↑ ↑
└──────────┐ ┌──────────────┘
┌──────────┐
│ Agent C │
│ (代码) │
└──────────┘
通信方式:
1. 直接通信 - Agent间点对点
2. 网关路由 - 通过Gateway中转
3. 广播 - 一对多通知
4. 订阅 - 基于事件的消息分发
消息格式
{
"a2a": "1.0",
"id": "msg_abc123",
"from": {
"agentId": "search-agent",
"instanceId": "instance_001"
},
"to": {
"agentId": "writing-agent"
},
"type": "task_request",
"timestamp": "2026-05-02T01:00:00Z",
"payload": {
"task": "summarize",
"input": {
"articles": ["url1", "url2", "url3"]
},
"constraints": {
"maxLength": 500,
"language": "zh-CN"
},
"priority": "high",
"replyTo": "msg_abc123"
}
}
任务委派
委派模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 直接委派 | Agent A直接将子任务交给Agent B | 简单协作 |
| 招标模式 | Agent A发布任务,多个Agent竞争 | 择优选择 |
| 管道模式 | Agent A→B→C串联处理 | 流水线处理 |
| 分治模式 | 将大任务拆分给多个Agent并行 | 可并行任务 |
| 会审模式 | 多个Agent评审同一任务 | 质量保证 |
实现直接委派
import { Agent, A2AClient } from 'openclaw';
const orchestrator = new Agent({ name: 'orchestrator' });
const searchAgent = new Agent({ name: 'search-agent' });
const writingAgent = new Agent({ name: 'writing-agent' });
// 委派搜索任务给搜索Agent
const searchResult = await orchestrator.delegate({
to: searchAgent,
task: {
type: 'search',
query: '2026年AI行业趋势',
maxResults: 5
},
timeout: 30000,
onProgress: (update) => {
console.log(`搜索进度: ${update.progress}%`);
}
});
// 将搜索结果委派给写作Agent
const article = await orchestrator.delegate({
to: writingAgent,
task: {
type: 'write',
style: 'professional',
references: searchResult.data,
title: '2026年AI行业趋势分析'
},
timeout: 60000
});
结果聚合
并行任务聚合
// 并行委派给多个Agent
const tasks = [
{ agent: searchAgent, task: { type: 'search', domain: 'tech' } },
{ agent: searchAgent, task: { type: 'search', domain: 'business' } },
{ agent: searchAgent, task: { type: 'search', domain: 'science' } }
];
// 并行执行
const results = await Promise.all(
tasks.map(t => orchestrator.delegate(t))
);
// 聚合结果
const aggregated = await orchestrator.aggregate({
strategy: 'merge', // 或 'vote', 'rank', 'custom'
results: results.map(r => r.data),
prompt: '将以下三个领域的搜索结果整合为一份综合报告',
format: 'markdown'
});
冲突解决
当多个Agent返回冲突结果时:
const aggregated = await orchestrator.aggregate({
strategy: 'resolve_conflict',
results: conflictingResults,
resolutionMethod: 'llm_judge', // 用LLM判断哪个结果更好
fallbackMethod: 'majority_vote', // LLM不确定时用投票
explainDecision: true // 解释为什么选择某个结果
});
A2A安全模型
身份验证
// A2A通信必须验证身份
agent.enableA2A({
authentication: {
method: 'jwt', // 或 'api_key', 'mtls'
jwtSecret: process.env.A2A_JWT_SECRET
},
// 授权策略
authorization: {
mode: 'acl',
rules: [
{ from: 'orchestrator', to: '*', actions: ['delegate', 'query'] },
{ from: 'search-agent', to: 'writing-agent', actions: ['notify'] }
]
},
// 消息加密
encryption: {
enabled: true,
algorithm: 'aes-256-gcm'
}
});
信任边界
⚠️ 安全原则:不要信任来自其他Agent的输入,就像不信任用户输入一样。始终验证消息格式、参数范围和权限。
A2A最佳实践
- ✅ 使用标准协议格式,便于互操作
- ✅ 设置明确的任务超时和重试策略
- ✅ 实现心跳机制检测Agent存活
- ✅ 所有A2A通信启用身份验证
- ✅ 使用Gateway模式统一管理通信
- ✅ 记录所有Agent间通信日志
- ✅ 设计合理的降级策略(Agent不可用时)
常见问题
Q: A2A和MCP有什么关系?
MCP(Model Context Protocol)定义的是Agent如何访问工具和资源,A2A定义的是Agent之间如何通信。两者互补,共同构成Agent生态的通信基础。
Q: A2A通信会增加多少延迟?
Gateway模式下约5-20ms,直接通信约1-5ms。相比LLM推理时间(500ms-5000ms),A2A通信延迟可以忽略。
Q: 如何处理Agent无限委派?
设置最大委派深度(如5层)和最大任务数(如100个)。防止Agent间形成无限循环。