新闻详情

新闻详情

首页 / 资讯中心 / 详情

ai-agent框架spring ai/alibaba源码原理分析(二) 模型,chat模型,chatclient

发布时间:2026/8/25 11:06:10
ai-agent框架spring ai/alibaba源码原理分析(二) 模型,chat模型,chatclient
简介saa是java的ai agent框架本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理不仅可以指导agent的开发更可以改造框架增加新特性系列内容系列(一) 架构 完成系列(三) 调用I 工具 完成II MCP-1 MCP MCP能力工具资源Promptssampling。。。springboot自动配置 完成-2 分布式 MCP-3 MCP securityIII skills 完成系列(四) RAG 完成I 知识库文档读取分块嵌入向量storeII 检索增强生成模块化混合检索融合重排系列(二) 模型 model模型chat模型消息提示词结构化输出记忆chat clientadvisor组件系列(五) graph 图结构节点和边StateGraphCompiledGraph图执行状态和存储推理框架graph映射: ReActrelectionCoTPlan-And-Execut系列(六) ReactAgent分析钩子和拦截器记忆结构化输出Human-in-the-loop系列(七) MASI 多agent graphflow agent; handoffs模式toolcalling模式II 分布式agentA2AAP2AP分布式多agent的graph新功能系列(八) I 观测观测组件(micrometer-observation)观测点chatClientchat模型工具(tracing)II 模型评估系列(九) agent管理平台(admin) agent发现(a2a)agent列表提示词管理会话管理skill管理MCP管理chat评估观测本文分析Chat模型包括chat model chatclient提示词advisor组件based spring ai aliba ba v1.1.2.2spring ai v1.1.2关键词Chat模型Chat Client缩写spring ai缩写saspring ai alibaba本文缩写saa参考资料概览 | Spring AI Alibaba spring ai alibaba官网文档https://docs.spring.io/spring-ai/reference/index.html spring ai官方文档组件/场景上图是saa原理源码分析场景视图每个包对应着saa/sa组件或特性是本文分析的目录model大模型的封装模型包括Chat嵌入audioimage等类型其中chat模型包括advisor组件提示词记忆等agent/graphagent和图紧密相关可以认为agent是一种既定的”图”形开发人员可以使用graph低层api直接构建graph也可以使用agent获得既定的图形简化和加快agent的开发外部调用(calling)调用可能是agent发展演变最快的部分最初的工具到mcp最近的CLIskillsRAG检索增强生成MAS多个agent协同工作每个agent有独立职能studio简易的agent管理工具嵌入到agent带有agent面板列表agent提供chat界面用于调试agent是开发agent的便利工具admin管理台 agent的发布列表管理执行提示词工程评估和数据集观测模型的模型sa提供可移植的model 设计用户可以无缝切换不同的模型提供商本节分析模型的模型上图是model的类图model分成多个类型chat图形语音翻译嵌入等有些大模型厂商实现比较多有些实现少些如deepseek只有ChatModel模型是模板类两个模板参数TReq ModelRequest类型Tres ModelResponse类型这两个类型是调用(call)模型的参数。chat模型/chat client在对话式AIChatModel及model api封装了大模型的调用Chat Client则是“交互载体”提供用户消息系统消息advisor工具等设置。ChatClient构建标准请求ChatModel转换为具体实现的格式发送给模型端模型返回生成的回复后ChatClient封装ChatReponse给用户。chat模型本节分析sa模型的设计上图ChatModel类图ChatModel封装大模型厂商的模型api起到承上启下的作用对上接收spring ai的标准请求组件如UserMessageSystemMessageChatOptionTooCallback对下转换spring ai请求的组件为大模型api要求的类型大模型返回转换为spring ai组件Chat ResponseGenerationAssistantMessageMessagesa的消息组件消息是内容的载体请求和返回都用到消息。消息有几钟类型上图只展示了AssistantMessage用于返回生成的内容还有UserMessageSystemMessageToolResponseMessage分别用于用户输入的查询agent本身配置的定义Agent的角色、职责工具返回消息Prompt提示词ModelRequest实现类携带Message集合类型是UserMessage或者SystemMessage带有ChatOption大模型请求选项ChatResponse大模型调用返回多个GenerationGeneration大模型生成结果ModelResult实现类使用AssistantMessage返回内容AssistantMessage除了返回内容还有大模型ToolCall请求总结spring ai统一的模型调用api使得agent可以无缝切换模型厂商同时spring boot支持模型特有的配置最大可能地使用模型独有的能力。chat client本节分析ChatClientChatModel暴露call方法可以不使用ChatClient直接调用大模型ChatClient的作用是用户设置大模型调用参数提供友好的api可灵活而优雅地设置大模型调用的参数。上图ChatClient类图ChatClientAutoConfiguration自动配置负责构建ChatClient.BuilderChatClient.BuilderChatClient构建器注意构建器是原型模式意味着每个注入点是独立的实例可以独立配置ChatClientChatClient由默认配置和请求设置默认设置是ChatClient生命周期请求设置请求有效设置项包括advisorstools等ChatClientBuilderConfigurer/ChatClientCustomizer给用户定制ChatClient.Builder的组件ChatClient/DefaultChatClientChatClient的prompt方法返回ChatClientRequestSpec上图ChatClient的prompt方法以及DefaultChatClientRequestSpec工具属性这里看到一个技巧新建返回给用户的DefaultChatClientRequestSpec的属性list已赋值新集合ChatClient的defaultChatClientRequest的属性addAll到新集合这样ChatClient的default设置不受影响后续新的DefaultChatClientRequestSpec请求范围的增加累加起来后面ChatClient再请求只有default的属性这样实现了ChatClient实例范围和请求范围的设置DefaultChatClient调用call这个call方法不是真正调用Model但做了两个关键事情首先偷偷的塞入了模型调用advisor模型的真正调用者第二DefaultChatClientUtils.toChatClientRequest方法构建ChatClientRequest也是调用大模型前工具的处理方法这在系列-工具那文分析了不再重复大模型调用在下一节分析调用大模型上节分析chat client设置用户消息系统消息上下文advisor直到CallResponseSpec本节从CallResponseSpec开始分析调用chat model上图chatmodel调用类图CallResponseSpec调用advisor链的nextCalladvisor链挨个执行advisor关于advisor链执行下节分析上节分析advisor链塞入ChatModelCallAdvisor这个advisor负责调用大模型ChatModelCallAdvisor 调用ChatModel的call方法构建ChatResponseChatModel ChatModel每个大模型厂商各自实现这里就不深入分析advisoradvisor是ChatClient的拦截器组件拦截器是sa给用户扩展修改和处理提示词spring ai自身也使用advisor实现功能特性上图是advisor类图CallAdvisor/BaseAdvisor 前者advisorCall方法执行一次后者的advisorCall实现分开before和after也就是before()-nextCall-after()提供模型调用前调用后的处理方法ToolCallAdvisor/StructuredOutputValidationAdvisor 这两个是递归advisor依据判断递归执行下面介绍一下ToolCallAdvisor大模型调用返回若有ToolCall请求ToolCallAdvisor执行工具调用调用完成返回结果结果可能还有工具请求继续执行工具调用同时每轮调用ToolCallAdvisor后面的advisor要先执行一次保证执行完整性StructuredOutputValidationAdvisor 也是递归advisor将在系列-agent介绍saa的agent框架提供interceptor类似advisor的组件chat记忆本节分析chat记忆组件大模型是无状态多轮调用依赖外部的记忆取出之前的chat记忆通过提示词给大模型帮助大模型了解上下文更好理解当前的查询生成内容更能贴近用户想要。上图是chat记忆组件ChatMemory记忆组件的接口MessageWindowChatMemory记忆组件实现消息窗口窗口外的消息截掉窗口宽度是maxMessages属性设置ChatMemoryRepository记忆存储库MessageChatMemoryAdvisor记忆组件通过advisor接入MessageChatMemoryAdvisor继承BaseAdvisorbefore方法取出消息写入提示词after方法保存调用大模型后产生的新的消息消息窗口前移。多轮记忆是用conversationId串起来conversationId通过advisor的context传递目前由外部提供sa自身不负责生成记忆太多造成上下文过长大多数模型在处理长上下文表现很差saa提供机制例如对记忆做summary减少记忆大小另外大模型输出一旦走偏记忆反而成为负面影响负面积累导致输出偏离越来越远不着边际。!saa的agent有自己记忆组件分析agent时再深入分析总结ChatClient/ChatModel承担着设置模型调用的参数和上下文包括advisor和工具调用大模型的责任如果说大模型是agent的发动机ChatClient/ChatModel是变速箱转化发动机源源不断的动力为agent前进的动力ChatClient/ChatModel是否高效传动是否可靠直接影响着agent能走多远能走多快。其他结构化输出sa提供结构化输出组件saa在agent优化了该组件的使用结构化输出放到agent分析NEXT前面几个系列分析了spring ai的组件sa并没有agent类定位做零部件定义零部件规范和标准spring ai alibaba是做成品面向应用下面系列分析saa
网站建设 高端定制 企业官网