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/graph agent和图紧密相关,可以认为agent是一种既定的"图"形,开发人员可以使用graph底层api直接构建graph,使用agent获得既定的图形,简化agent的开发

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

RAG 检索增强生成

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

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

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

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

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

下面介绍几个常用的hook

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

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

InterruptionHook InterruptionHook在agent层实现该功能,无需到底层的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