Spring AI Alibaba 项目源码学习(九)-其他继承BaseAgent

news/2025/11/16 14:38:40/文章来源:https://www.cnblogs.com/wasp520/p/19228136

其他继承BaseAgent 实现分析

请关注微信公众号:阿呆-bot

概述

本文档分析 Spring AI Alibaba Agent Framework 中除 ReactAgent 和 FlowAgent 之外的其他 BaseAgent 实现,主要包括 A2aRemoteAgent(Agent-to-Agent 远程调用)的实现机制。

入口类说明

A2aRemoteAgent - Agent-to-Agent 远程调用

A2aRemoteAgent 实现了 Agent 之间的远程调用能力,支持分布式 Agent 部署和调用。

核心职责

  • 封装远程 Agent 的调用接口
  • 管理 AgentCard(Agent 卡片信息)
  • 支持流式调用
  • 支持状态共享

关键代码

public class A2aRemoteAgent extends BaseAgent {Logger logger = Logger.getLogger(A2aRemoteAgent.class.getName());private final AgentCardWrapper agentCard;private KeyStrategyFactory keyStrategyFactory;private String instruction;private boolean streaming;private boolean shareState;// Private constructor for Builder patternprivate A2aRemoteAgent(Builder builder) throws GraphStateException {super(builder.name, builder.description, builder.includeContents, builder.returnReasoningContents, builder.outputKey, builder.outputKeyStrategy);this.agentCard = builder.agentCard;this.keyStrategyFactory = builder.keyStrategyFactory;this.compileConfig = builder.compileConfig;this.includeContents = builder.includeContents;this.streaming = builder.streaming;this.instruction = builder.instruction;this.shareState = builder.shareState;}@Overrideprotected StateGraph initGraph() throws GraphStateException {if (keyStrategyFactory == null) {this.keyStrategyFactory = () -> {HashMap<String, KeyStrategy> keyStrategyHashMap = new HashMap<>();keyStrategyHashMap.put("messages", new AppendStrategy());return keyStrategyHashMap;};}StateGraph graph = new StateGraph(name, this.keyStrategyFactory);graph.addNode("A2aNode", AsyncNodeActionWithConfig.node_async(new A2aNodeActionWithConfig(agentCard, includeContents, outputKey, instruction, streaming)));graph.addEdge(StateGraph.START, "A2aNode");graph.addEdge("A2aNode", StateGraph.END);return graph;}@Overridepublic ScheduledAgentTask schedule(ScheduleConfig scheduleConfig) throws GraphStateException {throw new UnsupportedOperationException("A2aRemoteAgent has not support schedule.");}public static Builder builder() {return new Builder();}@Overridepublic Node asNode(boolean includeContents, boolean returnReasoningContents, String outputKeyToParent) {return new A2aRemoteAgentNode(this.name, includeContents, returnReasoningContents, outputKeyToParent, this.instruction, this.agentCard, this.streaming, this.shareState, this.getAndCompileGraph());}

关键特性

  • AgentCard:封装远程 Agent 的元数据(名称、描述、端点等)
  • 流式支持:支持流式调用远程 Agent
  • 状态共享:支持与远程 Agent 共享状态
  • 指令传递:支持向远程 Agent 传递指令

A2aNodeActionWithConfig - 远程调用节点动作

A2aNodeActionWithConfig 是执行远程 Agent 调用的节点动作。

关键代码

@Overridepublic Map<String, Object> apply(OverAllState state, RunnableConfig config) throws Exception {// Extract messages from stateList<Message> messages = (List<Message>) state.value("messages").orElseThrow();// Prepare request for remote agentAgentRequest request = AgentRequest.builder().messages(messages).instruction(instruction).shareState(shareState ? state.data() : null).build();// Call remote agentAgentResponse response;if (streaming) {// Handle streaming responseresponse = agentCard.callStreaming(request);} else {// Handle non-streaming responseresponse = agentCard.call(request);}// Update state with responseMap<String, Object> updatedState = new HashMap<>();if (includeContents) {updatedState.put("messages", response.getMessages());}if (outputKey != null) {updatedState.put(outputKey, response.getOutput());}return updatedState;}

AgentCardProvider - Agent 卡片提供者

AgentCardProvider 提供 Agent 卡片的获取能力,支持按名称查找或获取默认卡片。

关键代码

public interface AgentCardProvider {/*** Get agent card by name.* @param name agent name* @return agent card*/AgentCard getAgentCard(String name);/*** Get default agent card.* @return agent card*/AgentCard getAgentCard();/*** Check if provider supports getting agent card by name.* @return true if supports*/boolean supportGetAgentCardByName();
}

关键类关系

以下 PlantUML 类图展示了 A2aRemoteAgent 的类关系:

image.png

关键流程

以下 PlantUML 时序图展示了 A2aRemoteAgent 的调用流程:
image.png

实现关键点说明

1. AgentCard 机制

AgentCard 封装了远程 Agent 的元数据:

  • 名称和描述:Agent 的标识信息
  • 端点信息:远程调用的地址
  • 能力描述:支持的功能(如流式调用)
  • 协议信息:调用协议(HTTP、gRPC 等)

2. 状态共享机制

A2aRemoteAgent 支持两种状态共享模式:

  • 共享状态(shareState=true):将当前状态传递给远程 Agent
  • 隔离状态(shareState=false):只传递消息,不共享状态

3. 流式调用支持

支持流式调用远程 Agent:

  • 通过 streaming 标志控制
  • 使用 callStreaming() 方法
  • 支持流式响应处理

4. 节点转换

A2aRemoteAgent 通过 asNode() 方法转换为节点:

  • 创建 A2aRemoteAgentNode
  • 实现 SubGraphNode 接口
  • 支持嵌套在 FlowAgent 中使用

5. Builder 模式

使用 Builder 模式构建 A2aRemoteAgent:

  • 支持通过 AgentCardAgentCardProvider 配置
  • 支持参数验证
  • 支持链式调用

总结说明

核心设计理念

  1. 远程调用抽象:通过 AgentCard 抽象远程 Agent 的调用接口
  2. 状态管理:支持状态共享和隔离两种模式
  3. 流式支持:支持流式调用提高响应性
  4. 可组合性:通过 asNode() 支持与其他 Agent 组合

关键优势

  • 分布式支持:支持分布式 Agent 部署和调用
  • 灵活性:支持多种调用模式和状态共享策略
  • 可扩展性:通过 AgentCardProvider 支持动态 Agent 发现
  • 一致性:与本地 Agent 使用相同的接口

使用场景

  • 分布式系统:Agent 部署在不同节点
  • 微服务架构:Agent 作为微服务提供能力
  • Agent 编排:在 FlowAgent 中调用远程 Agent
  • 服务发现:通过 AgentCardProvider 动态发现 Agent

A2aRemoteAgent 为 Agent Framework 提供了分布式调用能力,使开发者能够构建跨节点的多 Agent 系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程状态 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mybatis_generate_demo

UserInfoMapperimport org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository;import java.util.List;@Repository public interface UserInfoMapper {/*** 新增 1 条记录,若成功则…

换歌换歌

后天换歌换成下面三首歌的一首行不行(哪首会的人比较多) 我用什么把你留住 我的纸飞机 像风一样

GaN 器件第三象限导通特性

GaN 器件第三象限导通特性2025-11-16 14:35 斑鸠,一生。 阅读(0) 评论(0) 收藏 举报 一、原理The condition to turn on the channel for reverse conduction is the gate to drain voltage Vgd is higher than t…

CMake+MinGW+vcpkg项目引入三方库的两种方式(手动路径,vcpkg)

搬运自自己的CSDN博客:https://blog.csdn.net/Tracker647/article/details/142070768 原帖日期2024年9月9日。 接到个新项目,用到很多三方库,从对接的同事那了解到vcpkg这个工具,周末试用了下,确实很方便,以前需…

Spring AI Alibaba 项目源码学习(八)-Flow Agent 分析

Flow Agent 分析 请关注微信公众号:阿呆-bot 概述 本文档分析 Spring AI Alibaba Agent Framework 中的 Flow Agent 系列,包括 FlowAgent 基类、SequentialAgent、ParallelAgent、LoopAgent 和 LlmRoutingAgent 的具…

Why did Hitler become a greater Napoleon?

Because Napoleon never attached any meanings to the cross or inborn ability.

vcpkg交叉编译

搬运自自己的CSDN博客:https://blog.csdn.net/Tracker647/article/details/149149713 原帖日期2025年7月6日。 前言 维护的一个项目,由于特殊的技术原因,需要横跨Windows, Linux, ARMLinux三个平台去维护,因此每次…

详细介绍:什么是机械设备制造ERP?哲霖软件如何助力企业实现降本增效?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

python -m pip install 就行 我pip install就不行?

python -m pip install 就行 我pip install就不行?离奇现象 直接输入pip相关命令用不了,返回如下信息: Fatal error in launcher: Unable to create process using "C:\Users\86178\AppData\Local\Programs\Py…

Personalized QRCode - 个性化自定义二维码生成器

Personalized QRCode - 个性化自定义二维码生成器. 个性化二维码生成器 使用您自己的图片创建独特的个性化二维码 几秒钟内生成美观的个性化二维码。 上传您的图片,自定义您的二维码,与世界分享。 https://qrcode.ch…

对“机器人VCU”进行一个详细、架构的讲解。

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Qt编写28181推流分发服务/统计访问数量/无人观看超时关闭/等待重新点播/复用点播

一、前言说明 本以为之前写的国标GB28181服务端程序已经够完善了,不料又来个新的需求,需要配合流媒体服务程序进行处理,本着给钱就干的原则,把mediamtx和zlm的http请求接口研究了下,需求主要两个,一个是需要统计…

20232407 2025-2026-1 《网络与系统攻防技术》 实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息 (2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置 (3)使用nmap开源软件…

实现string类

#pragma once#include <cstddef> #include <cstring> #include <algorithm> #include <stdexcept>// namespace M { class string { public:static const size_t s_min_capacity; private:cha…

实用指南:Vue 实例生命周期

实用指南:Vue 实例生命周期2025-11-16 14:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

React Native创建AndroidIOS流程完整指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ducky - BPMN 工作流管理系统

Ducky - BPMN 工作流管理系统 https://github.com/fanqingsong/ducky/tree/main 一个基于 FastAPI 和 SpiffWorkflow 的 BPMN 2.0 工作流管理系统,提供完整的流程定义管理、实例执行和可视化功能。功能特性核心功能✅…

图论建模问题

本文将不定期更新图论建模 行列二分图 给一个二维平面,建立二分图,左部点编号为横坐标,右部点编号为纵坐标,平面上一个点即为二分图上一条边。 CF1140F Extending Set of Points 建立行列二分图,把每一个点看成一…

python多进程通信中的Queue、SimpleQueue、Pipe

python多进程通信中的Queue、SimpleQueue、Pipepython多进程通信中的Queue、SimpleQueue、Pipepython多进程通信中的Queue、SimpleQueue、PipeQueue 多进程中的Queue的底层是使用Pipe实现的,因此使用Queue进行多进程通…