ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

《AI Agent原理与实战》2026版 第19课 A2A 与 Agent 互操作生态

《AI Agent原理与实战》2026版 第19课 A2A 与 Agent 互操作生态

本文收录于专栏《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 覆盖不了:

  1. 发现:对方 Agent 是谁、能干什么、在哪(跨组织/跨框架)?
  2. 对等协作:对方不是"工具",是有自己模型、自己工具、自己会话状态的另一个 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 CardJSON 名片,放在/.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 实例做两件事:

  1. NLWeb 协议端点:网站暴露自然语言问答接口,返回 Schema.org 结构化 JSON——目标是做"AI Web 的 HTML"。
  2. 同时是一个 MCP server:外部 Agent 可用 MCP 的ask方法直接查这个网站。

底层是向量检索(支持 Qdrant/Milvus/Snowflake/Azure AI Search 等后端)。典型场景:酒店的 NLWeb 实例让外部旅行 Agent 直接问"有没有素食友好餐厅"。

19.4 三协议问题域区分(本课核心)

协议问题域连接对象一句话
MCP工具连接Agent ↔ 工具/数据给 Agent 装手
A2AAgent 通信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),结论:方向可行。

读代码的三个要点:

  1. 发现是 GET、协作是 POST——Agent Card 挂在约定路径/.well-known/(与 robots.txt 同思路),任务走 JSON-RPC。
  2. Task 有状态机——state: completed对应 A2A 的任务生命周期;长任务可先回working,客户端轮询或收推送。
  3. 返回的是 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系列《经典机器学习实战》
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进