ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件
简介
saa是java的ai agent框架,本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理,不仅可以指导agent的开发,更可以改造框架,增加新特性
系列内容:
系列(一)架构完成
系列(三)调用
I工具完成
II MCP
1 MCP MCP能力,工具,资源,Prompts,sampling,。。。;springboot自动配置完成
2分布式MCP
3 MCP security
III skills完成
系列(四) RAG完成
I知识库,文档读取,分块;嵌入,向量store
II检索,增强生成,模块化;混合检索,融合重排
系列(二)模型model模型完成
chat模型,消息,提示词,结构化输出,记忆
chat client,advisor组件
系列(五) graph
I图结构,节点和边;StateGraph;外部介入
推理框架graph映射: ReAct,relection,CoT,Plan-And-Execute
II图编译CompiledGraph,扁平化图结构,邻接表结构
III图执行,检查点,回溯/回放,中断和恢复,容错
系列(六) agent及组件ReactAgent,AgentLlmNode,AgentToolNode,钩子和拦截器,记忆,结构化输出
系列(七) MAS
I MAS模式flow模式编排器-子智能体,智能体团队;简单介绍agentic模式消息总线,共享状态;数据交接
II分布式MAS,远程通讯,负载均衡,注册发现,容错
系列(八) I观测:观测组件(micrometer-observation);观测点:chatClient,chat模型,工具
II评估
系列(九) agent管理平台agent发现(a2a/nacos,local),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 工具
ToolInterceptor与ModelInterceptor类似,函数式构建方法构建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公务机”,评估其产品力,整个流水线包含以下步骤:
- 研究agent:思考如何查资料 ->动作(调用搜索工具) ->观测(获取原始数据)
- 起草agent:思考如何写文章 ->动作(撰写初稿) ->观测(生成草稿)。
- 主编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
