Spring AI A2A 协议实战:构建跨平台的 AI Agent 协作系统

Spring AI A2A 协议实战:构建跨平台的 AI Agent 协作系统

这段时间在研究 Spring AI 的最新动向,发现了一个非常有意思的方向:A2A 协议(Agent2Agent Protocol)。这是 Google 牵头搞的一个开放协议,专门解决不同 AI Agent 之间的通信问题。Spring AI 也在积极跟进,已经有了 Spring AI A2A 项目。

这篇文章,我将从实际开发的角度,聊聊 A2A 协议是什么、怎么用,以及为什么它可能是未来 AI 应用架构的关键。

为什么需要 A2A 协议

先说说背景。现在市面上各种 AI Agent 越来越多,但一个问题浮现出来:每个 Agent 都是孤岛

你用 OpenAI 的 Agent,写了一套工具和工作流,想跟 Anthropic 的 Agent 交互?对不起,没门。你用 LangChain 做的 Agent,想调用 Spring AI 做的 Agent?也不行。

这就跟早期的 HTTP 协议出现之前一样------各种私有网络各自为政,无法互联互通。A2A 协议的出现就是为了解决这个问题。

A2A 协议的核心特性

  1. Agent Discovery(Agent 发现):通过 AgentCard 机制,每个 Agent 可以公布自己的能力。其他 Agent 可以像查名片一样,发现并了解对方能做什么。

  2. 跨平台通信:基于 HTTP + JSON-RPC + SSE 标准,不依赖特定框架或云服务商。

  3. 任务协作:支持多轮对话、任务状态追踪、流式响应等企业级特性。

  4. 安全认证:内置认证机制,保证 Agent 之间的通信安全。

Spring AI A2A 项目快速入门

Spring AI A2A 是 Spring 官方出品的 A2A 协议集成项目,已经支持把 Spring AI 应用暴露为 A2A Server。

添加依赖

在 pom.xml 中添加:

groupId: org.springaicommunity

artifactId: spring-ai-a2a-server-autoconfigure

version: 0.2.0

配置 AgentCard

AgentCard 是 A2A 协议的核心,每个 Agent 都需要暴露自己的 AgentCard。

实现 AgentExecutor

AgentExecutor 是实际处理请求的核心。需要把 Spring AI 的 ChatClient 和工具整合进来。

@Bean

public AgentExecutor agentExecutor(ChatClient.Builder chatClientBuilder, WeatherTools weatherTools) {

复制代码
ChatClient chatClient = chatClientBuilder.clone()
    .defaultSystem("你是一个天气助手。使用工具来回答用户问题。")
    .defaultTools(weatherTools)
    .build();

return new DefaultAgentExecutor(chatClient, (chat, requestContext) -> {
    String userMessage = DefaultAgentExecutor.extractTextFromMessage(requestContext.getMessage());
    return chat.prompt().user(userMessage).call().content();
});

}

这样配置完成后,你的 Spring AI 应用就变成了一个标准的 A2A Server:

  • POST / - 处理 JSON-RPC sendMessage 请求
  • GET /.well-known/agent-card.json - AgentCard(标准 A2A 路径)
  • GET /card - AgentCard(备用路径)

其他 Agent 可以通过这些端点发现你的能力并发送任务。

Agent Client:调用远程 Agent

A2A 协议是双向的。你可以作为 Client 调用其他 Agent。典型的场景是:一个主机 Agent 协调多个专业 Agent。

1. 配置远程 Agent 地址

在配置文件中指定远程 Agent 的地址:

remote.agents.urls=http://localhost:10001/weather/,http://localhost:10002/travel/

2. 实现远程调用

@Service

public class RemoteAgentService {

复制代码
private final Map<String, AgentCard> agentCards = new HashMap<>();

public RemoteAgentService(@Value("${remote.agents.urls}") List<String> agentUrls) {
    for (String url : agentUrls) {
        String path = new URI(url).getPath();
        AgentCard card = A2A.getAgentCard(url, path + ".well-known/agent-card.json", null);
        this.agentCards.put(card.name(), card);
    }
}

@Tool(description = "发送任务到远程 Agent")
public String sendMessage(String agentName, String task) {
    AgentCard agentCard = this.agentCards.get(agentName);
    Message message = new Message.Builder()
        .role(Message.Role.USER)
        .parts(List.of(new TextPart(task, null)))
        .build();

    Client client = Client.builder(agentCard)
        .clientConfig(new ClientConfig.Builder()
            .setAcceptedOutputModes(List.of("text"))
            .build())
        .withTransport(JSONRPCTransport.class, new JSONRPCTransportConfig())
        .build();

    return client.sendMessage(message).get(60, TimeUnit.SECONDS);
}

}

这样就实现了 Agent 之间的互相调用。

实际应用场景

场景一:多 Agent 协作

一个主 Agent 协调多个专业 Agent:

  • 旅行助手 Agent:协调酒店、天气、交通三个子 Agent
  • 客服机器人:路由到不同领域的专业 Agent
  • 代码审查助手:调用代码分析、漏洞扫描、性能检测等多个 Agent

场景二:企业级工作流

不同部门部署的 Agent 可以互相协作:

  • HR 系统的 Agent 与财务系统的 Agent 交互
  • 订单系统的 Agent 与物流系统的 Agent 交互
  • 每个部门可以独立开发和部署自己的 Agent,通过 A2A 协议互联

场景三:跨平台集成

不限制技术栈:

  • Spring AI 开发的 Agent 可以调用 LangChain 开发的 Agent
  • 本地部署的 Agent 可以调用云端的 Agent
  • 私有 Agent 可以与公开的 Agent 市场对接

写在最后

A2A 协议目前还在快速发展中,Spring AI A2A 项目也还在早期版本。但这个方向值得重点关注。

有几个建议:

  1. 从小处着手:先用一个简单的场景体验 A2A 协议,比如两个 Agent 之间的简单对话

  2. 关注协议演进:A2A 协议更新很快,建议关注官方 GitHub 和 Spring AI 的更新

  3. 安全第一:生产环境使用时要做好认证和授权,目前版本支持基本的认证机制

  4. 保持简单:不要过度设计 Agent 协作,工作流能解决的问题不要用 A2A

相关资源:

相关推荐
_MyFavorite_4 小时前
JAVA重点基础、进阶知识及易错点总结(28)接口默认方法与静态方法
java·开发语言·windows
Alvin千里无风4 小时前
在 Ubuntu 上从源码安装 Nanobot:轻量级 AI 助手完整指南
linux·人工智能·ubuntu
环黄金线HHJX.4 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro4 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
helx825 小时前
SpringBoot中自定义Starter
java·spring boot·后端
_MyFavorite_5 小时前
JAVA重点基础、进阶知识及易错点总结(31)设计模式基础(单例、工厂)
java·开发语言·设计模式
悦来客栈的老板5 小时前
AI逆向|猿人学逆向反混淆练习平台第七题加密分析
人工智能
KOYUELEC光与电子努力加油5 小时前
JAE日本航空端子推出支持自走式机器人的自主充电功能浮动式连接器“DW15系列“方案与应用
服务器·人工智能·机器人·无人机
萤火阳光5 小时前
13|自定义 Skill 创作:打造专属自动化利器
人工智能
ILYT NCTR5 小时前
SpringSecurity 实现token 认证
java