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

基于A2A协议将智能体注册到Nacos3.x

1.配置和简介Nacos3.x比Nacos2.x多了可以注册智能体的功能。配置密钥32位即可启动分为集群模式和单机模式单机模式下默认存储在derby下。2.智能体注册中心AgentScope也是自带注册中心的叫AgentScopeA2aServer。现在我们是把当前项目的注册中心改成nacos。1.通过SpringBoot以Bean的形式注册到注册中心2.手动写入注册中心好处能够自定义智能体卡片对象。通过Builder方法传入。本项目采用Nacos为注册中心。那么springBoot怎么知道我的注册中心是Nacos通过yml文件配置即可agentscope: a2a: server: enabled: true card: name: TripPlanner Agent description: 行程规划agent nacos: server-addr: localhost:8848 username: nacos password: nacos创建一个生成智能体的工具类Slf4j Service public class AgentUtils { //从配置中读取敏感资源,不能使用static Resource private Properties properties; public ReActAgent.Builder getReActAgentBuilder(String name, String description) { return ReActAgent.builder() .name(name) .description(description) .model(DashScopeChatModel.builder() //请求语言大模型的apikey .apiKey(properties.getAlibabaDashscopeKey()) //所使用的语言大模型 .modelName(properties.getModelName()) .stream(true) .build()); } public static FluxEvent streamResponse(AgentBase agent, String prompt) { return agent.stream(Msg.builder().role(MsgRole.USER) .content(List.of(TextBlock.builder().text(prompt).build())).build()); } }主管智能体在nacos上获得了智能体卡片并知道了这个智能体的功能然后就会把任务分发下去。在routeMakingAgent目录下的agent包下创建这个类注意主管智能体是不用注册到nacos的Component Slf4j public class RouteMakingAgent { Resource private AgentUtils agentUtils; Resource private BaiduMapMCP baiduMapMCP; Bean public ReActAgent getRouteMakingAgent() { //创建百度地图MCP客户端 baiduMapMCP.getBaiduMapMCP(); //初始化百度地图MCP客户端 McpClientWrapper mcpClient baiduMapMCP.initBaiduMapMCP(); ToolUtils toolUtils new ToolUtils(); //将百度地图MCP注册到工具包 Toolkit toolkit toolUtils.getToolkit(mcpClient); //打印挂载的工具 SetString toolNames toolkit.getToolNames(); log.info(); toolNames.stream().forEach( value - log.info(挂载的工具名称 value) ); log.info(); //注入到nacos return agentUtils.getReActAgentBuilder(RouteMakingAgent, 擅长路线制定规划) //工具包 .toolkit(toolkit) .build(); } }Component public class TripPlannerAgent { Resource private AgentUtils agentUtils; Resource private SuggestSightAgent suggestSightAgent; Bean public ReActAgent getTripPlannerAgent() throws Exception { /* ********************** * * 1. * AgentScope框架自带了注册中心 AgentScopeA2aServer * * 2. * AgentScope框架将智能体卡片注册到注册中心,有2种方案 * a. 通过SpringBoot, 以Bean的形式自动注入 * b. 手动写入注册中心, 主要针对于AgentScopeA2aServer * * * *********************/ Toolkit toolkit new Toolkit(); //子智能体 toolkit.registration().subAgent( suggestSightAgent::getSuggestSightAgent ).apply(); //构建skill ,将工具包和skill结合 ReActAgent.Builder builder agentUtils.getReActAgentBuilder( TripPlannerAgent, 擅长处理景点行程规划 ) //挂载工具包 .toolkit(toolkit); return builder.build(); } }写一个工具类让主管智能体去nacos发现是否有这样的智能体读取智能体卡片Slf4j public class RemoteAgentTool { Tool(description 擅长制定最优驾车路线的Agent) public void callRouteMakingAgent( ToolParam(name prompt, description 驾车的起点和终点) String prompt ) throws NacosException { log.info(); log.info(工具方法路线制定智能体...正在调用中); log.info(); A2aAgent agent A2aAgent.builder() .name(RouteMakingAgent) //必须和注册中心的智能体名字一样 .agentCardResolver( //创建 Nacos 的 AgentCardResolver new NacosAgentCardResolver(NacosUtil.getNacosClient())) .build(); prompt 调用百度地图MCP, 制定最优驾车路线: prompt; PromptUtils promptUtils new PromptUtils(); Msg userMsg promptUtils.getPrompt(prompt); log.info(); log.info(获取到的远程Agent描述 agent.getDescription()); log.info(); AgentUtils.streamResponse(agent, 调用百度地图MCP); } Tool(description 从Nacos注册中心获取行程规划Agent) public void callTripPlannerAgent() throws NacosException { A2aAgent agent A2aAgent.builder() .name(TripPlannerAgent) .agentCardResolver( //创建 Nacos 的 AgentCardResolver new NacosAgentCardResolver(NacosUtil.getNacosClient())) .build(); //远程Agent运行 agent.call().block(); } }创建一个百度地图MCP客户端Slf4j Component public class BaiduMapMCP { Resource private Properties properties; //MCP 客户端 private volatile McpClientWrapper baiduMapMCP null; //MCP 客户端初始化 private volatile boolean mcpInitialized false; public void getBaiduMapMCP() { //创建MCP客户端 baiduMapMCP McpClientBuilder.create(BaiduMap-mcp) //和MCP Server以SSE方式进行通信 .sseTransport(properties.getBaiduMapAddr()) //请求超时 .timeout(Duration.ofSeconds(120)) //异步请求 .buildAsync() .block(); } /** * * description: 初始化百度地图MCP客户端 * param : * return io.agentscope.core.tool.mcp.McpClientWrapper */ public McpClientWrapper initBaiduMapMCP() { //通过Optional判断百度MCP客户端是否为null OptionalMcpClientWrapper mcpClientWrapper Optional.ofNullable(baiduMapMCP); if(mcpClientWrapper.isPresent()) { if(!mcpInitialized) { //线程锁 synchronized (this) { if (!mcpInitialized) { try { //MCP客户端初始化, 通过阻塞线程让客户端和服务端成功建立联系。 baiduMapMCP.initialize().block(); //获取MCP服务端工具列表 if(baiduMapMCP.isInitialized()) { log.info(); log.info(百度地图MCP 客户端初始化成功); log.info(); baiduMapMCP.listTools().block().forEach(tool - { log.info(); log.info(百度地图MCP工具列表 tool.name()); log.info(); }); mcpInitializedtrue; } } catch (Exception e) { log.error(百度地图MCP客户端初始化失败: {}, e.getMessage(), e); baiduMapMCP null; } } } } } return baiduMapMCP; } }在魔塔社区配置百度地图的客户端这里使用百度地图SSE协议就用SSE通过工具包挂载到智能体上面在RouteMakingAgent的代码里面有详解具体的工具包类那么百度地图的MCP的客户端走第二个getToolkit方法这是重写的方法。public class ToolUtils { private final Toolkit toolkit; public ToolUtils() { toolkit new Toolkit(); } public Toolkit getToolkit(Object tool) { toolkit.registerTool(tool); return toolkit; } public Toolkit getToolkit(McpClientWrapper mcp) { toolkit.registerMcpClient(mcp); return toolkit; } }主管智能体会根据智能体的description的描述来分配任务所以description有两种配置方式1.yml文件配置(优先级最高)agentscope: a2a: server: enabled: true card: name: TripPlanner Agent description: 行程规划agent nacos: server-addr: localhost:8848 username: nacos password: nacosComponent public class TripPlannerAgent { Resource private AgentUtils agentUtils; Resource private SuggestSightAgent suggestSightAgent; Bean public ReActAgent getTripPlannerAgent() throws Exception { Toolkit toolkit new Toolkit(); //子智能体 toolkit.registration().subAgent( suggestSightAgent::getSuggestSightAgent ).apply(); //构建skill ,将工具包和skill结合 return agentUtils.getReActAgentBuilder( TripPlannerAgent, 擅长处理景点行程规划 //这里就是我对这个处理景点智能体的描述 ) //挂载工具包 .toolkit(toolkit) .build(); } }打开nacos可以发现还是以yml文件为主解决方法注释description即可但同时要先删除nacos已经注册的智能体卡片。

相关文章:

基于A2A协议将智能体注册到Nacos3.x

1.配置和简介Nacos3.x比Nacos2.x多了可以注册智能体的功能。配置密钥,32位即可启动分为集群模式和单机模式,单机模式下,默认存储在derby下。2.智能体注册中心:AgentScope也是自带注册中心的,叫AgentScopeA2aServer。现…...

5分钟掌握文件完整性验证:HashCalculator终极免费批量哈希计算工具指南

5分钟掌握文件完整性验证:HashCalculator终极免费批量哈希计算工具指南 【免费下载链接】HashCalculator 哈希值计算工具,批量计算/批量校验/查找重复文件/改变哈希值等,支持集成到系统右键菜单 项目地址: https://gitcode.com/gh_mirrors/…...

如何用YOLOv5实现FPS游戏智能瞄准:完整实战指南

如何用YOLOv5实现FPS游戏智能瞄准:完整实战指南 【免费下载链接】FPSAutomaticAiming 基于yolov5的FPS游戏AI。 项目地址: https://gitcode.com/gh_mirrors/fp/FPSAutomaticAiming 在竞技射击游戏中,精准瞄准是决定胜负的关键因素,而F…...

终极空洞骑士模组管理器 Lumafly:跨平台一键安装与智能依赖管理指南

终极空洞骑士模组管理器 Lumafly:跨平台一键安装与智能依赖管理指南 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly Lumafly 是一款基于 Avalonia 框…...

【C++修仙录02】筑基篇:vector 使用

嗨~大家好,这里是春栀怡铃声的博客~ “做你害怕的事,然后发现,不过如此~” 目录 创建vector 遍历方法 迭代器 reserve 扩容 resize 对size 进行改变 会加值,会减值 insert size capacity empty push_back erase swap c…...

VMnet8 的8到底是什么意思?

它的本质是:8 仅仅是一个 内部标识符 (Internal Identifier) 或 数组索引 (Array Index),用于在 VMware 的虚拟化网络栈中唯一标识 NAT 模式 对应的虚拟交换机实例。它没有任何数学、物理或协议层面的特殊含义(如端口号、版本号或二进制位&am…...

通过用量看板清晰观测Taotoken的API调用成本与消耗

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板清晰观测Taotoken的API调用成本与消耗 对于将大模型能力集成到产品中的团队而言,API调用成本是项目预算与…...

摄影老司机_给照片加边框工具

使用简单, 支持自定义主题 自定义logo 内置四个常用的logo 为什么没有佳能? 因为我没有佳能 外框和内框是什么意思? 外框就是纯色边框 内框,就是将你上传的照片复制一张,放大,作为外框 外框宽度可以自定义 摄影师署名自定义 相机型号有时候识别出来又臭又长,说的就是尼康,所以…...

如何在Windows上轻松查看和转换iPhone HEIF图片:HEIF实用工具指南

如何在Windows上轻松查看和转换iPhone HEIF图片:HEIF实用工具指南 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility HEIF Utility是一款专为Windows用户…...

终极指南:5步精通开源网页版三国杀无名杀

终极指南:5步精通开源网页版三国杀无名杀 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 想要随时随地畅玩经典的三国杀卡牌游戏吗?无名杀作为当前最受欢迎的开源网页版三国杀,让你无需下载客户端…...

洛谷-【动态规划1】动态规划的引入4

P1077 [NOIP 2012 普及组] 摆花题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花&#xff0c…...

Noto字体:全球文字系统统一渲染的技术架构与实践指南

Noto字体:全球文字系统统一渲染的技术架构与实践指南 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 技术价值摘要 字符集完整性保障:Noto字体实现了对Unicode 6.…...

C语言--day19

第十章 内存管理当./a.out 运行起来后,系统会给a.out分配一段内存区域1、code ,存放编写好的c语言代码。 只读特性,在运行期间不能修改2、data 数据段。 存储全局变量,和被static 修改的变量细分:data 数据段&#xff…...

Linux 软链接和硬链接详解:ln 命令背后的 inode 原理

Linux 软链接和硬链接详解:ln 命令背后的 inode 原理 1. 前言 Linux 中经常会看到链接文件,例如: /bin -> /usr/bin python -> python3 current -> /opt/app/releases/v2Linux 链接主要有两种: 软链接:symbol…...

实战指南:Happy Island Designer 的深度应用与优化

实战指南:Happy Island Designer 的深度应用与优化 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing)启发…...

Safe Exam Browser 虚拟化检测绕过技术深度实践

Safe Exam Browser 虚拟化检测绕过技术深度实践 【免费下载链接】safe-exam-browser-bypass A VM and display detection bypass for SEB. 项目地址: https://gitcode.com/gh_mirrors/sa/safe-exam-browser-bypass 在现代教育技术领域,Safe Exam Browser&…...

《Java 100 天进阶之路》第32篇:Java常用工具类(Objects、Collections、Arrays深入)

第32篇:Java常用工具类(Objects、Collections、Arrays深入) 📌 系列导航:《Java 100 天进阶之路》完整目录 | ⬅️ 上一篇:第31篇:Java数组详解 | ➡️ 下一篇:第33篇:Ja…...

初创团队如何借助Taotoken以低成本快速验证AI产品创意

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何借助Taotoken以低成本快速验证AI产品创意 对于资源有限的初创团队而言,验证一个AI产品创意的核心挑战往往…...

10分钟掌握D3KeyHelper:告别手酸,暗黑3游戏效率翻倍的终极指南

10分钟掌握D3KeyHelper:告别手酸,暗黑3游戏效率翻倍的终极指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否曾在《暗…...

3分钟学会:如何在浏览器中零服务器依赖将HTML转为Word文档

3分钟学会:如何在浏览器中零服务器依赖将HTML转为Word文档 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 还在为HTML内容导出Word文档而烦恼吗?html…...

024、NPU指令集架构(ISA)概述:从CISC到VLIW

024、NPU指令集架构(ISA)概述:从CISC到VLIW 去年冬天调试一块国产NPU芯片的卷积算子,跑ResNet-50前向推理,死活比理论算力低了一个数量级。抓了三天波形,最后发现是指令发射槽的冲突——两条MAC指令争同一个数据总线,硬件自动插入三个空泡周期。那一刻我盯着逻辑分析仪…...

RedisDesktopManager Windows版:3分钟掌握免费Redis可视化工具,告别命令行操作!

RedisDesktopManager Windows版:3分钟掌握免费Redis可视化工具,告别命令行操作! 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Window…...

Android Compose 图层的合成 : BlendMode

1. 图形的合成是什么 ? Compose中,图层的合成,通过BlendMode来控制 “显示谁、保留哪部分”,常用于裁剪、遮罩、图层叠加。 1.1 初始界面 Preview Composable fun MyBlendModeTest() {Box {Box(Modifier.size(100.dp).background(Color.R…...

023、深度可分离卷积:MobileNet背后的计算优化

深度可分离卷积:MobileNet背后的计算优化 一个让我加了两天班的bug 去年调试一块基于Cortex-M7的AI推理引擎,跑MobileNetV1时发现推理速度比理论计算慢了整整一个数量级。当时我盯着逻辑分析仪上的波形,CPU在卷积层卡了将近300ms——这不对劲,理论计算应该只要30ms。 排…...

Apple Silicon Mac 电池管理的终极解决方案:Battery Toolkit 完整指南

Apple Silicon Mac 电池管理的终极解决方案:Battery Toolkit 完整指南 【免费下载链接】Battery-Toolkit Control the platform power state of your Apple Silicon Mac. 项目地址: https://gitcode.com/gh_mirrors/ba/Battery-Toolkit 在当今移动办公时代&a…...

免费岛屿设计终极指南:5分钟快速掌握Happy Island Designer

免费岛屿设计终极指南:5分钟快速掌握Happy Island Designer 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Cros…...

QQ群数据采集终极教程:5分钟掌握批量抓取技巧

QQ群数据采集终极教程:5分钟掌握批量抓取技巧 【免费下载链接】QQ-Groups-Spider QQ Groups Spider(QQ 群爬虫) 项目地址: https://gitcode.com/gh_mirrors/qq/QQ-Groups-Spider 还在为手动收集QQ群信息而烦恼吗?QQ-Groups…...

Python爬虫避坑手册:10年爬取经验总结,看完再也不会被封IP

做爬虫这么多年,我见过太多新手从入门到放弃,不是因为学不会Python,而是被各种反爬机制虐得怀疑人生。 我刚入行的时候,写的第一个爬虫是爬某电商网站的商品价格。当时觉得爬虫不就是发个请求,解析个HTML吗?结果代码刚跑了5分钟,IP就被封了。我当时还傻乎乎地重启路由器…...

抖音批量下载工具:高效获取用户主页全作品的专业解决方案

抖音批量下载工具:高效获取用户主页全作品的专业解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

【独家披露】DeepSeek灰度发布SLI/SLO基线标准:99.95%可用性背后的4层验证漏斗

更多请点击: https://codechina.net 第一章:DeepSeek灰度发布策略全景图 DeepSeek模型服务的灰度发布并非简单的流量切分,而是一套融合可观测性、渐进式验证与多维熔断机制的工程化闭环体系。其核心目标是在保障线上推理稳定性的同时&#x…...