Agent 互操作协议全景:MCP、A2A、AG-UI 和 Agent Runtime 的分层地图
两篇文章的最终定位
这组文章按一条边界切开:A 文讲外部接口和生态分层,B 文讲内部控制面。A 文回答“Agent 如何和工具、数据、其他 Agent、用户界面、观测评估系统相连”;B 文回答“一个 coding agent 在本机如何循环、拦截、授权、扩展和复盘”。
| 内容 | 放在 A 文 | 放在 B 文 |
|---|---|---|
| MCP / A2A / AG-UI | 作为三类互操作协议,分别解释工具上下文、Agent 间协作、Agent 与 UI 同步 | 只讨论它们进入 runtime 后如何变成 tool、server、permission、trace |
| OpenAI Agents SDK、LangGraph、Google ADK、CrewAI、AutoGen/AG2、LlamaIndex、Semantic Kernel、Pydantic AI、Mastra、Strands Agents | 作为 agent runtime / framework / platform 的生态层,说明它们和协议层的关系 | 只保留和 loop、hook、plugin、sandbox、trace 强相关的运行时判断 |
| Observability / Evaluation / Trace | 讲协议生态中的评估、观测、语义约定和跨框架工具 | 讲一次本机 coding agent 执行过程如何被 trace 复盘 |
| Codex、Claude Code、OpenCode、OMC/OMX | 只作为 runtime 层的例子点到为止 | 作为主体,拆解 hook、loop、插件、权限和编排层 |
先把地图画出来
Agent 生态里最容易混乱的地方,不是工具太多,而是不同名字站在不同层级上。MCP、A2A、AG-UI 是三条接口方向;OpenAI Agents SDK、LangGraph、Google ADK、CrewAI、AutoGen、AG2、LlamaIndex、Semantic Kernel、Pydantic AI、Mastra、Strands Agents 是构建或运行 Agent 的 SDK、框架或 runtime;LangSmith、Phoenix、OpenTelemetry GenAI semantic conventions 属于观测和评估平面。
这些东西不能摊平成一个清单。MCP 解决 Agent 如何接工具和数据,A2A 解决 Agent 如何和另一个 Agent 互相发现、委托和交换结果,AG-UI 解决 Agent 如何把长时间、流式、可中断的执行过程接到用户界面。Runtime 和框架负责 Agent 内部的循环、状态、工具调度、handoff、持久化、人工介入和部署。观测与评估负责回答运行后发生了什么、质量是否变好、改动有没有回归。
flowchart LR
UI["User / UI"] <-- "AG-UI: event stream, shared state, interrupts" --> Runtime["Agent Runtime / Framework"]
Runtime <-- "MCP: tools, resources, prompts" --> Tools["Tools / Data / Workflows"]
Runtime <-- "A2A: discovery, task, message, artifact" --> Remote["Remote Agents"]
Runtime --> Obs["Observability / Evaluation"]
Tools --> Obs
Remote --> Obs
这个分层先把方向固定下来:
| 方向 | 代表 | 类型 | 连接的两端 | 主要问题 |
|---|---|---|---|---|
| Agent ↔ Tools/Data | MCP | 协议 | Agent 应用和外部工具、数据源、工作流 | 工具发现、工具调用、上下文接入 |
| Agent ↔ Agent | A2A | 协议 | 独立 Agent 服务之间 | 能力发现、任务委托、结果交换 |
| Agent ↔ User/UI | AG-UI | 协议 | 用户界面和 Agent 后端 | 流式状态、交互事件、人工介入 |
| Agent 内部运行 | Agents SDK、LangGraph、ADK 等 | SDK / 框架 / runtime | 模型、工具、状态、流程控制 | Agent 循环、编排、持久化、部署 |
| 运行质量 | LangSmith、Phoenix、OTel GenAI | 平台 / 标准 | Trace、eval、prompt、dataset、experiment | 可观测性、回归评估、质量改进 |
协议、SDK、框架、平台、产品不是一回事
协议是线上的契约。它定义消息格式、能力声明、错误处理、传输方式和交互边界。MCP、A2A、AG-UI 站在这个层级。协议本身不关心某个应用内部用不用 LangGraph,也不关心模型来自 OpenAI、Anthropic、Gemini 还是本地推理服务。
SDK 是某种语言里的开发包。MCP Python SDK、A2A JavaScript SDK、OpenAI Agents SDK 都是 SDK。SDK 可以实现协议,也可以封装一套运行时能力,但主要形态仍是给开发者调用的库。
框架和 runtime 负责 Agent 的内部执行。它们决定一个任务如何进入循环,工具如何被调用,状态如何保存,失败如何恢复,多个 Agent 如何交接。LangGraph 强调状态图和 durable execution;OpenAI Agents SDK 强调少量原语、工具、handoff、guardrail 和 tracing;Google ADK 把 agent 开发、运行、部署、评估放在同一套开发框架里。
平台和产品通常包含托管服务、控制台、权限、团队协作和运行数据。LangSmith 是观测、评估、prompt、部署平台;Phoenix 是 AI observability 与 evaluation 工作台;CrewAI Enterprise、Mastra Studio、Google Agent Runtime 也属于产品化或平台化方向。产品可以兼容协议,但产品不是协议。
一个工程判断可以先这样做:跨生态互通先看协议,应用内部结构先看 runtime,团队运维和质量闭环再看平台。
MCP:Agent 接工具和数据的协议
MCP 的官方定义很窄:它是连接 AI 应用和外部系统的开放协议,用来接数据源、工具和工作流。规范里把角色拆成 host、client、server:host 是 Claude Desktop、Claude Code、VS Code 这类 AI 应用;client 是 host 内部为某个 server 维护连接的组件;server 是暴露上下文和能力的程序。MCP 使用 JSON-RPC 2.0 消息,支持本地 stdio 传输和远程 Streamable HTTP 传输。
它解决的问题是典型的 N 乘 M 集成问题。没有协议时,每个 Agent 应用都要为每个数据库、SaaS、内部 API、文件系统、搜索服务写一套适配。MCP 把外部能力包装成可发现、可调用、可授权的 server。Agent 应用基于同一套 MCP client 能力接入不同 server。
MCP 的核心抽象有三类 server primitive:
| 抽象 | 含义 | 常见例子 |
|---|---|---|
| Tools | 可执行动作 | 查数据库、创建工单、调用内部 API、执行搜索 |
| Resources | 可读取上下文 | 文件、表结构、日志片段、知识库文档 |
| Prompts | 可复用交互模板 | 领域任务模板、few-shot 示例、工作流提示 |
规范还定义了 client 侧能力,例如 sampling、roots、elicitation 和 logging。这里有一个容易忽略的点:MCP 不是单向“Agent 调工具”。较新的规范已经允许 server 请求 host 侧模型采样,或者请求用户补充信息。但这些能力仍然围绕工具和上下文交换展开,不把 MCP 变成 Agent 编排框架。
适合 MCP 的场景有四类:
| 场景 | MCP 的价值 |
|---|---|
| 内部系统工具化 | 把 CRM、工单、日志、数据库封装成标准工具 |
| 开发者工具 | 让 IDE、代码仓库、错误监控、CI 数据进入 Agent 上下文 |
| 企业知识接入 | 把分散在权限系统背后的数据以受控方式暴露 |
| 可组合工作流 | 把已有流程包装成 tool,而不是让 Agent 直接模拟 UI 操作 |
MCP 的边界同样要说清楚。第一,它不是 Agent-to-Agent 协议。一个远端 Agent 可以伪装成 MCP tool 暴露,但这样会丢掉 Agent 自身的任务状态、能力发现和 artifact 语义。第二,它不是安全系统本身。官方规范明确把用户同意、数据隐私、工具安全、LLM sampling 控制放在实现者责任里。第三,它不是 runtime。MCP server 只暴露能力,不负责决定 Agent 下一步该做什么。
工程模式可以简化成一个判断:听到“把某个外部能力接给 Agent 用”,优先想到 MCP;听到“让两个自治 Agent 协作”,不要把 MCP 当主协议。
A2A:Agent 服务之间的互操作协议
A2A 的问题空间和 MCP 不同。它关注的不是工具,而是 opaque agentic application 之间的互操作。A2A 官网把它定义为开放协议,用于不同框架、不同供应商构建的 Agent 之间通信和协作。官网还直接写明:A2A 不是 LangGraph、CrewAI、ADK 这类 agent development kit;不是 sub-agent 或 tool-call 协议;不是 MCP 的替代品。
A2A 的关键抽象是把 Agent 当成一个可发现、可调用、可返回结果的服务。
| 抽象 | 作用 |
|---|---|
| Agent Card | Agent 的能力、端点、认证、输入输出形式等元数据 |
| Message | Agent 之间交换的结构化消息 |
| Task | 一段可跟踪的委托执行过程 |
| Artifact | Task 产生的结构化结果或文件化产物 |
| Status / Event | 长任务的状态更新、流式进度和最终完成信号 |
A2A 的工程价值在于“保持内部不透明”。一个供应商可以用 ADK 写 Agent,另一个团队可以用 LangGraph 写 Agent,第三个系统可以是手写服务。只要外部暴露 A2A 约定的 Agent Card 和 task/message/artifact 语义,调用方不需要知道远端内部 memory、tool registry、prompt 或推理循环。
适合 A2A 的场景通常带有组织边界或服务边界:
| 场景 | 说明 |
|---|---|
| 跨团队专业 Agent 协作 | 订单 Agent 委托风控 Agent,风控 Agent 不暴露内部规则 |
| 跨供应商生态互通 | 一个平台上的 Agent 调用另一个平台提供的专用 Agent |
| 长任务委托 | 调研、代码审查、数据分析这类任务需要状态、进度和 artifact |
| 分布式 Agent 产品 | 不同服务各自维护身份、权限、日志和部署节奏 |
A2A 的边界也很重要。它不规定本地子 Agent 如何组织。本地 supervisor 该用状态图、group chat、handoff,还是队列驱动,仍由 runtime 决定。它不规定工具怎么调用,工具层仍然适合 MCP 或框架原生 tool calling。它不替业务定义任务质量,也不替企业完成身份、权限、审计和数据边界设计。
一个实用判断是:如果远端对象本质上能独立计划、执行、返回 artifact,并且应该保留内部实现不透明,就把它建模为 A2A Agent;如果远端对象只是一个函数、数据源或工作流入口,就把它建模为 MCP tool 或 resource。
AG-UI:Agent 后端和用户界面的事件协议
AG-UI 站在第三个方向:Agent ↔ User/UI。官方文档把它定义为开放、轻量、基于事件的协议,用来标准化 AI Agent 与面向用户的应用之间的连接。它关注 agent state、UI intent、用户交互如何在 model/agent runtime 和前端应用之间流动。
这层存在的原因很现实。传统 REST 或 GraphQL 默认是请求一次、返回一次,前端再渲染。Agent 应用不符合这个模型。一个 Agent 可能运行很久,过程中不断流式输出 token、调用工具、生成中间结果、等待用户批准、更新共享状态、触发前端动作,还可能被取消、恢复或重试。
AG-UI 把这些交互做成事件流。
| 抽象 | 作用 |
|---|---|
| Events | token、message、tool、state、interrupt、custom event 等运行事件 |
| Messages | 用户和 Agent 的对话消息 |
| Shared State | 前后端共享的结构化状态和增量更新 |
| Interrupts | 暂停、批准、编辑、重试、升级等 human-in-the-loop 控制 |
| Frontend Tool Calls | Agent 请求前端执行的受控动作 |
| Generative UI | Agent 产生可验证、可挂载的 UI 结构或组件意图 |
适合 AG-UI 的场景不是“聊天框”本身,而是用户需要参与 Agent 执行过程:
| 场景 | AG-UI 的价值 |
|---|---|
| 长任务可视化 | 前端显示 Agent 的阶段、工具结果、进度和可取消状态 |
| 审批流 | Agent 请求用户批准发邮件、建工单、改配置 |
| 协同编辑 | 用户和 Agent 同时修改同一个结构化对象 |
| 生成式 UI | Agent 输出的不只是文字,还有表单、预览、图表、操作按钮 |
| 多模态交互 | 文本、文件、图片、音频、转写和注释进入同一事件模型 |
AG-UI 的边界是:它不负责工具接入,不替代 MCP;它不负责 Agent 服务之间的委托,不替代 A2A;它也不是完整前端框架。具体 UI 组件、权限校验、输入验证、危险动作确认,仍由应用层掌握。AG-UI 只是让 Agent 后端和用户界面用同一套事件语言说话。
三条协议不是替代关系
MCP、A2A、AG-UI 的关系可以用一个客服系统例子说明。
一个用户在前端提交“查一下订单为什么没到”。前端和主 Agent 之间走 AG-UI,界面实时显示查询进度、允许用户补充订单号、在需要退款时触发确认。主 Agent 通过 MCP 调订单库、物流 API、工单系统。发现问题可能涉及风控时,主 Agent 通过 A2A 把子任务委托给风控 Agent,风控 Agent 返回 artifact,例如风险结论、依据摘要和建议动作。
同一个请求里三条协议同时存在:
sequenceDiagram
participant U as User Interface
participant A as Support Agent Runtime
participant M as MCP Servers
participant R as Risk Agent
participant O as Observability
U->>A: AG-UI event: user message
A->>M: MCP tools/list and tools/call
M-->>A: order and logistics data
A->>R: A2A task delegation
R-->>A: artifact and status
A-->>U: AG-UI state update and approval request
A->>O: traces, eval signals, metrics
这张图也解释了边界:
| 问题 | 首选接口 |
|---|---|
| Agent 要访问订单库 | MCP |
| Agent 要委托远端风控 Agent | A2A |
| 前端要展示工具调用进度 | AG-UI |
| 主 Agent 如何决定下一步 | Runtime / Framework |
| 整个链路如何复盘质量 | Observability / Evaluation |
因此,MCP/A2A/AG-UI 不应被问成“谁会赢”。它们站在不同方向上,好的系统通常会同时用到其中两条甚至三条。
Runtime 和框架:Agent 内部怎么跑
协议定义外部接口,runtime 和框架定义内部生命体征。一个 Agent 至少要处理模型调用、工具注册、工具结果回填、短期上下文、长期记忆、失败重试、人工介入、多 Agent 交接、流式输出、审计追踪。不同框架的差异,不在于“能不能调 LLM”,而在于它把控制权交给谁。
| 项目 | 类型 | 核心抽象 | 适合场景 | 边界 |
|---|---|---|---|---|
| OpenAI Agents SDK | Python SDK / lightweight runtime | Agent、Runner、Tools、Agents as tools、Handoffs、Guardrails、Sessions、Tracing、Sandbox agents | Python 优先、希望用少量原语快速写出可追踪、多步骤、可 handoff 的 Agent | 不是通用分布式协议;复杂状态机需要开发者设计或接其他 runtime |
| LangGraph | 低层编排框架和 runtime | StateGraph、node、edge、checkpoint、interrupt、streaming、time travel | 长时间、可恢复、需要明确状态转移和人工介入的 Agent | 抽象较低;prompt、业务架构和工具边界需要开发者建模 |
| Google ADK | 多语言 Agent 开发框架与 Agent Runtime | LlmAgent、tools、sessions、memory、artifacts、graph workflows、multi-agent workflows、Agent Runtime、evaluation | Google/Gemini/Cloud 生态,或者需要从开发、运行、部署、评估一体化推进 | 生态整合强,跨云或极简本地用法需要评估依赖边界 |
| CrewAI | 多 Agent 编排框架和平台 | Agent、Task、Crew、Process、Flow、memory、knowledge、guardrails | 角色分工清楚、业务流程可用“团队 + 任务”描述的自动化 | 角色与目标大量依赖自然语言约束;强一致控制流不如状态图直接 |
| Microsoft AutoGen | 多 Agent 应用框架 | AgentChat、Core、Extensions、Studio、event-driven runtime | 研究、多 Agent 对话、分布式或多语言 Agent 实验 | 名称和版本演进较多;从 0.2 到新版架构需要分清文档代际 |
| AG2 | 多 Agent 框架 / AgentOS 取向 | Conversable Agent、Group Chat、Swarm、tools、human collaboration | 需要内置多 Agent conversation pattern 和人工协作的 Python 项目 | 与 Microsoft AutoGen 已经分叉,选型时必须明确文档和包名 |
| LlamaIndex | 数据增强 LLM 应用框架 | data connectors、indexes、query engines、chat engines、agents、workflows | RAG、文档理解、私有数据上的 Agent 和 workflow | 它的强项是 context augmentation;纯控制流编排不是唯一重心 |
| Semantic Kernel | Microsoft 轻量开发 kit / middleware | kernel、plugin、function、connector、prompt、existing API integration | C#、Python、Java 企业代码库,把现有 API 暴露给模型调用 | 更像企业中间件和插件体系,不是专门的跨 Agent 互操作协议 |
| Pydantic AI | Python Agent 框架 | Agent、dependency injection、typed output、tools/toolsets、MCP、A2A、AG-UI、evals、Pydantic Graph | Python 类型系统重、重视结构化输出、验证、测试和可维护性的团队 | 类型安全不等于自动解决长任务编排;复杂 runtime 仍需配套设计 |
| Mastra | TypeScript Agent 应用框架 | agents、memory、workflows、streaming、MCP、observability、evals、Studio | 现代 TypeScript 栈、产品内嵌 Agent、前端后端同栈团队 | 主要服务 TS/JS 生态;跨语言 Agent 互通仍应靠协议层 |
| Strands Agents | Python / TypeScript Agent harness SDK | Agent、tool、hooks、conversation manager、plugins、steering、trace attributes | 需要端到端控制 agent harness、hook、guardrail、observability,尤其是 AWS 生态 | SDK 不是协议;多组织互通仍要接 MCP、A2A 或其他外部接口 |
这个表不该被读成排行榜。更合理的读法是:
| 控制问题 | 更自然的选择 |
|---|---|
| 要精确控制状态转移和恢复 | LangGraph、ADK Graph Workflows、Pydantic Graph |
| 要少量原语快速落地 Python Agent | OpenAI Agents SDK、Pydantic AI、Strands Agents |
| 要业务角色和任务流 | CrewAI、AG2、AutoGen AgentChat |
| 要 RAG 和私有数据上下文 | LlamaIndex |
| 要企业代码库中间件和插件 | Semantic Kernel |
| 要 TypeScript 产品工程 | Mastra |
| 要托管部署和 Google Cloud 运行面 | Google ADK + Agent Runtime |
框架内部可以原生支持 MCP、A2A 或 AG-UI,但支持协议不等于框架本体就是协议。例如 OpenAI Agents SDK 支持 MCP server tool calling;ADK 文档列出 MCP、A2A、Agent Runtime、observability 和 evaluation;Pydantic AI 文档也把 MCP、AG-UI、A2A、Pydantic Evals 放进生态。但这些仍然是框架对外部接口的实现或集成。
Observability 和 Evaluation:横切面,不是另一个 Agent
Agent 系统上线后,最关键的问题从“能不能跑”变成“是否知道它怎么跑坏的”。普通服务看 request、latency、error、CPU 已经不够。Agent 还要看 prompt、model call、tool call、retrieval、handoff、state mutation、user interrupt、artifact、cost、token、judge score 和人工标注。
LangSmith、Phoenix 和 OpenTelemetry GenAI semantic conventions 分别站在不同层级:
| 项目 | 类型 | 解决的问题 | 边界 |
|---|---|---|---|
| LangSmith | 平台 / 产品 | tracing、evaluation、prompt、dataset、experiment、deployment,支持跨框架 AI 应用 | 不是开放协议本身;深度体验和 LangChain/LangGraph 生态更近 |
| Phoenix | 开源 observability/evaluation 工作台 | 基于 trace 调试运行,做 eval、prompt 迭代、dataset 和 experiment | 工具本身不替代埋点;质量指标仍要按业务定义 |
| OpenTelemetry GenAI semantic conventions | 标准 / 语义约定 | 给 GenAI、Agent、MCP、模型调用等 span、event、attribute 命名,便于跨工具互通 | 只定义遥测语义,不提供 UI、评估器或业务质量判断 |
Phoenix 官方文档明确写到它接收 OpenTelemetry OTLP traces,并基于 OpenInference instrumentation 支持常见框架、模型提供商和语言。OpenTelemetry 官方文档则把 Generative AI、Agent spans、MCP、OpenAI、Bedrock 等放进 semantic conventions 目录,并说明 GenAI conventions 已迁到单独仓库维护。这个走向说明:Agent observability 正在从“各家平台自定义 trace schema”往“标准语义 + 多平台消费”迁移。
一套可用的 Agent 质量闭环至少有四类信号:
| 信号 | 关注点 |
|---|---|
| Trace | 哪个模型、哪个工具、哪个 Agent、哪次 handoff、哪个 state update 导致结果 |
| Metrics | 延迟、token、成本、工具错误率、重试次数、人工介入率 |
| Evaluation | 正确性、忠实性、任务完成率、格式合规、风险动作误触发 |
| Experiment | 同一批 dataset 上比较 prompt、模型、工具描述、routing 策略 |
观测的边界也要克制。Trace 只能解释路径,不能保证路径正确;LLM-as-a-judge 可以降低人工成本,但不能替代业务金标准;指标变好不代表安全边界足够。Agent 质量是工程系统问题,observability 只是让问题可见。
一张工程选型速查表
听到需求关键词时,先映射到层级,再选具体项目:
| 需求关键词 | 所在层 | 候选 |
|---|---|---|
| 接内部 API、数据库、SaaS、文件系统 | Agent ↔ Tools/Data | MCP |
| 远端 Agent 能力发现和任务委托 | Agent ↔ Agent | A2A |
| 前端流式展示、审批、共享状态、生成式 UI | Agent ↔ User/UI | AG-UI |
| 长任务、恢复、状态机、人工介入 | Runtime / Framework | LangGraph、ADK、Pydantic Graph |
| 快速写 Python Agent loop | Runtime / SDK | OpenAI Agents SDK、Pydantic AI、Strands Agents |
| 多角色、多任务业务自动化 | Framework / Platform | CrewAI、AG2、AutoGen |
| RAG、私有数据、文档理解 | Framework | LlamaIndex |
| TypeScript 产品应用 | Framework | Mastra |
| 企业 C# / Java / Python 中间件 | SDK / Middleware | Semantic Kernel |
| Trace、eval、prompt、dataset、experiment | Observability / Evaluation | LangSmith、Phoenix |
| 跨平台遥测字段标准化 | Observability standard | OpenTelemetry GenAI semantic conventions |
更底层的判断公式是:
1 | |
这套公式比记工具名稳定。工具名会变,协议版本会变,框架会重构,产品会合并;方向不会轻易变。Agent 系统的边界只要还是“向工具取能力、向其他 Agent 委托、向用户交互、在 runtime 内执行、在观测平面复盘”,这张地图就能继续用。
参考资料
- Model Context Protocol: What is MCP?
- Model Context Protocol Specification
- Model Context Protocol Architecture Overview
- A2A Protocol
- A2A Protocol Specification
- AG-UI Overview
- OpenAI Agents SDK
- LangGraph Overview
- Google Agent Development Kit
- CrewAI Documentation
- Microsoft AutoGen
- AG2 Documentation
- LlamaIndex Framework
- Semantic Kernel Overview
- Pydantic AI
- Mastra Docs
- Strands Agents
- LangSmith Overview
- Arize Phoenix Documentation
- OpenTelemetry Semantic Conventions
- OpenTelemetry GenAI Semantic Conventions repository
版本快照:以上链接按 2026-06-13 官方文档检索。MCP 官方 specification 页当前指向 2025-11-25 latest;A2A、AG-UI、ADK、CrewAI、Pydantic AI、Mastra、Strands Agents 等文档仍在快速演进,正式引用前应重新确认对应版本。


