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