协议
大约 2 分钟
协议
为什么需要通信协议?
手写工具能跑通循环,但每接一个外部服务就要新写一个适配器:认证、错误和返回格式都重复,别人写的工具也不能直接用。能力被死在启动前注册的那张表里,智能体之间也不能互相委托。
协议要的是统一接口、运行时发现、以及换服务时少改智能体。它不替代循环,只替代「每个系统一份私有工具代码」。
MCP、A2A、ANP 各解决什么?
| 协议 | 谁和谁说话 | 核心问题 | 什么时候选 |
|---|---|---|---|
| MCP | 智能体和工具/资源 | 怎么用同一套方式访问文件、数据库、第三方 API,并带上上下文 | 要接外部能力 |
| A2A | 智能体和智能体 | 怎么点对点委托、对话、协商,而不是都经过一个中心调度 | 多个智能体要协作 |
| ANP | 智能体和网络 | 规模变大后怎么发现对方、按能力连接,而不是事先写死地址 | 要做服务发现和网络 |
MCP 不是普通 RPC 的别名。它同时暴露工具、资源和提示,让调用方拿到的不只是一个函数返回值。传输上要能说出本地用标准输入输出,远程用 HTTP 或 SSE 这一类流式通道。
A2A 里每个智能体既可以发起请求,也可以响应请求。ANP 的重点是注册、发现和选择,不是把任务内容再定义一遍。
进程内工具和协议出进程有什么差别?
进程内工具就是一次函数调用,参数和返回都在本进程,延迟低,权限也是本进程的权限。
协议出进程之后,多了发现、传输、认证和类型转换。模型生成的参数经常是字符串,进远程服务前要转成对方要求的类型。一个 MCP 服务可以展开成多个工具名,再注册进原来的工具表,这样循环不用知道远程协议。
三种协议都应该能收成同一种工具接口。智能体只调用 run,不在业务循环里分叉 MCP、A2A 和 ANP。
面试里怎么选?
先问通信双方是谁。对文件、数据库和 API,用 MCP。对另一个会自己规划的智能体,用 A2A。对一群事先不知道地址的服务,再谈发现。
生态上 MCP 更成熟,优先用有人维护的服务,不要为了协议名先上还没有实现的发现层。自建 MCP 服务的部署步骤属于项目题,这里不展开。