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

相关资源:

相关推荐
2601_955767421 小时前
iPhone17 屏幕偏振片减配?深度解析OLED圆偏振光缺失与磁控溅射AR修复方案
大数据·人工智能·ar·护眼钢化膜·圆偏振光·#观复盾护景贴
写代码写到手抽筋8 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
wang09078 小时前
自己动手写一个spring之系列
spring
WPF工业上位机8 小时前
YXGK.FakeVM深度学习之5语义分割
人工智能·深度学习
xieliyu.8 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
落叶无情8 小时前
ICEF认知操作系统:四类约束全维度全覆盖,是全谱系系统化约束体系
人工智能
碳基硅坊8 小时前
Gemma 4 12B 让AI创作更私密更高效
人工智能·gemma-4-12b
weixin_468466858 小时前
大模型新手入门与实战指南
人工智能·深度学习·ai·大模型
装不满的克莱因瓶9 小时前
掌握 RNN 与 LSTM 模型结构
人工智能·python·rnn·深度学习·神经网络·ai·lstm