发布时间:2026/8/25 11:05:55
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

相关新闻

2026/8/25 11:05:55

文献 eDNA探究北京市主要河流鱼类分布及影响因素

基于eDNA metabarcoding探究北京市主要河流鱼类分布及影响因素 使用eDNA宏条形码(eDNA metabarcoding)和地笼法检测了北京市3条水系(城区河流:北运河水系;山区河流:潮白河水系、大清河水系)在夏季和秋季两个季节的鱼类…

2026/8/25 11:00:55

BPD算法详解

背景用生活举例来理解想象一下电网:全国的城市通过电线连接在一起。如果敌人想让全国大范围停电,他们应该炸掉哪几个关键的变电站?这就是这篇论文要解决的问题:"最少删掉哪些节点,能让整个网络瘫痪?&q…

2026/8/25 11:00:55

OpenClaw智能体框架:从环境部署到生产级调优实战指南

1. 项目概述:为什么OpenClaw值得你投入时间 最近在AI应用开发圈里,OpenClaw的热度持续攀升。如果你正在寻找一个能够快速构建、灵活部署且功能强大的智能体(Agent)框架,来将大语言模型(LLM)的能…

2026/8/25 13:31:38

深入浅出Function Calling③-零基础保姆级教程

第 5 章:工程细节 —— 让工具调用达到生产级5.1 工具描述写作军规(模型乱调工具时,90% 先改这里)军规BadGood说清"何时用""查天气""查询城市当前实时天气。用户问天气/气温/穿衣/带伞时使用&#xff1b…

2026/8/25 13:31:38

渲染管线噔噔噔

一、前言:这里是随机一次的梦到哪句讲哪句环节二、渲染管线简要描述1.应用阶段:决定并准备要画什么,例如更新场景、摄像机、动画、模型和材质,然后提交绘制命令。(应用阶段决定画什么)2.几何阶段&#xff1…

2026/8/25 13:31:38

从拼参数到拼实效,2026年中国AI进入“算账时代”

2026年8月,中国AI行业出现明确转向:靠Demo博热度的粗放时代终结,ROI、安全合规、场景复制成为企业采购AI的三个硬指标。8部委联合发文(参考来源:《新一代人工智能伦理规范》等公开政策文件)、央国企开放超1…

2026/8/25 13:21:14

Go channel进阶:select优先级与定时器

TL;DR 核心要点速览 pprof是Go性能分析标准工具 Go GC三色标记,STW通常小于1ms sync.Pool重用对象减少GC压力 atomic比Mutex轻量,适合简单计数 Go内存逃逸分析用go build -gcflags 本篇是Go高并发优化模块,含性能调优实战 摘要:本文详细介绍select优先级与定时器,涵盖核心原理…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…