A2A协议 是什么? 与 MCP 的区别是什么? 主体参考视频一起学习: 马克的技术工作坊-A2A协议深度解析(第 1 部分:双Agent同步调用场景) 马克的技术工作坊-A2A协议深度解析(第 2 部分:流式返回 + 多 Agent 场景) - YouTube 视频指向的一些资源:

完成本篇学习后,可以阅读另一篇Medium上的文章: 多智能体系统中的挑战 : Google A2A, Claude Code & 研究, Gödel AgentChallenges 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 订机票的问题:

  1. 效果无法保障(Cursor这类工具核心目的是写好代码,而不是当旅行助手,可能会犯一些不可原谅的错误)
  2. 花费逐步增加(所有可用工具的信息,都写在提示词里面) 比如我们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返回

核心概念回顾

运行链路流程图

结束语

标签

AI 协议 Agent 技术 实践 核心