分布式智能体|A2A Agent实战

张开发
2026/4/9 12:52:51 15 分钟阅读

分享文章

分布式智能体|A2A Agent实战
随着智能体应用的广泛应用智能体的分布式部署、跨网络、跨框架、跨组织调用成为当下智能体落地急需解决的问题。针对这一痛点Google推出了Agent2Agent简称A2A协议专为智能体之间的互联互通、协同协作提供标准化的解决方案。本文基于Spring AI Alibaba框架使用Nacos作为注册中心落地完整的分布式智能体方案。整体架构一、Nacos注册中心安装本次选用的Nacos版本为3.2.0安装配置流程可参考官方文档这里不再赘述基础安装步骤。Nacos官方地址https://nacos.io/二、项目依赖引入使用官方推荐的BOM方式进行依赖管理dependencyManagement dependencies dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-bom/artifactId version1.1.2.0/version typepom/type scopeimport/scope /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.1.2/version typepom/type scopeimport/scope /dependency dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-extensions-bom/artifactId version1.1.2.2/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies !-- 智能体核心框架 -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-agent-framework/artifactId /dependency !-- 通义千问AI模型依赖 -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-dashscope/artifactId /dependency !-- A2ANacos集成依赖 -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-a2a-nacos/artifactId /dependency /dependencies三、Agent服务注册配置完成依赖引入后需要将自定义的智能体交由Spring容器管理同时配置Nacos注册参数实现智能体的自动注册。1. 配置Bean对象本次以讲笑话的智能体jokeAgent为例ConfigurationpublicclassA2AAgentConfig{Bean(namejokeAgent)publicReactAgentjokeAgent(){// 构建通义千问API对象DashScopeApidashScopeApiDashScopeApi.builder().apiKey(System.getenv(AliQwen_API)).build();// 初始化对话模型DashScopeChatModelchatModelDashScopeChatModel.builder().dashScopeApi(dashScopeApi).defaultOptions(DashScopeChatOptions.builder().model(DashScopeChatModel.DEFAULT_MODEL_NAME).temperature(0.5).maxToken(1000).build()).build();// 创建并返回笑话智能体returnReactAgent.builder().name(jokeAgent).model(chatModel).description(负责讲笑话。).instruction(你是一个幽默风趣、反应敏捷的笑话智能体。你的任务是根据用户的要求讲一个轻松、健康、积极向上的短笑话。).build();}}2. 修改application.yml配置文件spring:application:name:spring-ai-alibaba-a2a-serverai:dashscope:api-key:${AliQwen_API}alibaba:a2a:nacos:server-addr:127.0.0.1:8848username:nacospassword:nacosregistry:enabled:true# 启用服务注册注册本地 Agentserver:version:1.0.0card:name:jokeAgent# 必须与Bean名称一致description:专门讲笑话的智能体3. 注册成功校验启动项目后控制台出现如下日志即代表智能体成功注册到Nacos注册中心Autoregister agent jokeAgent intoRegistryNacos[127.0.0.1:8848]successfully.配置成功后在Nacos Console上面可以看到智能体成功注册四、Agent远程调用完成服务端智能体注册后客户端即可通过A2A协议远程调用注册好的智能体实现分布式跨服务的智能体协作。1. 客户端依赖准备客户端同样需要添加上述的A2A依赖2. 远程调用代码编写客户端调用代码如下RestControllerpublicclassRemoteAgentController{ResourceprivateAgentCardProvideragentCardProvider;GetMapping(test)publicvoidtest()throwsGraphRunnerException{// 服务发现通过AgentCardProvider 从注册中心获取AgentA2aRemoteAgentremoteAgentA2aRemoteAgent.builder().name(jokeAgent).agentCardProvider(agentCardProvider).description(可以给我讲笑话).build();OptionalOverAllStateresultremoteAgent.invoke(请给我讲一个关于小明的笑话);result.ifPresent(state-System.out.println(state.data().get(output)));}}3. 调用效果展示哈哈收到指令——已启动「快乐多巴胺发射器」正在加载健康笑点模块…滴加载完毕 来一个新鲜出炉的短笑话为什么瑜伽垫从不参加辩论赛——因为它信奉**“不争、不抢、但能稳稳地托住你的人生起伏”**‍♂️✨温馨提示它还默默提醒你——深呼吸3秒肩膀放松嘴角上扬5度…这波健康buff免费续杯 需要再来一个或者想指定主题比如职场、早餐、遛狗、和Wi-Fi斗智斗勇…我库存里还有“无糖版”“低卡路里版”“含维生素C的笑果”哦 总结以上就是借助Spring AI Alibaba框架搭配Nacos注册中心基于A2A协议可以快速实现分布式智能体的服务注册与远程调用的代码啦。源码已上传GitHubhttps://github.com/Jucunqi/spring-ai-alibaba-agent.git

更多文章