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();
A2aAgent 是 AgentBase 的子类,可以像普通 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。