文章摘要
2026 年 AI Agent 协议生态已形成四层架构:MCP 解决工具连接、A2A 解决 Agent 间协作、ACP 解决企业流程集成、ANP 解决网络层发现。本文从架构设计、协议报文、实战代码三个维度,手把手教你如何在生产环境中选型和组合使用这四大协议。
1为什么 Agent 需要协议栈:从单 Agent 到多 Agent 的通信困境
2026 年 6 月,AI Agent 已经从"单兵作战"进入"集团军协同"时代。 但当你的 Agent A 用 LangGraph 开发、Agent B 用 CrewAI 开发、Agent C 是第三方 SaaS 提供的托管服务时,它们之间如何通信?如何发现彼此的工具?如何协调任务状态?
这个问题的本质和互联网早期的"协议碎片化"完全一样。 正如 HTTP 统一了 Web 浏览、SMTP 统一了电子邮件、TCP/IP 统一了网络传输——AI Agent 生态也需要一套标准化的协议栈来实现跨平台、跨框架的互操作。
2026 年 6 月的协议格局已经清晰分层:
| 层级 | 协议 | 解决的问题 | 类比 |
|---|---|---|---|
| 工具层 | MCP(Model Context Protocol) | Agent 如何调用外部工具和数据源 | USB 接口 |
| 协作层 | A2A(Agent-to-Agent) | Agent 之间如何发现、协商、协作 | HTTP |
| 集成层 | ACP(Agent Communication Protocol) | Agent 如何嵌入企业工作流 | SOAP/REST |
| 网络层 | ANP(Agent Network Protocol) | Agent 如何在开放网络中被发现 | DNS |
关键认知:这四个协议不是竞争关系,而是互补关系。 一个完整的企业 Agent 系统通常需要同时使用 MCP(连接工具)+ A2A(Agent 间协作)+ ACP(企业流程集成)。ANP 则面向更开放的互联网场景。
2MCP(Model Context Protocol):Agent 的「万能工具接口」
MCP 是 Anthropic 于 2024 年 11 月开源、2025 年成为事实标准的 Agent 工具连接协议。 它的核心思想极其简洁:定义一套标准的 JSON-RPC 2.0 接口,让 Agent 可以通过统一的方式发现、调用、管理外部工具和数据源。
MCP 的架构采用 Client-Server 模式:
- MCP Host:你的 Agent 应用(如 Claude Desktop、Cursor、自建 Agent)
- MCP Client:Host 内部与 MCP Server 通信的客户端模块
- MCP Server:暴露工具能力的轻量级服务(每个 Server 可以提供多个 Tool)
2026 年 6 月 MCP 的关键数据:
- 协议版本:v2.2(2026 年 4 月发布)
- 官方 Server 数量:87 个(覆盖 GitHub、Slack、Postgres、AWS 等)
- 社区 Server 数量:2,300+(MCP Marketplace)
- 框架支持:LangChain、LlamaIndex、CrewAI、AutoGen、OpenAI Agents SDK 全部原生支持
- 传输协议:支持 stdio(本地进程)和 HTTP+SSE(远程服务)两种模式
MCP 的工具发现流程:
- Client 连接到 Server,发送
tools/list请求 - Server 返回所有可用工具的名称、描述、输入 Schema
- Agent 根据用户意图选择合适的工具
- Client 发送
tools/call请求,携带工具名和参数 - Server 执行工具并返回结果
一个典型的 MCP Tool 定义(JSON Schema):
// MCP Server 端:定义一个天气查询工具
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "weather-server",
version: "1.0.0",
});
// 注册工具:声明名称、描述、输入 Schema
server.tool(
"get_weather",
"获取指定城市的当前天气信息,包括温度、湿度、风速",
{
city: z.string().describe("城市名称,如 '北京' 或 'Shanghai'"),
unit: z.enum(["celsius", "fahrenheit"]).default("celsius"),
},
async ({ city, unit }) => {
// 实际实现:调用天气 API
const weather = await fetchWeatherData(city);
return {
content: [
{
type: "text",
text: JSON.stringify({
city,
temperature: weather.temp,
humidity: weather.humidity,
wind: weather.windSpeed,
unit,
}),
},
],
};
}
);
// 启动 Server(stdio 传输模式)
const transport = new StdioServerTransport();
await server.connect(transport);# MCP Client 端:连接并使用天气工具
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def use_weather_tool():
server_params = StdioServerParameters(
command="node",
args=["mcp-weather-server.js"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# 1. 发现可用工具
tools = await session.list_tools()
print(f"可用工具: {[t.name for t in tools.tools]}")
# 输出: 可用工具: ['get_weather']
# 2. 调用工具
result = await session.call_tool(
"get_weather",
arguments={"city": "北京", "unit": "celsius"}
)
print(f"天气: {result.content[0].text}")
# 输出: 天气: {"city":"北京","temperature":28,...}💡 一句话理解
⚠️ 常见踩坑
MCP Server 默认没有认证机制。在生产环境中,你必须自行添加 API Key、OAuth 2.0 或 mTLS 认证,否则任何人都可以调用你的工具。
3A2A(Agent-to-Agent):Agent 间的「HTTP 协议」
A2A 是 Google 于 2025 年 4 月发布、2026 年 3 月升级到 v1.0 的 Agent 间协作协议。 如果说 MCP 解决的是"Agent 如何使用工具",那 A2A 解决的是"Agent 如何与其他 Agent 协作"。
A2A 的核心概念模型:
- Agent Card:每个 Agent 的"名片",描述自己的能力、技能、接受的任务类型。发布在
/.well-known/agent.json端点 - Task:Agent 间协作的基本单元。一个 Task 有明确的生命周期:submitted → working → input-required → completed/failed
- Message:Task 内的通信载体,包含多个 Part(文本、文件、结构化数据)
- Artifact:Task 的产出物(生成的文件、数据等)
A2A 的通信模式(2026 年 v1.0 支持三种):
| 模式 | 适用场景 | 技术实现 |
|---|---|---|
| 请求-响应 | 简单的单次任务委托 | HTTP POST + 同步等待 |
| SSE 流式 | 需要实时进度反馈的长任务 | HTTP POST + Server-Sent Events |
| 推送通知 | 异步任务完成后回调 | Webhook + 签名验证 |
2026 年 6 月 A2A 生态现状:
- 协议版本:v1.0(2026 年 3 月发布,Linux Foundation 管理)
- 共建厂商:AWS、Cisco、Google、IBM、Microsoft、Salesforce、SAP、ServiceNow
- 框架原生支持:LangGraph、CrewAI、Mastra、Pydantic AI
- Agent Card 注册中心:A2A Directory(已有 1,200+ 注册 Agent)
// A2A Agent Card 定义(发布在 /.well-known/agent.json)
import { AgentCard, AgentSkill } from "@a2a-protocol/core";
const agentCard: AgentCard = {
name: "数据分析 Agent",
description: "专业的数据分析 Agent,擅长 CSV/Excel 数据处理、统计分析和可视化",
url: "https://data-agent.example.com/a2a",
version: "1.0.0",
capabilities: {
streaming: true, // 支持 SSE 流式响应
pushNotifications: true, // 支持异步回调
stateTransitionHistory: true,
},
skills: [
{
id: "csv-analysis",
name: "CSV 数据分析",
description: "分析 CSV 文件,输出统计摘要和可视化图表",
tags: ["data", "csv", "analytics"],
examples: [
"分析这份销售数据的月度趋势",
"对比 Q1 和 Q2 的转化率差异",
],
},
{
id: "excel-report",
name: "Excel 报表生成",
description: "从原始数据生成格式化的 Excel 报表",
tags: ["data", "excel", "report"],
examples: [],
},
],
// 认证要求
authentication: {
schemes: ["bearer"],
credentials: "https://auth.example.com/.well-known/jwks.json",
},
};
// Express 路由:暴露 Agent Card
app.get("/.well-known/agent.json", (req, res) => {
res.json(agentCard);
});# A2A Client:委托任务给另一个 Agent
import httpx
from a2a_client import A2AClient, Task, Message, Part
async def delegate_analysis():
# 1. 发现目标 Agent(读取 Agent Card)
async with httpx.AsyncClient() as http:
card_resp = await http.get(
"https://data-agent.example.com/.well-known/agent.json"
)
agent_card = card_resp.json()
# 2. 创建 A2A Client
client = A2AClient(agent_card)
# 3. 创建任务(使用 SSE 流式模式)
task = Task(
id="task-001",
messages=[
Message(
role="user",
parts=[
Part(type="text", text="分析这份 CSV 的销售趋势"),
Part(type="file", url="https://storage.example.com/sales.csv"),
],
)
],
)
# 4. 发送任务并监听流式进度
async for event in client.send_streaming(task):
if event.type == "task_status_changed":
print(f"状态: {event.status}")
# 状态流转: submitted → working → completed
elif event.type == "task_artifact":
print(f"产出: {event.artifact.name}")
# 产出: analysis_report.pdf
# 5. 获取最终结果
final_task = await client.get_task("task-001")
for artifact in final_task.artifacts:
print(f"下载产出: {artifact.url}")💡 一句话理解
⚠️ 常见踩坑
A2A v1.0 目前不支持任务优先级和 SLA 保证。在生产环境中,你需要在 Agent Card 层面自行约定超时和重试策略。
4ACP(Agent Communication Protocol):企业级流程集成
ACP 是由 IBM、SAP、ServiceNow 等企业软件巨头推动的 Agent 企业集成协议。 它和 A2A 的核心区别在于:A2A 关注 Agent 间的"自由协作",ACP 关注 Agent 在"企业工作流"中的受控集成。
ACP 的设计哲学:
- 流程优先:每个 Agent 交互都必须绑定到一个业务流程(Process Instance)
- 审计合规:所有消息和状态变更都有完整的审计日志
- 权限控制:基于 RBAC 的细粒度权限管理
- 事务一致性:支持跨 Agent 的分布式事务(Saga 模式)
| 维度 | A2A | ACP |
|---|---|---|
| 发起方 | Google + 开源社区 | IBM + SAP + ServiceNow |
| 核心场景 | 开放生态的 Agent 协作 | 企业内部流程自动化 |
| 任务模型 | 灵活的 Task 生命周期 | 绑定 BPMN 流程实例 |
| 认证 | OAuth 2.0 / API Key | SAML / OIDC / 企业 SSO |
| 审计 | 可选 | 强制(GDPR/SOX 合规) |
| 事务 | 最终一致性 | 分布式事务(Saga) |
| 治理 | 去中心化 | 中心化治理 |
ACP 的核心接口定义(2026 年 v1.0):
POST /acp/processes/{processId}/instances— 启动流程实例POST /acp/instances/{instanceId}/agents/{agentId}/messages— 向 Agent 发送消息GET /acp/instances/{instanceId}/audit-log— 获取审计日志POST /acp/instances/{instanceId}/compensate— 触发事务补偿
# ACP 流程定义(BPMN 子集)
# 文件: expense-approval-process.yaml
apiVersion: acp/v1
kind: ProcessDefinition
metadata:
name: "费用审批流程"
description: "员工提交费用报销 → AI 审核 → 经理审批 → 财务打款"
spec:
participants:
- id: "employee-agent"
type: "agent"
capabilities: ["form-filling", "receipt-ocr"]
- id: "audit-agent"
type: "agent"
capabilities: ["compliance-check", "fraud-detection"]
- id: "manager-agent"
type: "agent"
capabilities: ["approval", "risk-assessment"]
- id: "finance-agent"
type: "agent"
capabilities: ["payment", "accounting"]
steps:
- id: "submit"
agent: "employee-agent"
action: "submit_expense"
output: "expense_report"
- id: "audit"
agent: "audit-agent"
action: "compliance_review"
input: "$steps.submit.output"
transitions:
- condition: "risk_score < 0.3"
next: "approve"
- condition: "risk_score >= 0.3"
next: "manual_review"
- id: "approve"
agent: "manager-agent"
action: "auto_approve"
sla: { timeoutSeconds: 30 }
- id: "manual_review"
agent: "manager-agent"
action: "manual_review"
sla: { timeoutSeconds: 86400 } # 24h
- id: "payment"
agent: "finance-agent"
action: "process_payment"
input: "$steps.approve.output || $steps.manual_review.output"// ACP Client:启动流程实例并跟踪状态
import { ACPClient, ProcessInstance } from "@ibm/acp-client";
const acp = new ACPClient({
baseUrl: "https://acp-gateway.example.com",
auth: {
type: "oidc",
clientId: process.env.ACP_CLIENT_ID!,
clientSecret: process.env.ACP_CLIENT_SECRET!,
tokenEndpoint: "https://sso.example.com/oauth/token",
},
});
async function submitExpense(employeeId: string, receipts: File[]) {
// 1. 启动流程实例
const instance: ProcessInstance = await acp.processes.start(
"expense-approval",
{
initiator: employeeId,
context: {
receipts: receipts.map((f) => ({
name: f.name,
url: await uploadToStorage(f),
})),
currency: "CNY",
totalAmount: await calculateTotal(receipts),
},
}
);
console.log(`流程已启动: ${instance.id}`);
console.log(`当前步骤: ${instance.currentStep.id}`);
// 输出: 当前步骤: submit
// 2. 监听流程事件(审计日志)
acp.instances.onEvent(instance.id, (event) => {
console.log(`[${event.timestamp}] ${event.step}: ${event.status}`);
// [2026-06-16T10:00:00Z] submit: completed
// [2026-06-16T10:00:05Z] audit: completed (risk_score: 0.12)
// [2026-06-16T10:00:06Z] approve: completed (auto-approved)
// [2026-06-16T10:00:10Z] payment: completed (tx_id: PAY-20260616-001)
});
// 3. 等待流程完成
const result = await acp.instances.waitForCompletion(instance.id, {
timeoutMs: 3600_000, // 1 小时超时
});
return result;
}5ANP(Agent Network Protocol):开放网络的 Agent 发现
ANP 是一个相对新兴的协议,目标是解决"Agent 如何在开放互联网上被发现和寻址"的问题。 如果说 A2A 定义了 Agent 之间"怎么说话",ANP 解决的是"怎么找到对方"。
ANP 的核心设计:
- Agent DID(Decentralized Identifier):每个 Agent 有一个去中心化标识符,如
did:agent:abc123 - Agent Registry:分布式的 Agent 注册中心,类似 DNS 但专为 Agent 设计
- Capability Manifest:Agent 声明自己的能力向量,支持语义搜索
- Trust Score:基于历史交互的 Agent 信誉评分
ANP 目前处于早期阶段(2026 年 6 月 v0.3),但已有几个值得关注的试点项目:
- AgentFinder:开源的 Agent 搜索引擎(类似 Agent 版的 Google)
- TrustNet:去中心化的 Agent 信誉网络
- AgentDNS:基于 ENS(Ethereum Name Service)的 Agent 域名系统
ANP 解决的核心问题场景:
- 你的 Agent 需要找一个"擅长法律合同审核"的 Agent,但不知道谁提供这个能力
- 你想让你的 Agent 对互联网上的所有其他 Agent 可见,而不是只在某个平台内
- 你需要验证一个陌生 Agent 的可信度(防止恶意 Agent)
{
"@context": "https://anp.example.org/v0.3",
"id": "did:agent:finance-expert-001",
"type": ["Agent", "FinanceExpert"],
"name": "金融分析专家 Agent",
"description": "专注于金融市场分析、风险评估和投资组合优化",
"endpoint": "https://finance-agent.example.com/anp",
"capabilities": [
{
"id": "market-analysis",
"name": "市场行情分析",
"inputSchema": { "type": "object", "properties": { "symbol": { "type": "string" } } },
"outputSchema": { "type": "object", "properties": { "trend": { "type": "string" }, "confidence": { "type": "number" } } }
},
{
"id": "risk-assessment",
"name": "风险评估",
"inputSchema": { "type": "object", "properties": { "portfolio": { "type": "array" } } },
"outputSchema": { "type": "object", "properties": { "riskLevel": { "type": "string" }, "score": { "type": "number" } } }
}
],
"trustScore": {
"value": 0.92,
"basedOn": 1847,
"lastUpdated": "2026-06-15T00:00:00Z"
},
"authentication": {
"type": "did-auth",
"publicKey": "did:key:z6MkhaXgBZDvotDkL5257faiztiScC2xtKgj"
}
}⚠️ 常见踩坑
ANP 的去中心化特性意味着没有中央机构审核 Agent 的质量。在使用陌生 Agent 前,务必检查其 Trust Score 和历史评价。
7实战架构:MCP + A2A 多 Agent 协作系统完整实现
让我们用一个完整的实战案例来演示如何组合使用 MCP 和 A2A 协议。 场景:构建一个"智能研究报告生成系统",由三个专业 Agent 协作完成。
系统架构:
- 协调 Agent(Coordinator):接收用户需求,分解任务,协调其他 Agent
- 数据分析 Agent(Data Analyst):通过 MCP 连接数据库和 Excel,执行数据分析
- 写作 Agent(Writer):通过 MCP 连接搜索引擎和文档工具,撰写报告
通信流程:
// 协调 Agent:使用 A2A 协议编排多 Agent 协作
import { A2AClient, AgentCard, Task, Message, Part } from "@a2a-protocol/core";
import { McpClient } from "@modelcontextprotocol/sdk/client/index.js";
class CoordinatorAgent {
private dataAnalystClient: A2AClient;
private writerClient: A2AClient;
private mcpClient: McpClient;
constructor() {
// 初始化 A2A Clients(连接其他 Agent)
this.dataAnalystClient = new A2AClient(
await this.discoverAgent("https://data-analyst.example.com")
);
this.writerClient = new A2AClient(
await this.discoverAgent("https://writer.example.com")
);
// 初始化 MCP Client(连接自己的工具)
this.mcpClient = new McpClient();
await this.mcpClient.connect("mcp-calendar-server");
}
private async discoverAgent(url: string): Promise<AgentCard> {
const resp = await fetch(`${url}/.well-known/agent.json`);
return resp.json();
}
async generateReport(userRequest: string): Promise<string> {
// Step 1: 委托数据分析 Agent
const analysisTask = await this.dataAnalystClient.sendTask({
messages: [
new Message({
role: "coordinator",
parts: [
new Part({ type: "text", text: `分析以下主题的市场数据: ${userRequest}` }),
new Part({ type: "text", text: "要求: 包含市场规模、增长率、主要玩家、融资事件" }),
],
}),
],
capabilities: { streaming: true },
});
// 等待分析完成
const analysisResult = await this.dataAnalystClient.waitForCompletion(
analysisTask.id,
{ timeoutMs: 300_000 }
);
// Step 2: 提取分析数据
const analysisData = analysisResult.artifacts
.filter((a) => a.type === "data")
.map((a) => a.content)
.join("\n");
// Step 3: 委托写作 Agent
const writingTask = await this.writerClient.sendTask({
messages: [
new Message({
role: "coordinator",
parts: [
new Part({ type: "text", text: `基于以下数据撰写研究报告:\n\n${analysisData}` }),
new Part({ type: "text", text: "报告格式: 摘要 + 市场分析 + 趋势预测 + 投资建议,5000字" }),
],
}),
],
});
const writingResult = await this.writerClient.waitForCompletion(
writingTask.id,
{ timeoutMs: 600_000 }
);
// Step 4: 返回最终报告
return writingResult.artifacts[0].content;
}
}💡 一句话理解
这个架构的关键优势是「关注点分离」——每个 Agent 只做自己擅长的事,通过标准协议通信。你可以随时替换任何一个 Agent 而不影响其他部分。
⚠️ 常见踩坑
生产环境中,协调 Agent 必须实现超时、重试和降级逻辑。如果数据分析 Agent 挂了,协调 Agent 不能无限等待——应该有 fallback 方案。
82026 年下半年展望:协议融合与标准化趋势
2026 年下半年,Agent 协议领域有几个值得关注的趋势:
趋势一:MCP + A2A 深度整合
Anthropic 和 Google 已经在 2026 年 5 月联合发布了"MCP-A2A Interoperability Guide",明确了两者的边界和协作方式。未来的 Agent 框架将原生同时支持两个协议——MCP 负责工具层,A2A 负责协作层。
趋势二:ACP 向开源社区扩展
IBM 在 2026 年 6 月宣布了 ACP 的开源版本计划(预计 Q3 发布),目标是让中小企业也能使用企业级 Agent 流程集成。这将降低 ACP 的使用门槛。
趋势三:ANP 与 A2A 的融合尝试
Linux Foundation 在 2026 年 6 月成立了"Agent Discovery Working Group",探索将 ANP 的发现能力整合到 A2A 的 Agent Card 规范中。如果成功,A2A 将同时解决"协作"和"发现"两个问题。
趋势四:协议安全标准化
随着 Agent 被广泛用于生产环境,安全协议成为焦点。2026 年下半年预计将出台:
作为开发者,你应该如何准备?
⚠️ 常见踩坑
Agent 协议领域仍在快速演进。今天写的代码可能在半年后需要适配新版本。建议使用官方 SDK 而非自己实现协议——SDK 会帮你处理协议升级的兼容性问题。
🎯 相关面试题
巩固本篇知识点,备战 AI 岗位面试。
- 中级概念高频查看详解 →
什么是 A2A 协议?它与 MCP 协议是什么关系与区别?
A2A 是 Google 2025 主导、Linux 基金会托管的开放协议,让不同厂商/框架的 Agent 互相发现与协作;与给单 Agent 接工具的 MCP 纵横互补。
- 中级概念查看详解 →
什么是 ACP 协议?它有哪两个不同含义?
ACP 缩写对应两个不同协议:①Agent Communication Protocol(IBM BeeAI 提出、后捐入 Linux 基金会,基于 REST 的 Agent↔Agent 跨框架通信,与 Google A2A 同类并趋于整合);②Agent Client Protocol(Zed 提出,标准化"代码编辑器/IDE↔编程 Agent"通信,类比 LSP/MCP,基于 JSON-RPC)。
- 中级概念高频查看详解 →
Agent Skill 是什么?它与 MCP、Function Calling 有何区别?
Function Calling 是模型按 schema 输出一次调用的底层机制,MCP 是标准化接入工具的协议,Skill 是把"一套做事方法"打包成可按需加载的能力包;三者分层且可组合。
- 中级概念查看详解 →
MCP 的传输方式有哪些(stdio / SSE / Streamable HTTP)?如何选型?
MCP 传输层承载 client↔server 的 JSON-RPC 消息:本地集成选 stdio,远程/多客户端选 2025 新版 Streamable HTTP,旧版 HTTP+SSE 正被淘汰。