多Agent协作入门:基于A2A协议的Agent通信

大家好,我是Edison。

之前我们学习了Semantic Kernel中的一些常见的编排模式,相信你已经了解了一些。在Agent时代,有两个协议目前非常火热,一个是MCP 模型上下文协议(之前我们已经学过了),另一个是A2A (Agent-to-Agent),今天我们就来开始了解下A2A。

A2A协议简介

A2A 即 Agent-to-Agent,翻译过来就是“智能代理之间的协议”,我们可以理解为它就是一个大模型Agent们用来“聊天”的“通用语言”。

image

Agent 和 Agent 之间的交互,和人类之间的沟通有些类似:不同的人有不同的能力,每个人都擅长做自己最擅长的领域。为了一起完成一个任务,必须不断地交换信息 和 协同合作。在Agent时代也如此,Agent也需要分工明确和相互协作。但是,不同的企业不同的团队可能会开发出各种各样的Agent,而这些Agent可能都只会说自己的“方言”,如何让它们能够顺畅沟通,就是A2A协议产生的背景。
简而言之,A2A定义了一套清晰、标准的沟通方式,让Agent们可以顺畅地交流,让不同平台和框架下的Agent都能够说“同一种话”,实现无障碍的信息交换和协作。
例如,下面有三个Agent,它们分别用于不同的任务,通过A2A协议可以让它们之间可以顺畅地通信,最终一起为用户提供完整的方案。

image

可以看到,各个Agent按统一消息格式响应各自的信息,最终由旅游规划Agent将结果进行整合并生成最终结果输出给用户。

技术上来说,A2A 通过标准化的组件(如 Agent Cards)为 Agent 间的“相互发现与握手”提供了通用语言。它在 JSON-RPC、HTTP/SSE 等底层传输之上,定义了能力发现(通过 Agent 卡片以及标准化的能力定义)、会话管理、任务生命周期管理、消息与内容单元(Part)、权限认证、流式与事件等语义,使多智能体系统能够灵活拼接、异步协作,并具备企业级安全与可扩展性。

A2A和MCP的关系

A2A 和 MCP 看起来很相似,但其实它们是互补的关系,一起形成完整的AI时代的通信协议方案。

image

MCP提供了统一的上下文管理和工具调用接口,整合大模型驱动的概率计算与传统工具驱动的结构化计算。A2A则为多Agent协同注入了开放标准。二者的结合,将单一AI应用推向分布式、模块化的智能生态。

总结一下:

  • MCP提供垂直集成,将Agent连接到工具和资源。
  • A2A提供水平通信,将Agent连接到其他Agent。

Hello A2A

这里我们来实现一个A2A的Hello World示例,当然是用我们最熟悉的.NET啦。

A2A .NET SDK 是一个实现 A2A 协议 v0.2.1 的 .NET 库,用于在 .NET 应用程序中启用代理之间的通信。该 SDK 设计用于与 ASP.NET Core 应用程序配合使用,提供了一种简单的方式为 Agent 添加 A2A 支持。

GitHub: https://github.com/a2aproject/a2a-dotnet

这里我们先不管A2A的一些核心对象,直接来写一个Hello World来有个感性认识即可。根据官网示例,我们写一个A2A Agent Server和一个A2A Client。

(1)EchoAgentServer:负责将用户输入的信息进行加工返回;

(2)A2A Client:负责将用户输入的信息传递给EchoAgentServer处理,返回EchoAgentServer的处理结果;

首先,我们创建一个ASP.NET Web (Empty) 项目取名为EchoAgentServer,然后安装以下包:

A2A.AspNetCore 0.1.0-preview.2

然后,创建一个EchoAgent类用于定义该Agent的实现:

public class EchoAgent
{public void Attach(ITaskManager taskManager){taskManager.OnMessageReceived = ProcessMessageAsync;taskManager.OnAgentCardQuery = GetAgentCardAsync;}private Task<Message> ProcessMessageAsync(MessageSendParams messageSendParams, CancellationToken cancellationToken){var text = messageSendParams.Message.Parts.OfType<TextPart>().First().Text;return Task.FromResult(new Message{Role = MessageRole.Agent,MessageId = Guid.NewGuid().ToString(),ContextId = messageSendParams.Message.ContextId,Parts = [new TextPart { Text = $"Echo: {text}" }]});}private Task<AgentCard> GetAgentCardAsync(string agentUrl, CancellationToken cancellationToken){return Task.FromResult(new AgentCard{Name = "Echo Agent",Description = "Echoes messages back to the user",Url = agentUrl,Version = "1.0.0",DefaultInputModes = ["text"],DefaultOutputModes = ["text"],Capabilities = new AgentCapabilities { Streaming = true }});}
}

最后,在Program.cs中注册该Agent并使用A2A AspNetCore SDK进行端点的映射,主要就是使用MapA2A这个扩展方法来实现:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Create and register your agent
var taskManager = new TaskManager();
var agent = new EchoAgent();
agent.Attach(taskManager);
app.MapA2A(taskManager, "/echo");
app.Run();

好啦,Server有了,现在我们创建一个控制台项目作为A2A Client来调用Server。

同样,你需要安装一下A2A Package(这里就不再是A2A.AspNetCore了哈):

A2A 0.1.0-preview.2

然后,通过下面的示例代码一步步完成Agent的服务发现、卡片解析 以及 发送消息通信。

// Discover agent and create client
var cardResolver = new A2ACardResolver(new Uri("https://localhost:7243/"));
var agentCard = await cardResolver.GetAgentCardAsync();
var client = new A2AClient(new Uri(agentCard.Url));
// Send message
var userMessage = new Message
{Role = MessageRole.User,Parts = [new TextPart { Text = "Hello!" }]
};
Console.WriteLine($"User Message: {((TextPart)userMessage.Parts[0]).Text}");
var agentResponse = (Message)await client.SendMessageAsync(new MessageSendParams
{Message = userMessage
});
Console.WriteLine($"Agent Response: {((TextPart)agentResponse.Parts[0]).Text}");
Console.ReadKey();

这里我们将Server 和 Client 都启动起来,查看控制台输出结果:

image

可以看到,Agent Response是从Agent Server处理后返回的结果,正确!

小结

本文介绍了A2A的基本概念以及和MCP的关系,然后通过一个Hello World案例介绍了如何快速开始一个A2A Demo,相信我们可以有一个快速的感性认识。

下一篇,我们将学习对A2A的核心对象如Agent Card, Task, Artifact, Message等,典型工作流程,以及在A2A .NET SDK中集成大模型实现一个稍微复杂点的案例。

参考资料

黄佳:《MCP & A2A前沿实战》

圣杰:《.NET+AI | Semantic Kernel入门到精通》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:nav2笔记-250603

完整教程:nav2笔记-250603pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

MCP gateway

Top 5 MCP Gateways of 2025 https://www.truefoundry.com/blog/best-mcp-gateways Real-world deployment data reveals significant differences between marketing claims and production performance. Based on te…

点云的遮挡剔除

点云的遮挡剔除点云的遮挡剔除

在线视频下载网站如何做泸州大浪科技做网站

https://www.lucidchart.com/pages/signup?utm_expid39895073-174.qKyHpBEbQS26y86OArD-rQ.1 https://www.processon.com/

English of root for May 30th - 详解

English of root for May 30th - 详解2025-10-07 16:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

门户网站指的是什么个人旅游网站建设方案

核心提示&#xff1a;在普拉纳夫看来&#xff0c;数字信息以像素的形式被限制在显示屏幕之中。他发明的"第六感装置"震惊全场&#xff0c;让世界为之惊叹。 MIT(麻省理工)印度裔学生Prarnav Mistry的天才发明:“第六感装置” 视频地址&#xff1a;http://v.youku.com…

招商加盟网站开发腾讯竞价广告

来源&#xff1a;未来智能实验室 互联网云脑逐渐清晰&#xff0c;AI与互联网结合引发AI威胁论 从科学史可以看到这样一个规律&#xff1a;每一次人类社会的重大技术变革都会导致新领域的科学革命。互联网革命对于人类的影响已经远远超过了大工业革命。与工业革命增强人类的力量…

建设网站河北石家庄的大学

对数据库的各项应用与操作都离不开SQL来对数据进行增删改查。 例如 &#xff1a; 有一张某公司职员信息表如下&#xff1a; 需求1&#xff1a;在公司职员信息表中&#xff0c;请统计各部门&#xff0c;各岗位下的员工人数。 如果这个SQL语句不会写或者不知道怎么操作可以交给…

国内权重网站排名网站备案接入商名称

上次给大家推荐了10个宝藏网站&#xff08;http://t.csdnimg.cn/qcRWY&#xff09;&#xff0c;这次我又来啦&#xff01; 话不多说&#xff0c;直接开始&#xff01; 先收藏&#xff0c;防止以后找不到了&#xff01; 整理不易&#xff0c;顺便把赞留下吧&#xff01; 1. 爱…

时尚产品需求预测与库存优化模型解析

本文介绍了一种联合品类规划与库存管理的创新模型,通过马尔可夫链选择模型抽象客户决策过程,解决了时尚产品需求预测中的替代品效应和动态库存规划难题。开发满足多元品味的时尚产品模型 在线零售商持续面临的挑战是…

什么好的设计网站ppt做杂志模板下载网站有哪些

目录 一、使用场景 二、第一种方式&#xff1a;创建具有超时功能且绑定死信交换机的消息队列 三、第二种方式&#xff1a;创建通用延时消息 四、第三种方式&#xff1a;使用rabbitmq的延时队列插件&#xff0c;实现同一个队列中有多个不同超时时间的消息&#xff0c;并按时间…

自制带得分和推荐走法的象棋视频

① 到东萍象棋网可以下载许多棋谱。我用程序下载了1万多个推荐的,grep -v (--invert-match)去掉了和棋的,还有6813个。bash+wget干的,python的连不通(要送user-agent?) pu.txt 6813行,形如:河北金环建设象棋队-…

装修网站是怎么建设的排名检测

刚开始学create table的时候没注意&#xff0c;学到后面发现可以指定默认值。于是写了如下语句&#xff1a; 当我查询的时候发现&#xff0c;查出来的结果是这样的。。 很纳闷有没有&#xff0c;我明明指定默认值了呀&#xff0c;为什么创建出来的表还是空的呢&#xff1f;又跑…

慈溪企业排名网站怎么做点击图片跳转网站

背景 Prompt flow和LangChain都是LLM时代&#xff0c;为高效地构建LLM应用而生。 Prompt flow是Microsoft开源的&#xff0c;其诞生时&#xff0c;LangChain已经很有名气了。 所以作为后生的Prompt flow会为我们带来哪些新的东西呢&#xff1f; ​​​​​​​ Prompt flo…

C++ list数据删除、list资料访问、list反转链表、list数据排序

C++ list数据删除、list资料访问、list反转链表、list数据排序pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

DP分析黑科技——闫氏DP分析法

(前置:没有在百度百科上找到,查了一下这种方法是由英国经济学家埃拉闫提出的(真DP起源于经济学)) 核心思想:从集合角度分析DP问题 在我们遇到的DP问题中,一般都是求在一个有限集内的最值,但是这些方案数量一般…

MUGEN游戏引擎等一系列相关杂谈

MUGEN游戏引擎等一系列相关杂谈也许是个相当没有质量的文章,或者说时定位错了 后面看情况出个整合包之类的吧...... 因此久违的想玩玩格斗游戏了,最好是那种全明星阵容打乱斗的 网上找了找,除了幻想印章,以外还有几…

龙岗网站建设公司河南头条最新消息 新闻

STM32 Proteus仿真LCD12864俄罗斯方块-FZ0063 Proteus仿真小实验&#xff1a; STM32 Proteus仿真LCD12864俄罗斯方块-FZ0063 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD12864显示器多个按键 1.标准俄罗斯方块经典游戏玩法&#xff0c;带计时&#xff0c…

门户网站的含义做淘宝详情页好的网站

.NET 8 是微软于2021年8月24日宣布的下一代编程语言和框架&#xff0c;它是 .NET 宇宙的一部分&#xff0c;与 C# (Common Language Infrastructure) 紧密集成。.NET 8 引入了许多新功能&#xff0c;如原生编译、值类型 (Value Types)、结构化并发 (structured concurrency) 和…

中铁建设集团集采网站张家界网站建设app

1.教程简介 本教程是YouTube大佬教程视频的随笔, 目前正在更新中... 教程地址[YouTube](https://www.youtube.com/watch?vXtQMytORBmM)2.安装 本教程使用的Unity版本 2021.3.34f1&#xff0c; 安装好该LTS(长期支持)版本之后, 在左侧Install选项卡Tab中选择对应版本右边的齿…