Spring-ai 框架源码分析

官网地址

版本

    <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

对话模型

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中台
posted @ 2025-11-11 16:38  java拌饭  阅读(5)  评论(0)    收藏  举报