FFmpeg开发笔记(八十四)使用国产的librestreaming实现RTMP直播
揖踊粗肪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 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 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 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; } // 消息 IDpublic string? TaskId { get; set; } // 关联任务 IDpublic string? ContextId { get; set; } // 上下文 IDpublic Dictionary? 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完成外部协作。image由此可见其实在企业客服 或 售后中心 等场景中A2A协议可以被广泛应用于多Agent协作。小结本文介绍了A2A的三个主要角色User、Client 和 Remote Agent以及 四个核心对象Agent Card、Task、Artifact 和 Message并通过简单的例子介绍了A2A协议的典型工作流程相信对于你加深了解A2A协议会有帮助。下一篇我们将以一个旅行规划的应用场景结合LLM大模型来实现一个A2A协议的案例它会涉及一个Client 和 三个Remote Agent是一个拿来练手的好案例。参考资料

相关新闻

LK2.两数相加

LK2.两数相加

一、题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以…

2026/5/17 11:55:47 阅读更多 →
Flutter 三方库 test_api 的鸿蒙化适配指南 - 实现具备底层测试驱动与自定义匹配器扩展的质量基石架构、支持端侧测试骨架深度定制实战

Flutter 三方库 test_api 的鸿蒙化适配指南 - 实现具备底层测试驱动与自定义匹配器扩展的质量基石架构、支持端侧测试骨架深度定制实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 test_api 的鸿蒙化适配指南 - 实现具备底层测试驱动与自定义匹配器扩展的质量基石架构、支持端侧测试骨架深度定制实战 前言 在进行 Flutter for OpenHarmony 的大规模测试…

2026/5/17 11:55:47 阅读更多 →
汇川中型PLC分期付款程序:PLC时间读取与设置、随机滚动码解加密及触摸屏模板程序

汇川中型PLC分期付款程序:PLC时间读取与设置、随机滚动码解加密及触摸屏模板程序

汇川AM中型PLC程序,汇川IT7000系列触摸屏程序 自己写的设备分期付款程序,汇川中型PLC_分期付款程序 1、包含PLC时间的读取与设置。 2、使用随机滚动码计算解加密(3天、7天、1个月、三个月、半年、一年、永久解除灵活设置)。 3、包含标准的触摸…

2026/5/17 11:55:43 阅读更多 →

最新新闻

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案 1. 问题描述 在自己动手用 Anthropic Messages API 搭建 Agent Harness、实现多轮工具调用循环时,很多人会在某一次请求时遇到这样的 400 错误: {"type": "error&qu…

2026/7/3 22:13:56 阅读更多 →
Linux下fastai第一课完整实操:PyTorch+CUDA+Jupyter环境从零搭建

Linux下fastai第一课完整实操:PyTorch+CUDA+Jupyter环境从零搭建

1. 项目概述:在Linux系统上扎实走完fastai第一课的完整实操路径我带过不少从零开始学深度学习的朋友,发现一个特别普遍的现象:很多人卡在“环境跑不起来”这一步,不是报错就是版本冲突,最后对着Jupyter Notebook里那一…

2026/7/3 22:11:56 阅读更多 →
双检测时代论文修改怎么选?10 款主流降重复降 AIGC 工具分层测评,paperxie 领跑定稿适配赛道

双检测时代论文修改怎么选?10 款主流降重复降 AIGC 工具分层测评,paperxie 领跑定稿适配赛道

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图降重复率 - PaperXie智能写作PaperXie免费论文查重检测-首款免费论文检测软件,为毕业生提供专业的论文重复率检测、论文降重、Aigc检测、智能排版 、论文写作等一站式服务。https://www.paperxie.c…

2026/7/3 22:11:56 阅读更多 →
嵌入式系统多电压轨供电方案设计与优化

嵌入式系统多电压轨供电方案设计与优化

1. 为什么需要三重降压转换方案在嵌入式系统和工业控制领域,多电压轨供电已经成为标准需求。现代电子设备通常需要3.3V给主控芯片供电、1.8V供给DDR内存、5V驱动外围接口,传统的单路降压方案需要多个独立电源模块,不仅占用PCB面积&#xff0c…

2026/7/3 22:09:56 阅读更多 →
IDM永久激活终极指南:3分钟免费解锁下载神器完整教程

IDM永久激活终极指南:3分钟免费解锁下载神器完整教程

IDM永久激活终极指南:3分钟免费解锁下载神器完整教程 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager(I…

2026/7/3 22:09:55 阅读更多 →
文件上传漏洞深度解析:从SPON系统漏洞复现到安全防御实践

文件上传漏洞深度解析:从SPON系统漏洞复现到安全防御实践

1. 项目概述最近在梳理一些网络设备的安全风险时,一个名为“世邦通信SPON IP网络对讲广播系统”的设备引起了我的注意。这套系统在不少园区、学校、工厂里都能见到,主要用来做背景音乐、紧急广播和对讲。它基于IP网络传输音频,听起来挺现代化…

2026/7/3 22:09:55 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻