分布式智能体|A2A Agent实战

随着智能体应用的广泛应用,智能体的分布式部署、跨网络、跨框架、跨组织调用,成为当下智能体落地急需解决的问题。针对这一痛点,Google推出了Agent2Agent(简称A2A)协议,专为智能体之间的互联互通、协同协作提供标准化的解决方案。

本文基于Spring AI Alibaba框架,使用Nacos作为注册中心,落地完整的分布式智能体方案。

整体架构:

一、Nacos注册中心安装

本次选用的Nacos版本为3.2.0,安装配置流程可参考官方文档,这里不再赘述基础安装步骤。

Nacos官方地址:https://nacos.io/

二、项目依赖引入

使用官方推荐的BOM方式进行依赖管理

pom 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-bom</artifactId>
            <version>1.1.2.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.1.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-extensions-bom</artifactId>
            <version>1.1.2.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
		<!-- 智能体核心框架 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-agent-framework</artifactId>
    </dependency>
    <!-- 通义千问AI模型依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
    </dependency>
    <!-- A2A+Nacos集成依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-a2a-nacos</artifactId>
    </dependency>
</dependencies>        

三、Agent服务注册配置

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

1. 配置Bean对象

本次以讲笑话的智能体jokeAgent为例

java 复制代码
@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配置文件

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注册中心:

java 复制代码
Auto register agent jokeAgent into Registry Nacos[127.0.0.1:8848] successfully.

配置成功后在Nacos Console上面可以看到智能体成功注册

四、Agent远程调用

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

1. 客户端依赖准备

客户端同样需要添加上述的A2A依赖

2. 远程调用代码编写

客户端调用代码如下

java 复制代码
@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. 调用效果展示

java 复制代码
哈哈,收到指令------已启动「快乐多巴胺发射器」,正在加载健康笑点模块...滴!加载完毕!😄

来一个新鲜出炉的短笑话:

> 为什么瑜伽垫从不参加辩论赛?  
> ------因为它信奉:**"不争、不抢、但能稳稳地托住你的人生起伏!"** 🧘‍♂️✨  
> (温馨提示:它还默默提醒你------深呼吸3秒,肩膀放松,嘴角上扬5度...这波健康buff,免费续杯!)

需要再来一个?或者想指定主题(比如职场、早餐、遛狗、和Wi-Fi斗智斗勇...)?我库存里还有"无糖版""低卡路里版""含维生素C的笑果"哦~ 😎

总结

以上就是借助Spring AI Alibaba框架搭配Nacos注册中心,基于A2A协议可以快速实现分布式智能体的服务注册与远程调用的代码啦。

源码已上传GitHub:https://github.com/Jucunqi/spring-ai-alibaba-agent.git

相关推荐
大模型真好玩1 小时前
别拿Claude Code当对话框:这6个GitHub项目让你吃透代码智能体
人工智能·agent·deepseek
sevenll071 小时前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端
深度之眼2 小时前
感觉2026年将是Agent Memory元年...
机器学习·agent
我登哥MVP2 小时前
VS Code 安装 Claude Code 并接入 DeepSeek V4 Model
人工智能·python·node.js·agent·codex·deepseek·claude code
阿川20152 小时前
智能体爆发,HPE存储以创新架构解锁混合云与AI红利
人工智能·存储·智能体·hpe
阿里-于怀2 小时前
阿里云 Agent Infra 上长出的约束基建
阿里云·云计算·agent·starops
8Qi82 小时前
Windows 系统Claude Code安装与使用笔记
windows·笔记·agent·claudecode
DO_Community3 小时前
Mythos级最强 AI 模型 Claude Fable 5 现已上线 DigitalOcean无服务器推理
人工智能·serverless·agent·ai编程·claude
Devin~Y3 小时前
大厂 Java 面试实战:从 Spring Boot 微服务到 AI RAG 音视频平台全链路解析
java·spring boot·redis·spring cloud·微服务·rag·spring ai
沉默王二3 小时前
老板:“你是怎么使用 AI 的,真能做到不手写代码?为什么 Codex 在我手里感觉是个智障。。”我:“这样,然后再这样。。”老板直接跪了。
人工智能·agent·ai编程