[A2A协议与实现-09].NET SDK客户端的设计与实现
A2A的协议提供了四组核心操作的输入和输出数据结构可以参考我的前面的文章从Protobuf消息详解A2A协议四大核心操作如何进一步知道具体采用的传输协议我就可以直接利用HttpClient来编写A2A客户端代码实际上前面的演示都是这么做得。实际上A2A官方针对.NET的SDK提供了客户端实现。1. IA2AClientA2A协议与实现-03从Protobuf消息详解A2A协议四大核心操作从协议的角度解读了A2A的四组核心操作A2A协议与实现-08基于MAF的A2A Server设计与实现介绍了IA2ARequestHandler接口我们说它是A2A服务端SDK对A2A协议的表达如下这个IA2AClient具有与IA2ARequestHandler接口完全一致的定义则是客户端SDK针对A2A协议的表达。我们自然可以利用它的实现来执行A2A的四组核心操作。publicinterfaceIA2AClient{// 1. Agent调用TaskSendMessageResponseSendMessageAsync(SendMessageRequestrequest,CancellationTokencancellationTokendefault);IAsyncEnumerableStreamResponseSendStreamingMessageAsync(SendMessageRequestrequest,CancellationTokencancellationTokendefault);// 2. 后台任务管理TaskAgentTaskGetTaskAsync(GetTaskRequestrequest,CancellationTokencancellationTokendefault);TaskListTasksResponseListTasksAsync(ListTasksRequestrequest,CancellationTokencancellationTokendefault);TaskAgentTaskCancelTaskAsync(CancelTaskRequestrequest,CancellationTokencancellationTokendefault);IAsyncEnumerableStreamResponseSubscribeToTaskAsync(SubscribeToTaskRequestrequest,CancellationTokencancellationTokendefault);// 3. 基于后台任务的通知推送配置管理TaskTaskPushNotificationConfigCreateTaskPushNotificationConfigAsync(CreateTaskPushNotificationConfigRequestrequest,CancellationTokencancellationTokendefault);TaskTaskPushNotificationConfigGetTaskPushNotificationConfigAsync(GetTaskPushNotificationConfigRequestrequest,CancellationTokencancellationTokendefault);TaskListTaskPushNotificationConfigResponseListTaskPushNotificationConfigAsync(ListTaskPushNotificationConfigRequestrequest,CancellationTokencancellationTokendefault);TaskDeleteTaskPushNotificationConfigAsync(DeleteTaskPushNotificationConfigRequestrequest,CancellationTokencancellationTokendefault);// 4. AgetCard扩展TaskAgentCardGetExtendedAgentCardAsync(GetExtendedAgentCardRequestrequest,CancellationTokencancellationTokendefault);}2. 针对JSON-RPC的实现既然是对A2A协议的表达IA2AClient接口自然与具体的传输协议无关但是具体的实现则不得不考虑底层采用的传输协议。如下所示的A2AClient类型是针对JSON-RPC的实现。我们在初始化A2AClient对象的时候只需要提供A2A Server的基础地址和一个可选的HttpClient对象。具体的实现很简单不外乎就是使用操作对应的Method为请求封装成JSON-RPC封套以POST形式发送。如果采用流式调用由于服务端会采用SSE实时回传生成的内容这里只需要采用对应的方式解析SSE数据项即可。publicsealedclassA2AClient:IA2AClient,IDisposable{publicA2AClient(UribaseUrl,HttpClient?httpClientnull);...}如下所示的是采用A2AClient以阻塞方式调用Agent的例子。usingA2A;usingAzure.AI.Projects;usingDotNetEnv;usingMicrosoft.Agents.AI.Hosting;usingMicrosoft.Extensions.AI;usingOpenAI;usingOpenAI.Responses;usingSystem.ClientModel;Env.Load();varapiKeyEnvironment.GetEnvironmentVariable(OPENAI_API_KEY)!;varendpointEnvironment.GetEnvironmentVariable(OPENAI_BASE_URL)!;varagentnewOpenAIClient(credential:newApiKeyCredential(key:apiKey),options:newOpenAIClientOptions{EndpointnewUri(endpoint)}).GetResponsesClient().AsAIAgent(model:gpt-5.4-mini,name:a2a-agent,instructions: 你是一个深谙中国古代历史的专家善于根据正史以公正客观的态度于人交流历史问题。 对于用户提出的问题请以简介概括性的语言予以答复字数尽量保持在200字以内。);varbuidlerWebApplication.CreateBuilder();buidler.Services.AddA2AServer(agent.Name!).AddAIAgent(agent.Name!,(services,anme)agent);varurlhttp://localhost:3721/;buidler.WebHost.UseUrls(url);varappbuidler.Build();app.MapA2AJsonRpc(agent,/);awaitapp.StartAsync();usingvarclientnewA2AClient(newUri(url));varprompt春秋初霸郑庄公寤生为何没有成为春秋五霸是因为郑国不够强大吗;varrequestnewSendMessageRequest{MessagenewMessage{RoleRole.User,Parts[newPart{Textprompt}]},};varresponseawaitclient.SendMessageAsync(request);foreach(varpartinresponse.Message!.Parts){Console.WriteLine(part.Text);}输出不完全是。郑庄公在春秋初年确实一度称霸尤其在“周郑交质”“射王中肩”等事件后威望很高但郑国的霸业有明显局限 一是国土狭小、人口与资源有限难以长期支撑霸权 二是地处四战之地易受周边大国夹击 三是郑庄公之后继承者能力不足国力很快衰落。 “春秋五霸”本身也是后世概括通常重在齐桓公、晋文公等更具持续影响者所以郑庄公常被视为“春秋初霸”而不列入五霸。如果希望通过逐字输出的效果可以按照如下的方式采用流式调用awaitforeach(varresponseinclient.SendStreamingMessageAsync(request)){foreach(varpartinresponse.Message!.Parts){Console.Write(part.Text);}}3. 针对HTTP-JSON的实现如果A2A Server是采用HTTP-JSON协议构建那么就需要使用如下这个对应的客户端类型A2AHttpJsonClient。它与OpenAIClient具有完全一致的构造函数定义。publicsealedclassA2AHttpJsonClient:IA2AClient,IDisposable{publicA2AHttpJsonClient(UribaseUrl,HttpClient?httpClientnull);...}我们将上面演示的程序切换成HTTP-JSON协议并采用A2AHttpJsonClient作为调用客户端。usingA2A;usingAzure.AI.Projects;usingDotNetEnv;usingMicrosoft.Agents.AI.Hosting;usingMicrosoft.Extensions.AI;usingOpenAI;usingOpenAI.Responses;usingSystem.ClientModel;Env.Load();varapiKeyEnvironment.GetEnvironmentVariable(OPENAI_API_KEY)!;varendpointEnvironment.GetEnvironmentVariable(OPENAI_BASE_URL)!;varagentnewOpenAIClient(credential:newApiKeyCredential(key:apiKey),options:newOpenAIClientOptions{EndpointnewUri(endpoint)}).GetResponsesClient().AsAIAgent(model:gpt-5.4-mini,name:a2a-agent,instructions: 你是一个深谙中国古代历史的专家善于根据正史以公正客观的态度于人交流历史问题。 对于用户提出的问题请以简介概括性的语言予以答复字数尽量保持在200字以内。);varbuidlerWebApplication.CreateBuilder();buidler.Services.AddA2AServer(agent.Name!).AddAIAgent(agent.Name!,(services,anme)agent);varurlhttp://localhost:3721/;buidler.WebHost.UseUrls(url);varappbuidler.Build();app.MapA2AHttpJson(agent,/);awaitapp.StartAsync();usingvarclientnewA2AHttpJsonClient(newUri(url));varprompt春秋初霸郑庄公寤生为何没有成为春秋五霸是因为郑国不够强大吗;varrequestnewSendMessageRequest{MessagenewMessage{RoleRole.User,Parts[newPart{Textprompt}]},};Console.WriteLine(${newstring(-,20)}SendMessageAsync{newstring(-,20)});varresponseawaitclient.SendMessageAsync(request);foreach(varpartinresponse.Message!.Parts){Console.WriteLine(part.Text);}Console.WriteLine(${newstring(-,20)}SendStreamingMessageAsync{newstring(-,20)});awaitforeach(varupdateinclient.SendStreamingMessageAsync(request)){foreach(varpartinupdate.Message!.Parts){Console.Write(part.Text);}}Console.ReadLine();输出--------------------SendMessageAsync-------------------- 不是主要因为“郑国不够强大”而是郑庄公的霸业更偏“春秋初期的权力中心”难以长期维持。 郑庄公确实曾挟强郑、制诸侯、周旋王室一度有霸主气象但郑国地处中原四战之地国小地狭战略纵深不足加之庄公死后国力迅速下滑未能形成持续稳定的霸权体系。 而后来的“五霸”多是长期扩张、能整合资源并持续主盟的强国君主所以郑庄公虽有“初霸”之名终究未列入传统春秋五霸。 --------------------SendStreamingMessageAsync-------------------- 不只是“郑国不够强大”更关键是郑庄公的霸业具有明显的**短暂性和局部性**。 春秋初年“霸”多指能号令诸侯、主持会盟者郑庄公虽曾挟王室、败强邻威震一时但其影响主要限于中原局部且未形成长期稳定的盟主地位。 此后郑国国力有限又屡受宋、楚、齐等国压力难以延续霸权。后来“五霸”之所以被后世定型更多是因为其霸业更持久、影响更大、史书叙事也更集中。

相关新闻

LOAM-Livox技术解析:突破固态激光雷达运动模糊与小视场角限制的SLAM方案

LOAM-Livox技术解析:突破固态激光雷达运动模糊与小视场角限制的SLAM方案

LOAM-Livox技术解析:突破固态激光雷达运动模糊与小视场角限制的SLAM方案 【免费下载链接】loam_livox A robust LiDAR Odometry and Mapping (LOAM) package for Livox-LiDAR 项目地址: https://gitcode.com/gh_mirrors/lo/loam_livox 你是否曾面临固态激光雷…

2026/7/27 9:18:17 阅读更多 →
地方工信部门评选元宇宙示范应用项目,主要的申报条件和审核标准是什么?

地方工信部门评选元宇宙示范应用项目,主要的申报条件和审核标准是什么?

核心要点: 元宇宙示范应用项目评选已成为地方工信部门推动技术转移与成果转化的重要抓手,但申报方普遍对条件与标准认知模糊。高校、科研院所、企业在产学研对接中面临技术语言转化难、需求匹配精度低、审核量化工具缺失等痛点。数智化平台可依托知识图谱…

2026/7/27 9:18:17 阅读更多 →
高校开展元宇宙相关科技成果转化时,应遵循哪些法律法规和伦理标准?

高校开展元宇宙相关科技成果转化时,应遵循哪些法律法规和伦理标准?

核心要点: 元宇宙成果转化尚处早期,行业面临数据合规、伦理审查与知识产权权属等多重盲区,滞转率高。高校及科研机构需将《数据安全法》《个人信息保护法》及AI伦理规范嵌入“技术转移”全周期,降低转化风险。数智化平台可依据国家…

2026/7/27 9:18:17 阅读更多 →

最新新闻

AI文献综述工具:提升学术写作效率300%的智能方案

AI文献综述工具:提升学术写作效率300%的智能方案

1. 项目概述:AI赋能的学术写作革命去年指导研究生论文时,我发现学生们最头疼的就是文献综述部分。传统方法需要人工阅读数百篇文献,耗时往往超过整个论文写作周期的40%。这正是"百考通AI文献综述"要解决的核心痛点——通过智能算法…

2026/7/27 9:37:27 阅读更多 →
SpringBoot马术俱乐部管理系统设计与实现

SpringBoot马术俱乐部管理系统设计与实现

1. 项目概述:马术俱乐部管理系统的业务痛点与技术选型 马术俱乐部作为高端体育服务场所,其运营管理远比普通健身房复杂得多。我在为上海某知名马术俱乐部做技术咨询时,发现他们还在用Excel表格管理会员课程、马匹健康和赛事安排。教练需要手动…

2026/7/27 9:37:27 阅读更多 →
艾尔登法环存档编辑器:Rust实现的跨平台角色定制神器

艾尔登法环存档编辑器:Rust实现的跨平台角色定制神器

艾尔登法环存档编辑器:Rust实现的跨平台角色定制神器 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor ER-Save-Editor是一款基于Rus…

2026/7/27 9:37:27 阅读更多 →
智能学术写作工具Paperxie全解析:从文献管理到答辩模拟

智能学术写作工具Paperxie全解析:从文献管理到答辩模拟

1. 项目概述:当学术写作遇上智能工具第一次听说paperxie是在研究生室友的电脑上——那会儿他正卡在文献综述部分,对着空白的Word文档发呆了三天。这个号称"毕业论文写作神器"的工具,用算法重构了传统学术写作流程。不同于简单的语法…

2026/7/27 9:37:27 阅读更多 →
OMAP5912异构SoC内存映射与DMA控制器深度解析

OMAP5912异构SoC内存映射与DMA控制器深度解析

1. 从“双核”到“异构”:为什么OMAP5912的设计思路依然值得深究 在嵌入式系统领域,提到“异构多核”,很多人会立刻想到如今手机里的“大小核”架构。但早在二十年前,德州仪器(TI)推出的OMAP系列处理器&…

2026/7/27 9:37:27 阅读更多 →
Wukong AICRM Docker部署全攻略:从环境准备到运维实践

Wukong AICRM Docker部署全攻略:从环境准备到运维实践

1. 先搞清楚 Wukong AICRM 和 Docker 部署的核心价值 如果你正在找一个开源的、能整合 AI 能力的客户关系管理系统,并且希望它能像标准软件一样,在几分钟内就启动并运行起来,那 Wukong AICRM 的 Docker 部署方案就值得你花时间研究一下。 它…

2026/7/27 9:36:27 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻