随着智能体应用的广泛落地,智能体应用间的分布式部署与远程通信成为要解决的关键问题,Google 推出的 Agent2Agent(A2A)协议即面向这一落地场景:A2A 解决智能体与其他使用不同框架、部署在不同机器、不同公司的智能体进行有效通信和协作的问题。
A2A 协议定义了智能体之间通信的标准方式,使得不同框架、不同部署环境的智能体能够无缝协作。
Spring AI Alibaba 的 A2A 实现包含三个核心组件:
- A2A Server:将本地 ReactAgent 暴露为 A2A 服务
- A2A Registry:Agent 注册中心(支持 Nacos)
- A2A Discovery:Agent 发现机制(支持 Nacos)
注册与发现流程
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Agent Provider │ │ Nacos │ │ Agent Consumer │
│ (本地Agent) │────────▶│ Registry │◀────────│ (远程调用) │
└─────────────────┘ └──────────────┘ └─────────────────┘
│ │ │
│ 1. 注册 AgentCard │ │
│───────────────────────────▶│ │
│ │ │
│ │ 2. 查询 AgentCard │
│ │◀──────────────────────────│
│ │ │
│ 3. 远程调用 │ │
│◀───────────────────────────│ │
│ │ │
要将一个智能体发布为 A2A 服务,需要:
- 创建 ReactAgent Bean
- 配置 A2A Server
- (可选)配置 Nacos Registry 进行自动注册
定义本地 Agent
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class A2AAgentConfig {
@Bean(name = "dataAnalysisAgent")
public ReactAgent dataAnalysisAgent(@Qualifier("dashscopeChatModel") ChatModel chatModel) {
return ReactAgent.builder()
.name("data_analysis_agent")
.model(chatModel)
.description("专门用于数据分析和统计计算的本地智能体")
.instruction("你是一个专业的数据分析专家,擅长处理各类数据统计和分析任务。" +
"你能够理解用户的数据分析需求,提供准确的统计计算结果和专业的分析建议。")
.outputKey("messages")
.build();
}
}
配置 A2A Server
在 application.yml 中配置 A2A Server:
spring:
ai:
alibaba:
a2a:
server:
version: 1.0.0
card:
name: data_analysis_agent
description: 专门用于数据分析和统计计算的本地智能体
provider:
name: Spring AI Alibaba Documentation
organization: Spring AI Alibaba
启动应用后,A2A Server 会自动:
- 根据 ReactAgent Bean 生成 AgentCard
- 暴露 REST API 端点:
/.well-known/agent.json – AgentCard 元数据
/a2a/message – Agent 调用端点
使用 AgentCardProvider 发现 Agent
Spring AI Alibaba 支持通过 AgentCardProvider 从注册中心(如 Nacos)发现远程 Agent。
import com.alibaba.cloud.ai.graph.agent.a2a.A2aRemoteAgent;
import com.alibaba.cloud.ai.graph.agent.a2a.AgentCardProvider;
import com.alibaba.cloud.ai.graph.OverAllState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class A2AExample {
private final AgentCardProvider agentCardProvider;
@Autowired
public A2AExample(AgentCardProvider agentCardProvider) {
this.agentCardProvider = agentCardProvider;
}
public void callRemoteAgent() {
// 通过 AgentCardProvider 从注册中心发现 Agent
A2aRemoteAgent remote = A2aRemoteAgent.builder()
.name("data_analysis_agent")
.agentCardProvider(agentCardProvider) // 从 Nacos 自动获取 AgentCard
.description("数据分析远程代理")
.build();
// 远程调用
Optional<OverAllState> result = remote.invoke("请根据季度数据给出同比与环比分析概要。");
result.ifPresent(state -> {
System.out.println("调用成功: " + state.value("output"));
});
}
}
本文整理自 Spring AI Alibaba 官方文档《A2A 分布式智能体》:https://java2ai.com/docs/frameworks/agent-framework/advanced/a2a

AI项目博客






