AI 协议
原始素材:
8-人工智能/8.13-ai-protocols.md
核心问题
AI Agent 如何与外部世界"对话"? 就像互联网需要 HTTP 协议,AI Agent 也需要标准化的通信协议。本章介绍两个最主流的 Agent 协议:MCP 和 A2A,它们分别解决了 AI 与工具、Agent 与 Agent 之间的通信问题。
0. 什么是协议?
在计算机领域,协议(Protocol) 是一套标准化的规则和约定,让不同的系统、程序能够相互"理解"和"通信"。
0.1 为什么需要协议?
想象一个场景:你给朋友寄快递,需要填写地址。如果每个人写的地址格式都不一样,快递员就没法投递。协议就是规定了"地址怎么写"的标准——省、市、区、街道、门牌号,按这个格式写,谁都能看懂。
计算机也是一样。两个程序要通信,必须约定好:
- 数据格式是什么?(JSON?二进制?)
- 怎么建立连接?(握手流程)
- 出错了怎么办?(错误处理)
0.2 计算机中常见的协议
| 协议 | 作用 | 你每天都在用 |
|---|---|---|
| HTTP | 网页传输协议 | 浏览器打开网页 |
| HTTPS | 加密的 HTTP | 网银、支付页面 |
| TCP/IP | 互联网基础协议 | 所有网络通信 |
| DNS | 域名解析协议 | 把 google.com 变成 IP 地址 |
| SMTP | 邮件发送协议 | 发送邮件 |
| WebSocket | 双向实时通信 | 聊天软件、在线游戏 |
| SSH | 安全远程登录 | 连接服务器 |
| FTP | 文件传输协议 | 上传/下载文件 |
这些协议构成了互联网的基石。没有它们,你无法浏览网页、发送邮件、观看视频。
0.3 协议的价值
协议的核心价值是标准化 和互操作性 :
- 标准化 :大家都按同一套规则办事,减少沟通成本
- 互操作性 :不同厂商、不同技术栈的系统可以无缝对接
比如 HTTP 协议,让 Chrome 浏览器可以访问 Nginx 服务器,让 Python 爬虫可以抓取 Java 网站的数据。不需要 Chrome 和 Nginx 互相"认识",只要都遵守 HTTP 协议就行。
0.4 AI Agent 也需要协议
AI Agent 要真正"干活",需要:
- 调用外部工具(查天气、发邮件、操作数据库)
- 与其他 Agent 协作(分工合作完成复杂任务)
这就需要标准化的协议来规定"AI 怎么调用工具"、"Agent 之间怎么对话"。这就是 MCP 和 A2A 的由来。
1. Agent 协议的层次
在深入了解具体协议之前,让我们先看看 Agent 生态中的通信层次:
| 层级 | 协议 | 解决的问题 | 类比 |
|---|---|---|---|
| 1 | Function Call | AI 如何调用本地函数 | 大脑发出指令 |
| 2 | MCP | AI 如何连接外部工具和数据源 | USB-C 接口 |
| 3 | A2A | Agent 之间如何协作通信 | 企业微信 |
逐行解读这张表
第1层(Function Call) :这是大模型最基础的能力——通过输出结构化数据(JSON)来触发函数执行。它是"协议"的基础,但本身更像是一种能力而非标准协议。
第2层(MCP) :Model Context Protocol,由 Anthropic 于 2024 年 11 月发布。它标准化了 AI 与外部工具、数据源的连接方式,就像 USB-C 统一了各种设备的充电接口。
第3层(A2A) :Agent-to-Agent Protocol,由 Google 于 2025 年 4 月发布。它让不同的 Agent 能够相互发现、通信和协作,就像企业微信让同事之间可以发任务、聊天。
本章重点介绍第 2、3 层的两个正式协议:MCP 和 A2A。
2. MCP (Model Context Protocol)
2.1 协议基本信息
| 项目 | 内容 |
|---|---|
| 全称 | Model Context Protocol |
| 发起方 | Anthropic |
| 发布时间 | 2024 年 11 月 25 日 |
| 官方文档 | modelcontextprotocol.io |
| 开源协议 | MIT License |
| GitHub | github.com/modelcontextprotocol |
为什么叫"Context Protocol"?
Context(上下文) 是大模型理解任务的关键。MCP 的核心思想是:让 AI 能够动态获取所需的上下文信息 ,而不是把所有信息都塞进 Prompt。
比如,AI 需要读取一个文件时,不需要你把文件内容复制粘贴给它,而是通过 MCP 直接访问文件系统。
2.2 发布的背景
2024 年,随着 Claude 3.5 Sonnet 的发布,Anthropic 发现一个问题:每个工具都要单独集成 。
想象一下:
- 你想让 AI 读取 GitHub 仓库 → 要写 GitHub 集成代码
- 你想让 AI 查询数据库 → 要写数据库集成代码
- 你想让 AI 操作文件系统 → 要写文件系统集成代码
每个集成都要重复写类似的代码:认证、错误处理、数据转换……
Anthropic 在官方博客中写道:
"We're introducing the Model Context Protocol (MCP), an open protocol that standardizes how applications provide context to LLMs."
核心目标 :让工具开发者写一次代码,所有支持 MCP 的 AI 应用都能使用。
2.3 MCP 是什么?
MCP 是什么?
MCP(Model Context Protocol)是 Anthropic 于 2024 年 11 月推出的AI 与外部工具连接的统一标准 。它让 AI 应用可以调用外部工具、读取资源数据、使用预定义提示,就像给 AI 装上了"手"和"眼睛"。
| 能力 | 英文 | 作用 | 示例 |
|---|---|---|---|
| 工具 | Tools | AI 可以调用的功能 | 查询天气、发送邮件、调用 API |
| 资源 | Resources | AI 可以读取的数据 | 文件内容、数据库记录、配置信息 |
| 提示 | Prompts | 预定义的提示模板 | 代码审查模板、写作模板 |
| 使用场景 | 说明 |
|---|---|
| 当 AI 需要执行实际操作时 | AI 不仅要回答问题,还要真正做事:发送邮件、操作文件、调用第三方 API |
| 当 AI 需要访问私有数据时 | 读取本地文件、查询数据库、访问企业内部系统 |
| 当需要标准化工具接入时 | 一次开发,多个 AI 应用可用(Claude、Cursor、Windsurf 等) |
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 开发 MCP Server | 按 MCP 规范实现 Server,提供 tools/resources/prompts |
| 2 | 配置 AI 应用连接 | 在 AI 应用中添加 MCP Server 配置(本地或远程) |
| 3 | AI 自动调用 | AI 根据任务需求,自动发现并调用合适的工具或读取资源 |
三大核心能力 :
| 能力 | 英文 | 作用 | 示例 |
|---|---|---|---|
| 工具 | Tools | AI 可以调用的功能 | 查询天气、发送邮件 |
| 资源 | Resources | AI 可以读取的数据 | 文件内容、数据库记录 |
| 提示 | Prompts | 预定义的提示模板 | 代码审查模板、写作模板 |
2.4 MCP 的内部实现
MCP 内部实现客户端-服务器架构的通信细节
为什么 MCP 这么火?MCP 之前 AI 只能"看"和"说",有了 MCP,AI 终于可以"动手"了。
| 场景 | 说明 |
|---|---|
| Cursor / Claude 等 AI 编辑器 | 直接读写文件、执行代码、操作 Git |
| 浏览器自动化 | — |
| 数据库查询 | 直接查询/写入数据库,无需手动导出 |
| AI 操作电脑 | Windows-MCP 让 AI 直接操控鼠标键盘 |
| 自动化部署 | Vercel-MCP 一键部署网站到线上 |
| 设计稿转代码 | Figma-MCP 读取设计稿自动生成网页 |
如何使用 MCP?只需要配置一个 mcp.json 文件即可在 IDE 中使用。
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 找到 MCP Server | 从资源站或 GitHub 找到需要的 MCP Server:官方 Server 列表、MCP.so(中文)、Pulse MCP、Smithery |
| 2 | 配置 mcp.json | 在 IDE 中配置 Server(见下方示例) |
| 3 | 重启 IDE 即可使用 | AI 自动发现并加载 MCP 工具 |
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "your-token-here" }
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": { "DATABASE_URL": "postgresql://user:pass@localhost/db" }
}
}
}
Skills 正在替代 MCP?随着 Skills 的普及,越来越多场景使用 Skills 替代 MCP。Skills 更轻量、更易编写。MCP 更适合复杂工具集成、多客户端复用的场景。
| IDE | mcp.json 位置 |
|---|---|
| Cursor | ~/.cursor/mcp.json |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) |
| Windsurf | ~/.windsurf/mcp.json |
如何实现一个 MCP Server?
weather-mcp-server.js
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
// 1. 创建 MCP Server
const server = new Server({
name: 'weather-server',
version: '1.0.0'
}, {
capabilities: { tools: {} }
})
// 2. 定义工具列表
tools: [{
name: 'get_weather',
description: '获取指定城市的天气信息',
inputSchema: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名称' }
},
required: ['city']
}
}]
}))
// 3. 实现工具调用逻辑
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params
if (name === 'get_weather') {
// 调用你的天气 API
const response = await fetch(
`https://api.weather.com/v1/current?city=${args.city}`
)
const data = await response.json()
return {
content: [{
type: 'text',
text: JSON.stringify(data)
}]
}
}
})
// 4. 启动服务(stdio 方式)
const transport = new StdioServerTransport()
await server.connect(transport)
| 传输方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| stdio(本地进程) | MCP Server 作为子进程运行,通过标准输入输出通信 | 简单、安全、适合本地工具 | 只能本地使用,不支持远程 |
| HTTP + SSE(远程服务) | MCP Server 作为 HTTP 服务运行,支持 SSE 推送 | 支持远程访问、多客户端共享 | 需要部署服务器、配置认证 |
通信流程(4 步):1. 握手(initialize) — MCP Server 启动时向 Client 发送握手请求,声明协议版本和能力 (Server → Client)
{
"jsonrpc": "2.0", "id": 1, "method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": { "tools": {}, "resources": {}, "prompts": {} },
"serverInfo": { "name": "filesystem", "version": "1.0.0" }
}
}
技术深究:JSON-RPC 2.0 消息格式
// 请求:{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {...}}
// 成功响应:{"jsonrpc": "2.0", "id": 1, "result": {...}}
// 错误响应:{"jsonrpc": "2.0", "id": 1, "error": {"code": -32600, "message": "Invalid Request"}}
JSON-RPC 2.0 是无状态协议,每个请求都需要包含 id 用于匹配响应。
技术深究:MCP 核心 API
| API | 作用 |
|---|---|
initialize |
初始化 — Server 向 Client 声明协议版本和能力 |
tools/list |
工具列表 — 获取 Server 提供的所有可用工具 |
tools/call |
调用工具 — 实际调用某个工具并获取结果 |
resources/list |
资源列表 — 获取可访问的资源(如文件、数据库) |
resources/read |
读取资源 — 读取某个资源的内容 |
prompts/list |
提示模板 — 获取预定义的提示模板 |
2.5 类比理解:USB-C 接口
MCP 就像 USB-C 接口 :
- 以前 :每个设备都有自己的充电口(圆口、扁口、磁吸……)
- 现在 :USB-C 统一了所有设备的充电和数据传输
- MCP :统一了 AI 与所有工具的连接方式
工具开发者只需要实现一次 MCP Server,所有支持 MCP 的 AI 应用(Claude、Cursor、Windsurf 等)都能直接使用。
2.6 MCP 的典型应用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 本地文件操作 | 让 AI 读取/修改本地文件 | 读取代码库、分析日志文件 |
| 数据库查询 | 让 AI 直接查询数据库 | SQL 查询、数据分析 |
| API 调用 | 让 AI 调用第三方服务 | GitHub API、Slack、邮件 |
| 开发工具集成 | 让 AI 使用开发工具 | Git 操作、终端命令 |
实际案例 :
- Cursor/Windsurf :通过 MCP 连接文件系统、Git、终端
- Claude Desktop :通过 MCP 连接笔记软件、邮件客户端
- 自动化脚本 :让 AI 执行自动化任务(备份、部署、数据同步)
3. A2A (Agent-to-Agent Protocol)
3.1 协议基本信息
| 项目 | 内容 |
|---|---|
| 全称 | Agent-to-Agent Protocol |
| 发起方 | |
| 发布时间 | 2025 年 4 月 9 日 |
| 官方文档 | google.github.io/A2A |
| 开源协议 | Apache 2.0 |
| GitHub | github.com/google/A2A |
为什么是 Google 发起?
Google 在 Cloud Next 2025 大会上发布 A2A,与其企业级 AI 战略密切相关。
Google 认为:未来的企业 AI 不是单个超级 Agent,而是多个专业 Agent 协作 ——有的负责数据分析,有的负责代码生成,有的负责文档处理。
这些 Agent 需要一种标准化的方式相互通信,A2A 应运而生。
3.2 发布的背景
MCP 解决了"AI 如何连接工具"的问题,但还有一个问题:多个 Agent 如何协作?
想象一个场景:
- Agent A 是"需求分析专家"
- Agent B 是"代码生成专家"
- Agent C 是"测试专家"
用户说:"帮我开发一个登录功能"
Agent A 分析需求后,需要把任务分配给 Agent B;Agent B 写完代码后,需要让 Agent C 测试。它们之间如何通信?
Google 在官方博客中写道:
"A2A is an open protocol that enables AI agents to communicate with each other, facilitating collaboration across different frameworks and vendors."
核心目标 :让不同厂商、不同框架开发的 Agent 能够无缝协作。
3.3 A2A 是什么?
A2A(Agent-to-Agent Protocol)是 Google 于 2025 年 4 月推出的 Agent 之间相互协作的通信标准,让不同厂商、不同框架的 Agent 能够相互发现、分配任务、交换信息。
| 概念 | 英文 | 作用 | 类比 |
|---|---|---|---|
| Agent Card | Agent 名片 | 描述 Agent 的能力 | 员工工牌 |
| Task | 任务 | Agent 之间传递的工作单元 | 工单 |
| Message | 消息 | Agent 之间的通信内容,支持多模态 | 聊天记录 |
| SSE | Server-Sent Events | 服务器推送技术,用于实时任务进度更新 | 消息推送 |
| 使用场景 | 说明 |
|---|---|
| 多 Agent 协作复杂任务 | 需求分析 Agent → 代码 Agent → 测试 Agent,各自发挥专长 |
| 集成不同厂商的 Agent | Google、Anthropic、OpenAI 的 Agent 相互协作 |
| 任务委托和进度追踪 | 主 Agent 分配任务给专家 Agent,实时接收进度更新 |
| 步骤 | 操作 | API |
|---|---|---|
| 1 | 发布 Agent Card | /.well-known/agent.json |
| 2 | 发现 Agent | agents/get |
| 3 | 发送任务 | tasks/send(支持 SSE 推送) |
| 4 | 获取结果 | tasks/get |
3.4 A2A 的内部实现
A2A 内部实现对等网络架构的通信细节
A2A 可以做什么?让多个 AI Agent 相互协作,每个 Agent 做自己擅长的事。
| 场景 | Pipeline |
|---|---|
| 软件开发流水线 | 需求分析 Agent → 代码 Agent → 测试 Agent → 部署 Agent |
| 多厂商 Agent 集成 | Google、Anthropic、OpenAI 的 Agent 相互调用 |
| 企业工作流 | HR Agent → 财务 Agent → 审批 Agent 协同处理 |
| 智能客服升级 | 接待 Agent → 业务 Agent → 人工 Agent 逐级转接 |
| 科研协作 | 文献 Agent → 实验 Agent → 分析 Agent → 报告 Agent |
| 自动化运维 | 监控 Agent → 诊断 Agent → 修复 Agent → 通知 Agent |
A2A 协议于 2025 年 4 月发布,目前还在快速发展中。建议关注官方文档获取最新进展。
通信流程(5 步):1. 发现(agents/get) — Agent 之间通过 HTTP 获取对方 Agent Card
GET /.well-known/agent.json
→ {"name": "Code Agent", "url": "...", "version": "1.0.0", "capabilities": {...}, "skills": [...]}
技术深究:Agent Card 名片格式(/.well-known/agent.json)
{
"name": "代码生成 Agent", "description": "专业的前后端代码生成 Agent",
"url": "https://code-agent.company.com", "version": "1.0.0",
"capabilities": { "streaming": true, "pushNotifications": true },
"skills": [
{ "id": "frontend", "name": "前端开发", "description": "React/Vue/Angular" },
{ "id": "backend", "name": "后端开发", "description": "Node/Python/Go" }
],
"authentication": { "schemes": ["Bearer", "OAuth2"] }
}
技术深究:HTTP + SSE 通信
// 任务发送 (HTTP POST)
POST /tasks/send → {"id": "task-001", "message": {"role": "user", "parts": [{"type": "text", "text": "写一个登录接口"}]}}
// 实时推送 (SSE)
GET /tasks/task-001/sse → event: progress | data: {"status": "processing", "progress": 50}
→ event: completed | data: {"status": "completed", "result": {...}}
技术深究:A2A 核心 API
| API | 方法 | 作用 |
|---|---|---|
agents/get |
GET | 获取 Agent Card,了解其能力 |
tasks/send |
POST | 发送任务,同步等待结果 |
tasks/sendSubscribe |
POST | 发送任务并订阅 SSE,实时获取进度 |
tasks/get |
GET | 获取任务状态和结果 |
tasks/cancel |
GET | 取消正在执行的任务 |
技术深究:认证机制
| 方式 | 适用场景 | 示例 |
|---|---|---|
| API Key | 内部 Agent 通信 | Authorization: Bearer sk-xxxxx 或 ApiKey sk-xxxxx |
| OAuth 2.0 | 企业级认证,支持令牌刷新 | Authorization: Bearer {access_token} + POST /oauth/token 刷新 |
3.5 类比理解:企业微信
A2A 就像 企业微信 :
- Agent Card :每个人的名片,显示姓名、部门、职责
- 发任务 :@某人,分配一个任务
- 聊天沟通 :任务执行过程中可以随时沟通
- 任务追踪 :能看到任务的进度和状态
不同的 Agent 就像不同的同事,A2A 让它们能够协作完成复杂项目。
3.6 A2A 的典型应用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 软件开发 | 多 Agent 协作完成开发任务 | 需求分析→代码→测试→部署 |
| 企业工作流 | 不同部门 Agent 协作处理业务 | HR Agent + 财务 Agent + 法务 Agent |
| 智能客服 | 多个专业 Agent 分工处理 | 接待→解答→转接→记录 |
| 数据分析 | 多个 Agent 协作分析数据 | 收集→清洗→分析→可视化→报告 |
实际案例 :
- Google Agent Space :企业内部多个 Agent 协作处理文档、邮件、日程
- 软件开发团队 :需求 Agent → 代码 Agent → 测试 Agent → 部署 Agent
- 智能客服系统 :接待 Agent → 专业解答 Agent → 人工转接 Agent
4. MCP vs A2A:对比与关系
4.1 核心差异
| 维度 | MCP | A2A |
|---|---|---|
| 发起方 | Anthropic (2024.11) | Google (2025.04) |
| 定位 | AI 与工具的连接 | Agent 与 Agent 的协作 |
| 通信范围 | Client-Server | Peer-to-Peer |
| 数据格式 | JSON-RPC 2.0 | HTTP + JSON |
| 类比 | USB-C 接口 | 企业微信 |
4.2 两者的关系
MCP 和 A2A 不是竞争关系,而是互补关系 :
MCP vs A2A — AI Agent 两大协议的定位差异。想象你在一座商场:MCP 像"统一插座标准",让各种电器都能插上使用;A2A 像"内部对讲系统",让不同店铺之间可以协作。
| 维度 | MCP(工具连接) | A2A(Agent 协作) |
|---|---|---|
| 全称 | Model Context Protocol | Agent-to-Agent Protocol |
| 发起方 | Anthropic | |
| 发布时间 | 2024.11 | 2025.04 |
| 架构 | Client-Server | Peer-to-Peer |
| 数据格式 | JSON-RPC 2.0 | HTTP + JSON |
| 类比 | USB-C 接口(统一充电方式) | 企业微信(发任务、聊天) |
核心思想: MCP 和 A2A 不是竞争关系,而是互补关系。MCP 解决"AI 如何获取外部能力",A2A 解决"多个 AI 如何协作"。
4.3 如何选择?
| 场景 | 选择 |
|---|---|
| 让 AI 调用本地函数或工具 | Function Call |
| 使用第三方工具(数据库、API、文件系统) | MCP |
| 构建多 Agent 协作系统 | A2A |
| 同时需要工具集成和多 Agent 协作 | MCP + A2A |
5. 协议的未来趋势
5.1 生态发展
MCP 生态 (截至 2025 年初):
- 官方提供的 Server:文件系统、SQLite、Git、PostgreSQL 等
- 社区贡献的 Server:Slack、Notion、Figma、Stripe 等
- 支持 MCP 的应用:Claude Desktop、Cursor、Windsurf、Zed 等
A2A 生态 (刚发布):
- Google 自家的 Agent 产品率先支持
- 开源社区正在开发各种语言的 SDK
- 企业级应用正在探索中
5.2 标准化进程
目前 Agent 协议还处于"战国时代":
- MCP 和 A2A 是最主流的两个
- 还有其他新兴协议如 ANP、AGP 等
- 未来可能会融合或统一
类比互联网的发展:
- 早期:各种局域网协议并存
- 后来:TCP/IP 成为标准
- 现在:Agent 协议可能也会走向统一
6. 小结
核心要点
| 协议 | 一句话理解 | 发布时间 | 发起方 | 适用场景 |
|---|---|---|---|---|
| MCP | AI 连接工具的"USB-C" | 2024.11 | Anthropic | 工具集成、数据源连接 |
| A2A | Agent 协作的"企业微信" | 2025.04 | 多 Agent 协作、任务委托 |
关键洞察 :
- MCP 解决"AI 如何获取外部能力"的问题
- A2A 解决"多个 AI 如何协作"的问题
- 两者互补,未来可能会融合使用
- 选择协议要根据具体场景,没有银弹
参考资料
- MCP 官方文档 : modelcontextprotocol.io
- MCP GitHub : github.com/modelcontextprotocol
- Anthropic 发布博客 : "Introducing the Model Context Protocol" (2024-11-25)
- A2A 官方文档 : google.github.io/A2A
- A2A GitHub : github.com/google/A2A
- Google Cloud Blog : "Announcing the Agent-to-Agent Protocol" (2025-04-09)