东莞网站关键词排名,百度号码认证平台官网,帮网站做推广赚钱吗,网络推广服务A2A协议的三大角色A2A 即 Agent-to-Agent#xff0c;它定义了三个关键的角色#xff0c;它们各司其职互相配合#xff0c;支撑多个Agent的运行。那么#xff0c;都是哪几个角色呢#xff1f;下面告诉你#xff1a;image角色1#xff1a;用户#xff08;User#xff09…A2A协议的三大角色A2A 即 Agent-to-Agent它定义了三个关键的角色它们各司其职互相配合支撑多个Agent的运行。那么都是哪几个角色呢下面告诉你image角色1用户User即终端用户可能是人类 或 服务需要使用Agent来完成某个任务。角色2客户端Client一个代表用户向 远程Agent 发送请求的实体它发送的请求是严格按照A2A协议的。它的表现形式可以是一个应用程序、服务 或 一个Agent。例如我们在上一篇的Demo中开发的一个控制台应用程序通过引用A2A包来向远端的Agent发送请求。角色3远程AgentRemote Agent一个执行实际任务的Agent部署在某个远端Server上对于客户端来说是“黑盒”一样的存在仅仅通过Agent Card声明自己提供的接口或技能但内部实现细节或工作机制是不透明的即一个“黑盒”。例如我们在上一篇的Demo中开发的一个WebAPI项目EchoAgent提供了一个ProcessMessage的技能 以及 声明了一个AgentCard公开了一些元数据。A2A的四大对象A2A中定义了一套完整的对象体系其中最核心的就是下面这四个核心对象第一个对象Agent Card又称Agent名片每个A2A的远程Agent都需要发布一个JSON格式的名片被称为“Agent Card”用于描述这个Agent具有哪些技能 及其 认证机制便于Client可以获得这些信息并选择合适的Agent来完成任务。image其实它就和我们在做后端服务开发中的服务注册和发现的机制差不多只不过这个注册的信息被标准化了下面我们可以看看一个典型的Agent Card的JSON格式复制代码{name: Google Maps Agent,description: Plan routes, remember places, and generate directions,url: https://maps-agent.google.com,provider: {organization: Google,url: https://google.com},version: 1.0.0,authentication: {schemes: OAuth2},defaultInputModes: [text/plain],defaultOutputModes: [text/plain, application/html],capabilities: {streaming: true,pushNotifications: false},skills: [{id: route-planner,name: Route planning,description: Helps plan routing between two locations,tags: [maps, routing, navigation],examples: [plan my route from Sunnyvale to Mountain View,whats the commute time from Sunnyvale to San Francisco at 9AM],outputModes: [application/html, video/mp4]}]}复制代码这个JSON数据简要描述了一个名为Google Maps Agent的Agent定义。这个Agent的主要功能是规划路线、记住地点和生成导航指示。这个应用由Google提供版本号是1.0.0采用OAuth2身份验证。它支持文本和HTML格式的输入和输出具有流媒体功能但不支持推送通知。它的一个核心技能是route-planner可以帮助用户规划两个地点之间的路线并输出HTML和视频格式的内容。在A2A .NET SDK中AgentCard的定义如下复制代码public class AgentCard{public string Name { get; set; } // 代理名称public string Description { get; set; } // 代理描述public string Url { get; set; } // 代理 URLpublic AgentProvider? Provider { get; set; } // 提供商信息public string Version { get; set; } // 版本信息public AgentCapabilities Capabilities { get; set; } // 代理能力public ListAgentSkill Skills { get; set; } // 代理技能public Liststring DefaultInputModes { get; set; } // 默认输入模式public Liststring DefaultOutputModes { get; set; }// 默认输出模式}复制代码在上一篇的Demo中我们在定义EchoAgent时就实现了一个GetAgentCard方法并将其注册到服务发现中最终被Client探索发现时就会以JSON格式输出给到Client复制代码public class EchoAgent{public void Attach(ITaskManager taskManager){taskManager.OnMessageReceived ProcessMessageAsync;taskManager.OnAgentCardQuery GetAgentCardAsync;}private TaskMessage ProcessMessageAsync(MessageSendParams messageSendParams, CancellationToken cancellationToken){......}private TaskAgentCard 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 }});}}复制代码与此同时在Client中也可以主动进行服务发现例如上一篇Demo中的Client示例代码// Discover agent and create clientvar cardResolver new A2ACardResolver(new Uri(https://localhost:7243/));var agentCard await cardResolver.GetAgentCardAsync();var client new A2AClient(new Uri(agentCard.Url));第二个对象Task 任务Task 是 Client 和 远程Agent 之间协作的一个概念很好理解一个Task代表一个需要完成的任务每个Task都有一个唯一的ID号它通常包含了任务状态、历史记录 和 执行结果 等信息。Task的主要具体状态有submitted, working, completed, canceled, failed 等下图展示了Task的状态机转换流。image在A2A .NET SDK中AgentTask的定义如下复制代码public class AgentTask : A2AResponse{public string Id { get; set; } // 任务 IDpublic string? ContextId { get; set; } // 上下文 IDpublic AgentTaskStatus Status { get; set; } // 任务状态public ListArtifact? Artifacts { get; set; } // 任务产出物public ListMessage? History { get; set; } // 消息历史public Dictionarystring, JsonElement? Metadata { get; set; } // 元数据}复制代码第三个对象Artifact工件 或 成果Artifact 和我们在DevOps CI/CD流水线中的Artifact即工件的概念类似它是 远程Agent执行完某个任务后生成输出的结果即远程Agent返回的结果通过一个Artifact对象输出给Client每个任务的结果可能都不一样。一个Artifact可以包含多个部分parts每个部分part可以是文本、文档、图像 等涉及纯文本、文件 和 结构化数据。image第四个对象Message消息Message 也很好理解它就是 Client 和 远程Agent 之间通信的 一个消息对象它通常包含了 指令 和 状态更新 等内容。同样的一个Message对象也可以包含多个parts用于传递如 文本、文件 或 结构化 等不同类型的内容。每个Message都有发送方设置的一个唯一的messageId且通过一些关键词如user代表Client发送的或“agent”代表服务端发送的来区分角色。在A2A .NET SDK中Message的定义如下复制代码public class Message : A2AResponse{public MessageRole Role { get; set; } // 消息角色 (User/Agent)public ListPart Parts { get; set; } // 消息部分public string? MessageId { get; set; } // 消息 IDpublic string? TaskId { get; set; } // 关联任务 IDpublic string? ContextId { get; set; } // 上下文 IDpublic Dictionarystring, JsonElement? Metadata { get; set; } // 元数据}复制代码A2A协议的工作流程这里我们来通过一个简单的例子看看A2A协议的 请求-响应 工作流程是怎么样的。例如有这样一个场景“招聘XX岗位候选人搜寻”Step1用户在统一界面下向Client假设它也是一个Agent发送一个请求消息“请帮我寻找一个XX岗位的候选人”。Step2Client将用户的请求消息进行封装并根据岗位需求依次调用一些远程Agent如 简历检索Agent、技能筛选Agent 等等。例如下面的请求示例展示了Client在检索了5位候选人简历之后通过A2A协议向远端技能筛选Agent发送的任务请求复制代码{jsonrpc: 2.0,id: 1,method: tasks/send,params: {id: de38c76d-d54c-436c-8b9f-4c2703648d64,message: {role: user,parts: [{type: text,text: 请分析下面5位候选人是否符合岗位需求并推荐最佳面试人选。}]},metadata: {}}}复制代码Step3各个远端Agent执行各自的任务并返回给Client对应的Artifact对象结果如候选人名单等然后再由Client进行汇总和展示。复制代码{jsonrpc: 2.0,id: 1,result: {id: de38c76d-d54c-436c-8b9f-4c2703648d64,sessionId: c295ea44-7543-4f78-b524-7a38915ad6e4,status: {state: completed},artifacts: [{name: result,parts: [{type: text,text: 第三位候选人最符合你的需求!建议安排面试。}]}],metadata: {}}}复制代码Step4后续Client可以陆续调用其他远端Agent如 面试安排Agent、背景调查Agent等完成端到端的自动化招聘流程。那么该场景的整个工作流程便如下图所示image除此之外实际应用案例中通常是A2A与MCP两个协议一起使用形成更广的应用范围。例如下图展示了一个汽车维修店的场景店长智能体 和 机械师智能体 通过A2A协议完成任务移交hand-off店长可以处理常见问题但机械师可以解决技术难题。机械师智能体再通过MCP协议完成内部工具使用完成具体任务还可以通过A2A协议和零件供应商Agent完成外部协作。