当前位置: 首页 > news >正文

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介

saa是java的ai agent框架,本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理,不仅可以指导agent的开发,更可以改造框架,增加新特性

系列内容:

系列()架构完成

系列()调用

I工具完成

II MCP

1 MCP MCP能力,工具,资源,Promptssampling,。。。;springboot自动配置完成

2分布式MCP

3 MCP security

III skills完成

系列() RAG完成

I知识库,文档读取,分块;嵌入,向量store

II检索,增强生成,模块化;混合检索,融合重排

系列()模型model模型完成

chat模型,消息,提示词,结构化输出,记忆

chat clientadvisor组件

系列() graph

I图结构,节点和边;StateGraph;外部介入

推理框架graph映射: ReActrelectionCoTPlan-And-Execute

II图编译CompiledGraph,扁平化图结构,邻接表结构

III图执行,检查点,回溯/回放,中断和恢复,容错

系列() agent及组件ReactAgentAgentLlmNodeAgentToolNode,钩子和拦截器,记忆,结构化输出

系列() MAS

I MAS模式flow模式编排器-子智能体,智能体团队;简单介绍agentic模式消息总线,共享状态;数据交接

II分布式MAS,远程通讯,负载均衡,注册发现,容错

系列() I观测:观测组件(micrometer-observation);观测点:chatClientchat模型,工具

II评估

系列() agent管理平台agent发现(a2a/nacoslocal)agent列表

提示词管理,skill管理,MCP管理;聊天ui;会话(thread)

本文分析agent和agent组件,ReactAgent,AgentLlmNode,AgentToolNode,钩子和拦截器,记忆,结构化输出

based spring ai alibaba v1.1.2.2

关键词

agent

缩写

spring ai缩写sa

spring ai alibaba本文缩写saa

参考资料

https://java2ai.com/docs/overview spring ai alibaba官网文档

https://docs.spring.io/spring-ai/reference/index.html spring ai官方文档

SAA概览

上图是saa原理源码分析场景视图,每个包对应着saa/sa组件或特性,是本文分析的目录

model大模型的封装,模型包括Chat,嵌入,audio,image等类型,其中chat模型包括,advisor组件,提示词,记忆等

agent/graphagent和图紧密相关,可以认为agent是一种既定的”图”形,开发人员可以使用graph底层api直接构建graph,使用agent获得既定的图形,简化agent的开发

外部调用(calling)工具,MCP,skills

RAG检索增强生成

MASMAS模式 flow模式 编排器-子智能体,智能体团队;数据交接

studio简易的agent管理工具,嵌入到agent,带有agent面板,列表agent;提供chat界面,用于调试agent,是开发agent的便利工具

admin管理台, agent的发布,列表,管理,执行;提示词工程,评估和数据集,观测

agent

agent = 推理框架 + 上下文 + 工具

agent是推理框架的封装,saa是flow模式,推理框架映射成图,那么saa agent可以认为是特定的图。saa的agent实现有ReactAgent,ReAct推理框架。ReactAgent可以作为通用的组件,构建其他更复杂的推理框架,复杂工作,可分成多个小任务完成,每个小任务适用思考-动作-观测的闭环。

本节分析ReactAgent,以及agent组件,包括AgentLlmNode,AgentToolNode,钩子和拦截器,记忆,结构化输出

上图是agent,agent组件类图

instruction指令,字符串属性,最终转成UserPrompt,但不是sa ChatClient的UserPrompt的替代,instruction主要用途, MAS消息交接,即前面的agent结果消息放入下一个agent的输入消息,instruction设置占位符用来做模板

AgentLlmNode/ModelInterceptorAgentLlmNode构建和初始ChatClient组件,负责大模型调用,实现了NodeActionWithConfig接口,可作为图节点。AgentLlmNode核心是构建和初始化ChatClient,其原理源码分析可参看系统-模型

ModelInterceptorAgentLlmNodes使用函数式构建大模型调用ModelCallHandler,使用函数式构建function与ModelInterceptor连成调用链

AgentToolNode/ToolInterceptor负责工具调用,实现NodeActionWithConfig接口,作为图的节点,放在AgentLlmNode后,根据大模型的返回调用工具;工具调用依赖sa 的ToolCallbackResolver和ToolCallback,关于工具调用参看 系列-调用I 工具

ToolInterceptorModelInterceptor类似,函数式构建方法构建ToolCallHandler,与ToolInterceptor连成调用链

Hookhook映射为图节点,因此可以在agent层实现图的能力,agent开发者无需到底层的图,例如,KeyStrategys设置,中断和恢复;hook在agent层和model层,适合引入和初始化组件,如,skills

下面介绍几个常用的hook

SummarizationHook使用大模型对历史对话摘要,减少提示词,避免提示词超限

SkillsAgentHook支持skills,参看系列-skills的源码原理分析

InterruptionHookagent层实现中断功能,无需到底层的graph,参看系统-graph分析中断和恢复

ReactAgent主要逻辑在图形构建,参看系列-graph I 状态图,分析图的结构;系列-graph II 编译图,分析图编译;系列-graph III执行图,分析图执行

记忆

saa提供短期记忆和长期记忆,短期记忆是graph组件的检查点组件Checkpoint,在系列-图结构介绍过,Checkpoint保存全局的状态,支持多轮记忆,支持中断回复,容错。

长期记忆是Store组件,主要是agent使用,存取用户的profile。

另外,spring ai的记忆组件,ChatMomery在系列-模型分析

示例

下面示例组合多个ReactAgent实现复杂的场景:竞品分析报告生成智能体”

业务场景:分析一款新产品,例如“c909公务机”,评估其产品力,整个流水线包含以下步骤:

  1. 研究agent:思考如何查资料 ->动作(调用搜索工具) ->观测(获取原始数据)
  2. 起草agent:思考如何写文章 ->动作(撰写初稿) ->观测(生成草稿)。
  3. 主编agent:思考草稿质量 ->动作(审阅打分) ->观测(输出反馈)。如果打分不及格,工作流会触发循环,将反馈交还给起草专家重新思考。

整体使用SequentialAgent,研究 -> (起草 <->反思)起草<->反思使用LoopAgent

上图构建3个角色agent,研究agent使用modelscope的必应搜索MCP服务

上图flow agent构建,整合角色agent

上图是整个agent映射图

测试:输入 "c909公务机"

研究agent搜索c909产品资料

起草Agent使用资料,赞写产品研究报告

主编Agent审核报告,同意在审核意见写入APPROVED,循环结束,否则审核意见回到起草agent,考虑审核意见重写报告

总结:研究agent、起草Agent 和 主编Agent 是 ReactAgent,各自的节点内部经历完整的 Thought(思考) -> Action(调用工具/生成文本) -> Observation(获取结果) 循环,ReactAgent是组成复杂agent的通用组件。

NEXT

MAS MAS模式,数据交接;分布式MAS

http://www.jsqmd.com/news/1099076/

相关文章:

  • [C++]内存管理:串顺序存储的内存回收
  • 移动端游戏功耗测试实战:电流、功率、亮度和场景对比
  • ShaderGlass:如何在Windows桌面上实时运行GPU着色器的完整指南
  • 足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建
  • 企业 GEO 优化完整应用场景
  • 抖音内容监控助手:告别手动刷新,让优质内容主动找你
  • Vue3+ECharts使用渐变堆叠面积图实现图例横向滚动,超出出现滚动条,组件抽离复用,包含图表自适应窗口大小 - 附完整示例
  • 【终章】从靶机到职场:如何写出一份让企业买单的渗透测试报告?
  • MySQL从入门到精通:数据库设计、索引优化与事务隔离实战指南
  • 多目标机动协同:释放网联自动驾驶中的协同潜力
  • 3步实现Photoshop与AI绘图的无缝融合:SD-PPP插件完全指南
  • 学长真实分享|点餐平台网站全套源码+论文,餐饮类课设毕设稳妥选题!
  • 计算机毕业设计之沧州师范学院学生旅游攻略分享平台的设计与实现
  • 【每天认识一个国家 | 伊朗】
  • 销售KPI怎么设计?这套绩效指标体系直接套用
  • 壮志难酬 李昂
  • 如何快速掌握fullPage.js:终极全屏滚动网站开发指南
  • python基础学习-09(文件读写)
  • day4:复合函数与分段函数
  • 2026实测好用!能打通“订单-库存-财务”的S2B2C系统推荐
  • 2026年6月教育咨询公司网站搭建平台怎么选?5款热门建站工具测评对比,含零代码、AI、定制
  • 【共创季稿事节】鸿蒙原生 ArkTS 布局实现 Column + List + Navigation 协作导航 — 从列表渲染到页面切换的完整实践
  • 轮式双臂机器人型号盘点:主流产品技术参数与选型参考
  • 【C++】重载new操作符
  • ADB 设备农场自动化实践:批量安装、启动、采集与结果归档
  • 文件系统挂载
  • Java基础快速入门: 转换流与对象操作流
  • ABAQUS磨损仿真全流程复现
  • python-122-节点可视化之基于AntVx6绘制节点
  • 算法入门(一):滑动窗口 之 可变窗口-求最短 / 最长-数值计算 (Leetcode 209 / 713 / 2875 / 1004 / 2024)