当前位置: 首页 > news >正文

Spring-ai 框架源码分析

官网地址

  • 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.jsqmd.com/news/37654/

相关文章:

  • 2025年11月沈阳酒店推荐:口碑评价列表与实用避坑指南
  • 2025年11月geo服务商推荐:知名机构排行榜口碑评价对比指南
  • 2025年11月geo优化服务商推荐:知名机构排行榜与口碑评价对比指南
  • 2025年11月GEO优化推荐:知名机构排行榜口碑评价对比指南
  • 微信小程序中下载文件(非图片)方式总结
  • 2025年11月豆包关键词排名优化推荐:主流机构排行榜高性价比选择指南
  • 2025年11月北京GEO优化公司推荐:知名机构排行榜口碑评价对比指南
  • 2025年11月geo供应商推荐:知名机构排行榜口碑评价对比指南
  • 学习如何转换异步数据
  • django orm save方法的坑
  • matlab实现TCM-8PSK的调制解调,跑出误码率曲线
  • 【LVGL】复选框部件
  • 总平方和SST、回归平方和SSR、残差平方和SSE
  • serializers.ModelSerializer进行序列化和反序列化时,只传递instance和只传递data以及同时传递instance和data参数作为序列化输出和反序列化输入的数据源
  • 深入解析:服务注册 / 服务发现 - Eureka
  • 小型skywalking - ukyo-
  • 完整教程:顺序步进频与捷变频雷达:原理、建模与测距方法
  • 完整教程:在 Claude Code 中设置 MCP 服务器(技术总结)
  • Linux使用CentOS 7内核修改镜像源解决“Could not resolve host: mirrorlist.centos.org;未知的错误“问题
  • 艾体宝干货 | Redis Python 开发系列#2 核心数据结构(上)
  • [GXYCTF2019]Ping Ping Ping wp - fish666
  • 2025 年 11 月码垛机厂家推荐排行榜,全自动/高位/低位/立柱/编织袋/纸箱/桶/粉料/肥料码垛机,江苏/无锡码垛机器人实力解析
  • 2025年西瓜专用膜厂家权威推荐榜单:水果专用膜/长寿流滴膜/灌浆膜源头厂家精选
  • 2025 年 11 月包装称厂家权威推荐榜:全自动/定量/FFS重膜/高速/锂电/零排放/螺旋/吨袋包装称,铜精粉与肥料吨包高效解决方案
  • 基于MATLAB图像特征识别及提取实现图像分类
  • Strix:用AI做渗透测试,把安全漏洞扼杀在开发阶段
  • 无限长直导线周围电场分布的MATLAB
  • Codeforces Round 1063 (Div.2) 题解
  • SI502、SI502B——NFC前端芯片
  • 草稿5