当前位置: 首页 > 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.zskr.cn/news/46613.html

相关文章:

  • 2025年11月GEO优化推荐:知名机构排行榜口碑评价对比指南
  • 2025年11月geo供应商推荐:知名机构排行榜口碑评价对比指南
  • matlab实现TCM-8PSK的调制解调,跑出误码率曲线
  • 【LVGL】复选框部件
  • serializers.ModelSerializer进行序列化和反序列化时,只传递instance和只传递data以及同时传递instance和data参数作为序列化输出和反序列化输入的数据源
  • 完整教程:在 Claude Code 中设置 MCP 服务器(技术总结)
  • [GXYCTF2019]Ping Ping Ping wp - fish666
  • 2025 年 11 月码垛机厂家推荐排行榜,全自动/高位/低位/立柱/编织袋/纸箱/桶/粉料/肥料码垛机,江苏/无锡码垛机器人实力解析
  • 基于MATLAB图像特征识别及提取实现图像分类
  • 无限长直导线周围电场分布的MATLAB
  • 1-2-3-泛型与反射
  • 1-3-1-知识图谱
  • T690363 促销活动
  • 1-6-0-总纲
  • 1-3-5-AQS详解
  • 起飞啦,太easy啦!!!小白的神级AI辅助工具,一句话即可搭建超50个节点的工作流~~~~
  • 3-1-1-2-MySQL锁机制
  • 3-1-2-2-MySQL分页查询机制
  • 3-1-0-MySQL知识总览
  • 4-1-2-Kafka-Broker-log
  • SqlSugar 在linux环境下连接sqlserver数据库报错SSL出错,因为升级了驱动,字符串增加Encrypt=True;TrustServerCertificate=True;
  • 【JMeter】图形化方式使用 - 谷粒
  • 薪酬管理:企业增长的“隐形引擎”—中国薪资管理系统Top 5深度分析与选型指南
  • SpringOJ竞赛计划----组件ElasticSearch
  • 【软件测试】你需要的面试技巧全在这里,细节满满
  • wrewe
  • qeq
  • 非模式生物基因富集分析——小麦富集分析
  • ewr
  • 2025年优质的数字化配电柜厂家推荐及选择参考