找回密码
 立即注册
首页 业界区 业界 分布式智能体|A2A Agent实战

分布式智能体|A2A Agent实战

敛饺乖 5 小时前
随着智能体应用的广泛应用,智能体的分布式部署、跨网络、跨框架、跨组织调用,成为当下智能体落地急需解决的问题。针对这一痛点,Google推出了Agent2Agent(简称A2A)协议,专为智能体之间的互联互通、协同协作提供标准化的解决方案。
本文基于Spring AI Alibaba框架,使用Nacos作为注册中心,落地完整的分布式智能体方案。
整体架构:
1.png

一、Nacos注册中心安装

本次选用的Nacos版本为3.2.0,安装配置流程可参考官方文档,这里不再赘述基础安装步骤。
Nacos官方地址:https://nacos.io/
二、项目依赖引入

使用官方推荐的BOM方式进行依赖管理
  1. <dependencyManagement>
  2.     <dependencies>
  3.         <dependency>
  4.             <groupId>com.alibaba.cloud.ai</groupId>
  5.             spring-ai-alibaba-bom</artifactId>
  6.             <version>1.1.2.0</version>
  7.             <type>pom</type>
  8.             <scope>import</scope>
  9.         </dependency>
  10.         <dependency>
  11.             <groupId>org.springframework.ai</groupId>
  12.             spring-ai-bom</artifactId>
  13.             <version>1.1.2</version>
  14.             <type>pom</type>
  15.             <scope>import</scope>
  16.         </dependency>
  17.         <dependency>
  18.             <groupId>com.alibaba.cloud.ai</groupId>
  19.             spring-ai-alibaba-extensions-bom</artifactId>
  20.             <version>1.1.2.2</version>
  21.             <type>pom</type>
  22.             <scope>import</scope>
  23.         </dependency>
  24.     </dependencies>
  25. </dependencyManagement>
  26. <dependencies>
  27.                
  28.     <dependency>
  29.         <groupId>com.alibaba.cloud.ai</groupId>
  30.         spring-ai-alibaba-agent-framework</artifactId>
  31.     </dependency>
  32.    
  33.     <dependency>
  34.         <groupId>com.alibaba.cloud.ai</groupId>
  35.         spring-ai-alibaba-starter-dashscope</artifactId>
  36.     </dependency>
  37.    
  38.     <dependency>
  39.         <groupId>com.alibaba.cloud.ai</groupId>
  40.         spring-ai-alibaba-starter-a2a-nacos</artifactId>
  41.     </dependency>
  42. </dependencies>        
复制代码
三、Agent服务注册配置

完成依赖引入后,需要将自定义的智能体交由Spring容器管理,同时配置Nacos注册参数,实现智能体的自动注册。
1. 配置Bean对象

本次以讲笑话的智能体jokeAgent为例
  1. @Configuration
  2. public class A2AAgentConfig {
  3.     @Bean(name = "jokeAgent")
  4.     public ReactAgent jokeAgent() {
  5.         // 构建通义千问API对象
  6.         DashScopeApi dashScopeApi = DashScopeApi.builder()
  7.                 .apiKey(System.getenv("AliQwen_API"))
  8.                 .build();
  9.         // 初始化对话模型
  10.         DashScopeChatModel chatModel = DashScopeChatModel.builder()
  11.                 .dashScopeApi(dashScopeApi)
  12.                 .defaultOptions(DashScopeChatOptions.builder()
  13.                         .model(DashScopeChatModel.DEFAULT_MODEL_NAME)
  14.                         .temperature(0.5)
  15.                         .maxToken(1000)
  16.                         .build())
  17.                 .build();
  18.         // 创建并返回笑话智能体
  19.         return ReactAgent.builder()
  20.                 .name("jokeAgent")
  21.                 .model(chatModel)
  22.                 .description("负责讲笑话。")
  23.                 .instruction("你是一个幽默风趣、反应敏捷的笑话智能体。你的任务是根据用户的要求,讲一个轻松、健康、积极向上的短笑话。")
  24.                 .build();
  25.     }
  26. }
复制代码
2. 修改application.yml配置文件
  1. spring:
  2.   application:
  3.     name: spring-ai-alibaba-a2a-server
  4.   ai:
  5.     dashscope:
  6.       api-key: ${AliQwen_API}
  7.     alibaba:
  8.       a2a:
  9.         nacos:
  10.           server-addr: 127.0.0.1:8848
  11.           username: nacos
  12.           password: nacos
  13.           registry:
  14.             enabled: true # 启用服务注册(注册本地 Agent)
  15.         server:
  16.           version: 1.0.0
  17.           card:
  18.             name: jokeAgent  # 必须与Bean名称一致
  19.             description: 专门讲笑话的智能体
复制代码
3. 注册成功校验

启动项目后,控制台出现如下日志,即代表智能体成功注册到Nacos注册中心:
  1. Auto register agent jokeAgent into Registry Nacos[127.0.0.1:8848] successfully.
复制代码
配置成功后在Nacos Console上面可以看到智能体成功注册
2.png

四、Agent远程调用

完成服务端智能体注册后,客户端即可通过A2A协议远程调用注册好的智能体,实现分布式跨服务的智能体协作。
1. 客户端依赖准备

客户端同样需要添加上述的A2A依赖
2. 远程调用代码编写

客户端调用代码如下
  1. @RestController
  2. public class RemoteAgentController {
  3.     @Resource
  4.     private AgentCardProvider agentCardProvider;
  5.     @GetMapping("test")
  6.     public void test() throws GraphRunnerException {
  7.         // 服务发现:通过AgentCardProvider 从注册中心获取Agent
  8.         A2aRemoteAgent remoteAgent = A2aRemoteAgent.builder()
  9.                 .name("jokeAgent")
  10.                 .agentCardProvider(agentCardProvider)
  11.                 .description("可以给我讲笑话")
  12.                 .build();
  13.         Optional<OverAllState> result = remoteAgent.invoke("请给我讲一个关于小明的笑话");
  14.         result.ifPresent(state -> System.out.println(state.data().get("output")));
  15.     }
  16. }
复制代码
3. 调用效果展示

[code]哈哈,收到指令——已启动「快乐多巴胺发射器」,正在加载健康笑点模块…滴!加载完毕!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册