本文收录于专栏《AI Agent原理与实战》2026版—— 专栏系统覆盖 AI Agent 的记忆、工具、插件与实战,点击订阅可跟踪后续更新。
本课定位:MCP 连接"Agent 与工具",那 Agent 与 Agent 之间呢?本课讲 A2A 协议、NLWeb,并把 MCP/A2A/NLWeb 三个协议的问题域彻底分清——这是面试与架构评审的高频考点。第 23 课多 Agent 框架的通信层多数已向 A2A 靠拢。
阶段 3|框架与协议 | 来源:【微软课程·11 下】
关键字:A2A协议、Agent互操作、NLWeb、智能体通信、跨框架协作、MCP对比、协议生态、互操作标准
本节目录
- 19.1 为什么有了 MCP 还要 A2A
- 19.2 A2A 核心概念
- 19.3 NLWeb:第三个协议
- 19.4 三协议问题域区分(本课核心)
- 19.5 案例:两个 Agent 通过 A2A 风格消息完成一次协作【已实测,2026-10-01】
概念讲解
19.1 为什么有了 MCP 还要 A2A
MCP 解决的是一个 Agent 怎么接工具;但当任务需要多个独立 Agent 协作——你的客服 Agent 要把退货工单交给供应商的售后 Agent 处理——两个问题 MCP 覆盖不了:
- 发现:对方 Agent 是谁、能干什么、在哪(跨组织/跨框架)?
- 对等协作:对方不是"工具",是有自己模型、自己工具、自己会话状态的另一个 Agent。任务可能长耗时、需要多轮交换、异步通知。
A2A(Agent2Agent / Agent-to-Agent)协议由此而生:Google 2025-04 发起(Google Cloud Next 大会联合 50+ 合作伙伴推出,解决跨厂商 Agent 互操作),2025-06 捐给 Linux 基金会(供应商中立化),2026 年 4 月发布1.0 稳定规范(签名 Agent Card、多租户、现代安全流)。截至 2026-04,超过 150 家组织支持(AWS/Cisco/IBM/Microsoft/Salesforce/SAP/ServiceNow 等技术指导委员会成员),已进入 Google/Microsoft/AWS 主要云平台并有企业生产部署。
一句话分工(官方口径):MCP 装备 Agent(agent-to-tool),A2A 连接 Agent(agent-to-agent),互补而非竞争。
19.2 A2A 核心概念
微软课程思想(源自微软原课第 11 课《Using Agentic Protocols》下半——A2A/NLWeb 部分):微软讲 A2A 时强调它与 MCP 的互补而非竞争——“MCP 给 Agent 装工具,A2A 让 Agent 互相对话”;并点出 A2A 的三个独有价值:跨厂商/跨框架协作(不同技术栈的 Agent 也能组队)、模型选择自由(每个远端 Agent 自主选自己的 LLM)、内建鉴权(安全框架集成在协议层)。NLWeb 部分微软的愿景是"AI Web 的 HTML"——每个网站一个自然语言端点,且天生是 MCP server。本课 19.1/19.4 的"三协议问题域区分"正是把微软这个互补论展开成决策表。
| 概念 | 作用 | 类比 |
|---|---|---|
| Agent Card | JSON 名片,放在/.well-known/agent-card.json(v0.3.0 起的标准路径;v0.2.x 时代是agent.json,网上老教程混用需注意),声明身份/描述/能力/skills/endpoint | 网站的 robots.txt |
| Task | 协作的基本单元,有生命周期(submitted→working→completed/failed…),产出 Artifacts | 工单 |
| Message / Part | 客户端与远端 Agent 间的通信单元;Part 可以是文本/文件/结构化数据 | 聊天消息/附件 |
| Agent Executor | 远端 Agent 内部用自己的 LLM + 自己的工具解析请求执行任务 | 后端服务 |
传输层:HTTPS + JSON-RPC 2.0,鉴权直接复用 Web 成熟体系(OAuth 2.0 / API key)。A2A 明确不管的三件事:不管你怎么建 Agent(LangGraph/CrewAI/MAF 都行)、不管 Agent 内部子 Agent 怎么调度、不管 Agent 怎么接自己的工具(那是 MCP 的事)。
每个 A2A Agent自主选模型——远端 Agent 用什么 LLM 是它的内政,这正是与"把对方当工具调"的本质区别。
19.3 NLWeb:第三个协议
NLWeb(Natural Language Web,微软 2025-05 Build 大会发起的开源项目)解决第三个问题域:让网站可以被自然语言访问。每个 NLWeb 实例做两件事:
- NLWeb 协议端点:网站暴露自然语言问答接口,返回 Schema.org 结构化 JSON——目标是做"AI Web 的 HTML"。
- 同时是一个 MCP server:外部 Agent 可用 MCP 的
ask方法直接查这个网站。
底层是向量检索(支持 Qdrant/Milvus/Snowflake/Azure AI Search 等后端)。典型场景:酒店的 NLWeb 实例让外部旅行 Agent 直接问"有没有素食友好餐厅"。
19.4 三协议问题域区分(本课核心)
| 协议 | 问题域 | 连接对象 | 一句话 |
|---|---|---|---|
| MCP | 工具连接 | Agent ↔ 工具/数据 | 给 Agent 装手 |
| A2A | Agent 通信 | Agent ↔ Agent | 让 Agent 之间对话协作 |
| NLWeb | 网站访问 | Agent ↔ 网站 | 让网站对 AI 说人话 |
三者组合的完整图景:一个用 LangGraph 构建的交易 Agent(框架),通过 MCP 连接行情数据库和下单系统(工具),通过 A2A 把合规审查委托给另一个团队的审查 Agent(协作),通过 NLWeb 查询供应商网站的商品页(信息获取)。
案例实战
19.5 案例:两个 Agent 通过 A2A 风格消息完成一次协作【已实测】
运行环境:实测于 Linux(Ubuntu 22.04 / Python 3.10.12纯标准库,零第三方依赖、无需 API key)。Windows 同构:http.server/urllib均为 Python 自带,PowerShell 下python a2a_mini_demo.py原样可跑(唯一平台差异:若 7831 端口被占用换一个端口号,代码三处同步改)。
目标:客户端 Agent 发现远端 ResearchAgent → 发送文献调研任务 → 拿回结构化结果。
# a2a_mini_demo.py | 纯标准库 | 2026-10-01 实测通过# 远端 Agent = HTTP server 暴露 Agent Card + message/send(演示骨架)importjson,threading,http.server,urllib.request,time RESPONSES={"调研":"已检索 3 篇文献:A(2025)、B(2026)、C(2026),结论:方向可行。","default":"任务已受理。",}classRemoteAgentHandler(http.server.BaseHTTPRequestHandler):deflog_message(self,*a):passdef_send(self,obj):body=json.dumps(obj,ensure_ascii=False).encode()self.send_response(200)self.send_header("Content-Type","application/json")self.end_headers()self.wfile.write(body)defdo_GET(self):# ① Agent Card:A2A 的发现机制(约定路径)ifself.path=="/.well-known/agent-card.json":self._send({"name":"ResearchAgent","description":"文献检索与调研 Agent(演示)","url":"http://127.0.0.1:7831/","skills":[{"id":"literature_review","name":"文献调研"}]})defdo_POST(self):# ② JSON-RPC 2.0 message/send:A2A 的通信层req=json.loads(self.rfile.read(int(self.headers["Content-Length"])))text=req["params"]["message"]["content"]["parts"][0]["text"]key="调研"if"调研"intextelse"default"self._send({"jsonrpc":"2.0","id":req["id"],"result":{"taskId":"task-001","state":"completed","artifacts":[{"parts":[{"type":"text","text":RESPONSES[key]}]}]}})threading.Thread(target=lambda:http.server.HTTPServer(("127.0.0.1",7831),RemoteAgentHandler).serve_forever(),daemon=True).start()time.sleep(0.3)# ---- 客户端 Agent 侧 ----card=json.load(urllib.request.urlopen("http://127.0.0.1:7831/.well-known/agent-card.json"))# 发现print("[1] 发现远端 Agent:",card["name"],"-",card["description"])payload=json.dumps({# 委托"jsonrpc":"2.0","id":"req-1","method":"message/send","params":{"message":{"role":"user","content":{"parts":[{"type":"text","text":"帮我做文献调研"}]}}}}).encode()resp=json.load(urllib.request.urlopen(urllib.request.Request("http://127.0.0.1:7831/",data=payload,headers={"Content-Type":"application/json"})))print("[2] 任务状态:",resp["result"]["state"])print("[3] 远端返回:",resp["result"]["artifacts"][0]["parts"][0]["text"])实测输出(2026-10):
[1] 发现远端 Agent: ResearchAgent - 文献检索与调研 Agent(演示) skills: ['literature_review'] [2] 任务状态: completed [3] 远端返回: 已检索 3 篇文献:A(2025)、B(2026)、C(2026),结论:方向可行。读代码的三个要点:
- 发现是 GET、协作是 POST——Agent Card 挂在约定路径
/.well-known/(与 robots.txt 同思路),任务走 JSON-RPC。 - Task 有状态机——
state: completed对应 A2A 的任务生命周期;长任务可先回working,客户端轮询或收推送。 - 返回的是 Artifacts 不是普通文本——结构化产出,为多轮/流式/文件交换预留。
这是教学骨架(示意):真实 A2A 生产栈用官方a2a-sdk(Python/JS,含 Agent Card 校验、任务管理、流式),远端是另一个框架(LangGraph/MAF)实现的 Agent 套上 A2A server 壳。骨架的价值在于把协议两层(发现 + 通信)剥到最简——A2A 不神秘,就是"名片 + 工单"。
小结
- MCP 装手(agent-to-tool)、A2A 对话(agent-to-agent)、NLWeb 开门(agent-to-website)——三个问题域不重叠,组合使用。
- A2A 核心:Agent Card(发现)+ Task 生命周期(协作单元)+ HTTPS/JSON-RPC(传输),1.0 稳定规范 2026-04 发布,Linux 基金会托管、150+ 组织支持。
- A2A 的对等性:每个 Agent 自主选模型、保留内政(内部工具/子 Agent 不管)——这是"协作"与"当工具调"的分界线。
- NLWeb = 网站的自然语言端点 + 天生 MCP server,底层向量检索。
- 实测骨架 60 行跑通"发现 + 委托 + 结果回传",生产用 a2a-sdk。
参见:第 18 课《MCP 协议深度实战》(互补协议的上半)、第 21-24 课(多 Agent 系统——A2A 的应用主场)、第 29 课《Agent 安全》(跨组织协作的鉴权与信任)。
扩展阅读
🌐 网络提示:github.com 需代理(clone 可走 ghproxy 加速、push 优先 SSH);框架文档站(GitHub Pages/Cloudflare)可达性波动,打不开时稍后重试。详见总纲附录《国内网络访问与国产适配指南》。
- A2A 协议官网(1.0 规范):https://a2a-protocol.org/latest/
- A2A GitHub(含 Python/JS SDK):https://github.com/a2aproject/A2A
- Linux 基金会 A2A 一周年公告(150+ 组织):https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year
- NLWeb 项目:https://github.com/microsoft/NLWeb
- 微软原课第 11 课:https://github.com/microsoft/ai-agents-for-beginners/tree/main/11-agentic-protocols
我的专栏
| 蛋白 / 抗体 / 多肽 / 核酸 | 分子模拟 / 动力学 / 对接 | 药物 / 设计 / 案例 | AI / Agent / 大模型 |
|---|---|---|---|
| 开源蛋白结构预测 | 分子模拟基础 | 小分子药物设计案例 | AI Agent系列 |
| 开源蛋白生成方法实践 | 分子动力学模拟-Amber | 蛋白药物设计案例 | 化学大模型 |
| 开源多肽设计模型 | 分子动力学模拟-Gromacs | 多肽药物设计案例 | 《AI Agent原理与实战》 |
| 开源多肽性质预测 | 分子动力学模拟-OpenMM | 开源小分子生成设计 | CADD中的机器学习模型 |
| DNA/RNA药物设计 | 結合自由能 | 高效计算配置 | 《MCP 入门实战》 |
| siRNA药物设计模型 | UCSF DOCK系列 | 我胡师兄说药 | 《AI入门实战2026》 |
| ASO药物设计模型 | rDock系列 LeDock系列 gnina系列 | 《经典机器学习实战》 |