Spring-ai 框架源码分析

news/2025/11/11 16:41:11/文章来源:https://www.cnblogs.com/zby9527/p/19210911

官网地址

  • https://docs.spring.io/spring-ai/reference/index.html

版本

    <dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

模型抽象

Model & StreamingModel

  • 所有模型基本都使用了request-response模式,对话模型实现了流式
  • 对各种类型的大模型同步和流式进行高层抽象,实现可以是对话、语音、embedding等
    `image

对话模型

  • 参考文档:https://docs.spring.io/spring-ai/reference/api/chatmodel.html
  • 实现人与大模型一对一对话交流
  • 支持同步+异步调用
  • 支持工具自动调用
  • 请求抽象实现为Prompt,响应抽象实现为ChatResponse

Prompt

  • 对话模型request的具体实现
  • 支持四种Message,支持对话模型参数,支持工具调用参数
    image

ChatResponse

  • 对话模型响应实现
  • 支持吃AssistantMessage
    image

ChatModel & StreamingChatModel

  • 对话模型的实现,基于Prompt和ChatResponse
  • 默认同时支持同步和流式
    image

Tool

  • 工具调用的抽象
  • 支持通过 @Tool 注解方法和通过 @Bean 注入返回Function、BiFunction、Supplier、Consumer的方法两种方式提供工具给大模型
  • 所有工具信息被封装成ToolCallback,可以设置给全局使用,也可以设置到Prompt对象局部使用
  • 使用ToolCallingManager进行工具调用
  • 由ChatModel的实现决定是否支持工具调用及对ToolCallingManager进行调用
  • 远程工具调用使用mcp模块
    image

ChatClient

  • 对ChatModel再次封装,提供AOP功能
  • 使用Specification模式,实现配置可继承,比如全局系统提示词,全局工具
  • ChatClient负责构造出ChatClientRequestSpec(请求说明),然后使用ChatClientRequestSpec的call方法得到CallResponseSpec(同步响应说明)对象或者steam方法得到StreamResponseSpec(流式响应说明)对象,call和steam方法内部会创建BaseAdvisorChain,并且创建BaseAdvisorChain时会自动创建两个用于调用ChatModel的Advisor作为最后一个Advisor;调用ResponseSpec的方法获取结果的时候,才会调用BaseAdvisorChain执行所有advisor,才会真正调用ChatModel
    image

对话模型具体实现过程

  1. 实现一个可以完成大模型调用的类,如OpenAiApi、DeepSeekApi
  2. 提供ChatOptions和ToolCallingChatOptions的具体实现用于模型参数配置,如OpenAiChatOptions、DeepSeekChatOptions
  3. 实现ChatModel,ChatModel基于XXXApi进行大模型调用,使用ToolCallingManager进行工具调用,如OpenAiChatModel、DeepSeekChatModel
  4. 提供ChatModel具体实现的自动装配,如:OpenAiChatAutoConfiguration、DeepSeekChatAutoConfiguration

Embedding模型

  • 参考文档:https://docs.spring.io/spring-ai/reference/api/embeddings.html
  • embedding是文本、图片、视频的数字化表现形式,可以用于捕捉输入内容的关系
  • 文本、图片、视频经过embedding后生成浮点数组,被称作vector,也就是向量,数组的长度就是响亮的维度。
  • 不同的embedding模型生成的向量维度不同。
  • 两个文本之间的相似度通过计算两个向量之间的距离得到,常用的距离计算方式有余弦相似度、欧式距离、曼哈顿距离、切比雪夫距离等
  • EmbeddingModel作为embedding的顶层抽象,实现Model
  • EmbeddingRequest作为embedding的请求抽象,EmbeddingResponse作为embedding的响应抽象
  • 不同供应商提供具体的embedding实现,如OpenAiEmbeddingModel,底层也是通过OpenAiApi实际调用
    image

图片模型

  • 参考文档:https://docs.spring.io/spring-ai/reference/api/imageclient.html
  • 用于文生图模型调用
  • ImageModel作为文生图的顶层抽象,实现Model
  • ImagePrompt作为文生图的请求抽象,ImageResponse作为文生图的响应抽象
  • 不同供应商提供具体的文生图实现,如OpenAiImageModel,底层通过OpenAiImageApi实际调用
    image

更多模型抽象

  • 语音模型:SpeechModel、StreamingSpeechModel
  • 内容审核模型:ModerationModel

总结

优点

  1. 与 Spring 生态深度集成
  2. 多模态与多模型支持
  3. 响应式 / 流式支持
  4. 抽象统一接口
  5. 开箱即用

缺点

  1. 版本更新受限,正式版本刚发布,最低依赖JDK17
  2. 灵活性受限,高级功能或定制化调用可能需要绕过 SpringAI 封装,直接使用底层 SDK,对复杂或非标准调用场景,封装可能不够灵活。
  3. 社区和生态有限,企业级应用较少

结论

  • 适用于单体项目快速接入大模型,不适合用于构建AI中台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月沈阳酒店推荐:口碑评价列表与实用避坑指南

一、引言 在东北亚经济圈与东北全面振兴战略叠加的2025年四季度,沈阳作为区域枢纽城市,商务、会展、文旅流量同步抬升,酒店需求呈现“高频、短时、多元”特征。对差旅预算有限又希望兼顾位置、品质与个性化服务的消…

2025年11月geo服务商推荐:知名机构排行榜口碑评价对比指南

一、引言 生成式引擎优化(GEO)已成为企业在AI搜索时代获取精准流量与品牌增信的核心入口。面对DeepSeek、豆包、通义千问、元宝、Kimi等多平台算法并行、更新节奏不一的复杂环境,市场总监、品牌负责人及增长团队最紧…

2025年11月geo优化服务商推荐:知名机构排行榜与口碑评价对比指南

一、引言 生成式引擎优化(GEO)已不再是“锦上添花”的营销选项,而是企业在AI搜索生态里能否被看见、被信任、被转化的生死线。面对DeepSeek、豆包、通义千问、元宝、Kimi等平台算法高频迭代,市场部门与品牌主的核心…

2025年11月GEO优化推荐:知名机构排行榜口碑评价对比指南

一、引言 生成式引擎优化(GEO)正在重塑企业获取流量的路径。对品牌方、市场负责人及成长型公司而言,如何在DeepSeek、豆包、通义千问、元宝、Kimi等主流AI平台同步提升可见度,已成为成本控制与增长确定性的交汇点。…

微信小程序中下载文件(非图片)方式总结

前言 总是有需求想在微信小程序里面做下载文件并保存的功能,所以自己整理了一下小程序涉及到下载api,大致理了下在小程序里面下载的流程和解决方案。一、涉及api 1.wx.saveFile() ​ 文档链接:https://developers.w…

2025年11月豆包关键词排名优化推荐:主流机构排行榜高性价比选择指南

一、引言 生成式引擎优化(GEO)正在重塑企业获客逻辑,豆包作为月活破亿的国民级AI入口,其关键词排名直接影响品牌曝光质量。对于市场、运营及增长负责人而言,如何在多平台算法频繁迭代的2025年第四季度,用可控成本…

2025年11月北京GEO优化公司推荐:知名机构排行榜口碑评价对比指南

一、引言 生成式引擎优化(GEO)已取代传统搜索优化,成为企业在DeepSeek、豆包、通义千问、元宝、Kimi等AI入口获得精准流量的刚需。北京作为全国AI研发密度最高的城市,GEO服务商在2025年第三季度新增备案企业同比激…

2025年11月geo供应商推荐:知名机构排行榜口碑评价对比指南

一、引言 生成式引擎优化(GEO)已成为企业在AI搜索生态中争夺可见度的主战场。对于市场、公关及采购负责人而言,如何在DeepSeek、豆包、通义千问、元宝、Kimi等多平台同步获得稳定曝光,同时控制外包风险与预算,是当…

学习如何转换异步数据

学习如何转换异步数据 描述 Reactor 附带多个可用于转换数据的操作符。 public class Part04Transform {//========================================================================================// TODO Capita…

django orm save方法的坑

背景: django项目开发时,经常会使用obj.save()命令,用来保存数据。但是并没有认证的研究过save方法到底做了什么事情。 出现的问题:页面操作删除当前页面的100条数据后,操作成功,此时数据库的数据也删除了。但是…

matlab实现TCM-8PSK的调制解调,跑出误码率曲线

TCM(Trellis-Coded Modulation)是一种结合了卷积编码和调制的编码调制技术,能够提高通信系统的抗噪声性能。8PSK(8相移键控)是一种常见的调制方式,每个符号可以表示3个比特。 1. 生成随机比特序列 function bits…

【LVGL】复选框部件

引言 复选框部件(lv_checkbox)复选框相关 api 函数示例程序 lv_obj_t *checkbox;static void event_cb(lv_event_t *e) {lv_event_code_t code = lv_event_get_code(e);if (code == LV_EVENT_VALUE_CHANGED) {if(lv_…

总平方和SST、回归平方和SSR、残差平方和SSE

1. 总平方和SST 总平方和(Total Sum of Squares, SST),也称为总离差平方和,是统计学和回归分析中的一个核心概念。 定义和作用 总平方和度量了因变量(yy 𝑦 )所有观测值相对于其平均值的总变异(Total Varia…

serializers.ModelSerializer进行序列化和反序列化时,只传递instance和只传递data以及同时传递instance和data参数作为序列化输出和反序列化输入的数据源

不同方式定义的序列化器对象的区别? ** 1.如果在创建序列化器对象时,仅仅只传递instance参数,那么当前只会进行序列化输出操作,不可能进行反序列化输入操作,** ** 不可以调用序列化器对象的save()的方法…

深入解析:服务注册 / 服务发现 - Eureka

深入解析:服务注册 / 服务发现 - Eurekapre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

小型skywalking - ukyo-

https://gitee.com/createmaker/skywalk/tree/dev本文来自博客园,作者:ukyo--碳水化合物,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/19210614

完整教程:顺序步进频与捷变频雷达:原理、建模与测距方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:在 Claude Code 中设置 MCP 服务器(技术总结)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Linux使用CentOS 7内核修改镜像源解决“Could not resolve host: mirrorlist.centos.org;未知的错误“问题

转载自:https://www.jb51.net/server/345687zyo.htm 解决yum安装工具时提示以下错误信息 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://…

AI学习之路

83年生人,以问题和需求为导向的程序员、管理人员和技术决策者。对AI来了兴趣,于是构建路径、持续行动,长期主义,望能略有小成。 第一卷 AI基础 第一章 硬件 第一节 CPU、GPU 第二节 算力 第二章 数学 第三章 Pytho…