A2A协议 是什么? 与 MCP 的区别是什么? 主体参考视频一起学习: 马克的技术工作坊-A2A协议深度解析(第 1 部分:双Agent同步调用场景) 马克的技术工作坊-A2A协议深度解析(第 2 部分:流式返回 + 多 Agent 场景) - YouTube 视频指向的一些资源:
- 天气 Agent 所在仓库:GitHub - MarkTechStation/VideoCode
- A2A 官方示例(即平台和调度 Agent 所在仓库):GitHub - a2aproject/a2a-samples: Samples using the Agent2Agent (A2A) Protocol
- A2A 规范(作者2个月前说的地址已失效,这是最新的规范地址):Agent2Agent (A2A) Protocol
- 补充:a2aproject官方Github仓库:GitHub - a2aproject/A2A: An open protocol enabling communication and interoperability between opaque agentic applications.
完成本篇学习后,可以阅读另一篇Medium上的文章: 多智能体系统中的挑战 : Google A2A, Claude Code & 研究, Gödel Agent: Challenges in Multi-Agent Systems : Google A2A, Claude Code & Research, Gödel Agent | by Joyce Birkins | Medium 再看这一篇文章,就能非常快的理解到位,尤其是看图,一目了然。
A2A协议深度解析(第 1 部分:双Agent同步调用场景)
前言
什么是 Agent
一个场景:
比如我们问 Cursor「做一个介绍AI的网页」。
Cursor会先通过大语言模型思考解决方案的大致步骤,然后调用各种外部工具来完成任务。
有的工具用来创建写入文件,有的工具用来执行终端命令。
但是不论调用哪种工具,它都会不断地思考执行。
直到帮你把任务完成。
虽然 Cursor 很能干,但是它最擅长的还是写代码,其他比如帮你订机票,它可能就没有那么靠谱。
疑问:不对啊,如果我安装了专门订机票的MCP,不就能解决问题吗? 让 Cursor 订机票的问题:
- 效果无法保障(Cursor这类工具核心目的是写好代码,而不是当旅行助手,可能会犯一些不可原谅的错误)
- 花费逐步增加(所有可用工具的信息,都写在提示词里面)
比如我们BTY小红书MCP的这一坨描述。
今天装个工具订机票,明天装个工具订旅馆。工具越多,提示词越长。每次回答问题的花费也就越来越多了。
所以更好的方式,就是专门做一个订机票的 Agent。
写代码的事情,就专门教给 Cursor 更好。
疑问:有的场景就是需要用到多个 Agent 的能力,这种时候应该怎么办呢? 这就需要我们的A2A协议了
A2A协议使用场景
你住在西雅图,希望在25-27号这三天里能出发去纽约。并且你希望出发的那天西雅图阳光明媚。
如果你生活在没有大模型和 Agent 的时代,需要自己动手做下面这三件事:
剩下的就是去网站订机票,并且乘机旅行。
但是现在我们生活在有大模型和 Agent 的时代,就会存在这样的一个助手(它包含三个 Agent):
用户只需要通过自然语言,一句话就能让调度Agent获取到符合需求的信息,整理好后直接告诉用户符合要求的机票。当然,也许调度Agent甚至能一步到位直接订好机票,为了简化链路,我们只聊Agent获取到机票信息这一步。

疑问:A2A协议作用在这个链路的哪一个部分呢?
简单讲,当然是Agent和Agent互相箭头指来指去的部分了。
疑问Plus:那MCP又作用在哪里呢?
MCP作用在Agent内部。
我们拿天气查询Agent来举例,A2A主要作用在Agent外部,MCP协议主要作用在Agent内部。这是两个协议的最大区别。

进一步简化链路,我们先简单做成调度单个Agent的链路。吃透了单个的调度,明白了原理就一通百通。

启动 Agents
下载好马克的工作坊Github仓库的 VideoCode 仓库。
下载好后,直接把weather文件夹拖拽到 Termina/Iterm2 这类命令行工具。
执行指令:
uv run . 如果没有 uv(python的包管理器) 指令,可以执行:
curl -LsSf https://astral.sh/uv/install.sh | sh运气不好,1000 端口被占用,会展示如下:
修改 main.py 文件中的端口即可:
运行成功:
每一个 Agent 本质上,都是一个 HTTP 服务器,只不过这个 HTTP 服务器的内容,是符合 A2A协议的。
启动好 weather Agent 之后,下一步我们就要启动用于调度的Agent了。
Google 已经写好了一个,我们直接用它的就可以了。 GitHub - a2aproject/A2A: An open protocol enabling communication and interoperability between opaque agentic applications.
但是使用 Google 的 Agent之前, 你可能会遇到第1个问题。还需要先获取到 AI-Studio 的 API 才可以玩起来。 请点击Google AI Studio,获取API Key。
如果已经登录,应该直接会跳转到 https://aistudio.google.com/prompts/new_chat 这个路径。和视频中不同,获取按钮已经替换到了左下角(25年8月27日):
继续点击「创建 API 密钥」:
如果你没有创建过任何API Key,则直接可以选择下图置灰的「在现有的项目中创建API密钥」,直接能到创建成功。反之,你可能会因为已有项目遇到第2个问题,需要新建一个 Google Cloud 项目:
当然你可以直接选已有的项目,这里还是推荐访问 Google Cloud 控制台:Google云端平台
新开一个项目,如下3图:

创建完成之后,可能需要等待15-30s。多刷新几次,看到刚创建的项目出来即可:
创建成功,推荐存一下备忘录。

回到主线,让我去到 a2a-samples 的文件目录:
(留神,和视频中不同,我们下载的文件路径会带个’-main’)
然后去向 demo/ui, (视频是vim, nano基本自带,我们这里举例用nano)
cd demo/ui
echo "GOOGLE_API_KEY=your_api_key_here" >> .env
文件夹里会多一个 .env 隐藏文件。如果没有,则按快捷键 「Shift + Cmd + .」来露出隐藏文件。
再输入来执行a2a程序,并等待自动部署完成:
uv run main.py
完成后应该是这样:
浏览器访问: http://localhost:12000/

为了能看到Aegnt创建关联的过程,我们需要先安装打开抓包工具。
抓包分析A2A协议
安装 Reqable · API抓包调试 + API测试一站式工具
增加天气Agent
Read 成功,通过A2A协议,已经创建成功了。

回到抓包工具:
和视频里6月份的内容不同,现在的协议已经直接请求 agent-card 路径:
path 已经变成了**/.well-known/agent-card.json** 。
每关联一个Agent之后,调度Agent都会收到一张Agent Card,让调度Agent知道,这个Agent 能做什么,以便后续在合适的时候选择Agent来办事。
然后回到a2a平台,选择 Home
再开始一个新会话:
输入「西雅图明天的天气怎么样?」
回车,等待Agent返回
