A2A(Agent-to-Agent)

agentscope-extensions-a2a 实现了 A2A 协议,包含两个子模块:

  • agentscope-extensions-a2a-client:把一个远端 A2A Agent 包装成本地 Agent,可以直接 agent.call(...)

  • agentscope-extensions-a2a-server:把本地 ReActAgent 暴露成 A2A Server。

两个模块完全独立,可以单用其一。

客户端:调用远端 A2A Agent

添加依赖

<dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-extensions-a2a-client</artifactId>
    <version>${agentscope.version}</version>
</dependency>

直接传入 AgentCard

import io.a2a.spec.AgentCard;
import io.agentscope.core.a2a.agent.A2aAgent;

AgentCard card = AgentCard.builder()
    .name("remote-translator")
    .url("http://other-service:8080")
    // ...
    .build();

A2aAgent remote = A2aAgent.builder()
    .name("remote-translator")
    .agentCard(card)
    .build();

Msg result = remote.call(new UserMessage("Translate to English: 你好")).block();

用 well-known 自动获取 AgentCard

import io.agentscope.core.a2a.agent.card.WellKnownAgentCardResolver;

WellKnownAgentCardResolver resolver = new WellKnownAgentCardResolver(
    "http://127.0.0.1:8080",
    "/.well-known/agent-card.json",
    Map.of()
);

A2aAgent remote = A2aAgent.builder()
    .name("remote")
    .agentCardResolver(resolver)
    .build();

A2aAgentAgentBase 的子类,可以像普通 Agent 一样组合到 Pipeline、MsgHub、Subagent 中。

服务端:把 ReActAgent 暴露成 A2A Server

添加依赖

<dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-extensions-a2a-server</artifactId>
    <version>${agentscope.version}</version>
</dependency>

构建 server

import io.agentscope.core.a2a.server.AgentScopeA2aServer;
import io.agentscope.core.a2a.server.transport.jsonrpc.JsonRpcTransportProperties;

ReActAgent.Builder agentBuilder = ReActAgent.builder()
    .name("backend-agent")
    .model(model);

AgentScopeA2aServer server = AgentScopeA2aServer.builder()
    .agentBuilder(agentBuilder)
    .transportProperties(new JsonRpcTransportProperties())
    // .agentCard(customCard)
    // .agentRegistry(myRegistry)
    .build();

// 在你的 Web 框架里把请求委托给 transportWrapper
TransportWrapper wrapper = server.getTransportWrapper("JSONRPC");
// ... Spring/Quarkus controller 转发到 wrapper.handle(...)

server.postEndpointReady();   // Web 服务监听端口后再调用,触发注册等动作

AgentScopeA2aServer 本身不监听端口、不暴露 endpoint,只负责构建组件、组装请求处理链;具体监听由你的 Web 框架完成。这样可以无缝接入 Spring Boot、Quarkus、Vert.x 等。

可选组件

  • TaskStore / QueueManager:任务和事件队列存储,默认是内存实现,生产可换成持久化版本。

  • PushNotificationConfigStore / PushNotificationSender:推送通知。

  • AgentRegistry:把 AgentCard 注册到外部注册中心(如 Nacos,见 Nacos)。

Spring Boot Starter

如果你使用 Spring Boot,建议直接引入 agentscope-spring-boot-starter-a2a-server,自动装配上述 server 和控制器,详见 Spring Boot Starters