当前位置: 首页 > news >正文

将 Docker虚拟磁盘文件ext.vhdx迁移出C盘 ,更换到D盘

潘铰泵匠A2A 即 Agent-to-Agent,它定义了三个关键的角色,它们各司其职+互相配合,支撑多个Agent的运行。

那么,都是哪几个角色呢?下面告诉你:

image

角色1:用户(User)

即终端用户(可能是人类 或 服务),需要使用Agent来完成某个任务。

角色2:客户端(Client)

一个代表用户向 远程Agent 发送请求的实体,它发送的请求是严格按照A2A协议的。它的表现形式可以是一个应用程序、服务 或 一个Agent。

例如,我们在上一篇的Demo中开发的一个控制台应用程序通过引用A2A包来向远端的Agent发送请求。

角色3:远程Agent(Remote 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",

"what's 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; } // 代理 URL

public AgentProvider? Provider { get; set; } // 提供商信息

public string Version { get; set; } // 版本信息

public AgentCapabilities Capabilities { get; set; } // 代理能力

public List Skills { get; set; } // 代理技能

public List DefaultInputModes { get; set; } // 默认输入模式

public List DefaultOutputModes { get; set; }// 默认输出模式

}

复制代码

在上一篇的Demo中,我们在定义EchoAgent时,就实现了一个GetAgentCard方法,并将其注册到服务发现中最终被Client探索发现时就会以JSON格式输出给到Client:

复制代码

public class EchoAgent

{

public void Attach(ITaskManager taskManager)

{

taskManager.OnMessageReceived = ProcessMessageAsync;

taskManager.OnAgentCardQuery = GetAgentCardAsync;

}

private Task ProcessMessageAsync(MessageSendParams messageSendParams, CancellationToken cancellationToken)

{

......

}

private Task 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 client

var 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; } // 任务 ID

public string? ContextId { get; set; } // 上下文 ID

public AgentTaskStatus Status { get; set; } // 任务状态

public List? Artifacts { get; set; } // 任务产出物

public List? History { get; set; } // 消息历史

public Dictionary? 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 List Parts { get; set; } // 消息部分

public string? MessageId { get; set; } // 消息 ID

public string? TaskId { get; set; } // 关联任务 ID

public string? ContextId { get; set; } // 上下文 ID

public Dictionary? Metadata { get; set; } // 元数据

}

复制代码

A2A协议的工作流程

这里我们来通过一个简单的例子看看A2A协议的 请求-响应 工作流程是怎么样的。

例如,有这样一个场景“招聘XX岗位候选人搜寻”:

Step1,用户在统一界面下向Client(假设它也是一个Agent)发送一个请求消息“请帮我寻找一个XX岗位的候选人”。

Step2,Client将用户的请求消息进行封装,并根据岗位需求依次调用一些远程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完成外部协作。

image

由此可见,其实在企业客服 或 售后中心 等场景中,A2A协议可以被广泛应用于多Agent协作。

小结

本文介绍了A2A的三个主要角色(User、Client 和 Remote Agent)以及 四个核心对象(Agent Card、Task、Artifact 和 Message),并通过简单的例子介绍了A2A协议的典型工作流程,相信对于你加深了解A2A协议会有帮助。

下一篇,我们将以一个旅行规划的应用场景,结合LLM大模型来实现一个A2A协议的案例,它会涉及一个Client 和 三个Remote Agent,是一个拿来练手的好案例。

参考资料

http://www.dtcms.com/a/598464.html

相关文章:

  • Linux--进程间通信(2)
  • 烟台品牌网站建设求职
  • byd APP逆向(AES白盒分析)
  • QueryWrapper 与 LambdaQueryWrapper 深度解析:优劣对比、选择指南及用户表实战案例
  • 【完整源码+数据集】车牌数据集,yolov8车牌检测数据集 7811 张,汽车车牌识别数据集,智慧交通汽车车牌识别系统实战教程
  • 婚庆网站策划便捷网站建设价格
  • 视频+教程 | 三位一体:MOI 数据源 + MO 向量存储 + Dify 应用层,构建企业级 RAG
  • 侨联网站建设网站开发实训报告总结2021
  • 怎么做会员积分网站房地产开发资质
  • 智能服务管理的临界点:当AI成为ITSM的“神经中枢”
  • 太原制作网站的公司百度云服务器做asp网站
  • 学途-人工智能机器学习课程
  • 什么是网站内页wordpress如何上传到服务器
  • 网站 宣传方案淘宝店铺 发布网站建设
  • 论find -group和-gid的区别
  • Spring Cloud中分布式事务的监控和日志使用小窍门
  • LeetCode(python)——560.和为k的子数组
  • cae毕业设计代做网站淮北论坛招聘最新消息兼职
  • 今天我们学习zabbix网络设备监控的配置
  • NRBO-XGBoost+SHAP分析+新数据预测!机器学习可解释分析不在发愁!提供9种混沌映射方法(tent、chebyshev、singer等)
  • 两学一做教育网站家政服务app软件开发
  • 网站建设必学课程企业文化包括哪些内容
  • Poco: 一个功能丰富、易于使用的跨平台C++开发框架(FTP上传下载、断点续传等)
  • 网站建设学什么专业网络营销的发展前景
  • 做公众号首图网站wordpress禁止访问模版页面
  • 如何更新Dev-C++到最新版本?
  • 传统文化信息|文化管理|基于java的传统文化信息管理系统设计与实现(源码+数据库+文档)
  • 【题解】[GESP样题 七级] 迷宫统计
  • 丰台广州网站建设tomcat 建网站
  • 基于 GEE 利用 WorldPop 数据集批量导出 100 米分辨率人口影像数据与时序分析