Spring AI 已经成为 2026 年 Java 后端面试的必考点,几乎所有中高级岗位都会问到。但绝大多数开发者只会写几行调用大模型的代码,对其底层原理一无所知,面试时一问就卡壳。
Spring AI 的核心不是大模型本身,而是它的抽象设计和集成能力。掌握这一点,你就能轻松应对 90% 的 Spring AI 面试题。
一、Spring AI 的核心定位
Spring AI 是 Spring 官方推出的大模型应用开发框架,它的核心价值是统一抽象。它不提供任何大模型能力,而是为所有主流大模型提供了一套统一的编程接口。
在 Spring AI 出现之前,Java 开发者调用不同大模型需要引入不同的 SDK,写完全不同的代码。如果要从豆包切换到通义千问,几乎要重写所有的 AI 相关代码。
Spring AI 解决了这个问题。它定义了一套标准的接口,所有大模型厂商只需要实现这套接口,就能无缝集成到 Spring 生态中。开发者只需要修改配置文件,就能在不同大模型之间自由切换,业务代码一行都不用改。
这是 Spring 一贯的设计哲学:通过抽象来屏蔽底层差异,让开发者专注于业务逻辑。
二、Spring AI 的四大核心组件
所有 Spring AI 应用都建立在这四个核心组件之上,这是面试最基础的考点。
1. Model 接口
Model 是所有大模型的顶级抽象接口,它定义了大模型的通用能力。Spring AI 提供了多种 Model 子接口,对应不同类型的大模型:
ChatModel:聊天大模型,用于文本对话EmbeddingModel:嵌入模型,用于将文本转换为向量ImageModel:图像生成模型AudioModel:语音识别和生成模型
所有主流大模型都实现了这些接口。比如豆包的 DoubaoChatModel、通义千问的 QwenChatModel、OpenAI 的 OpenAiChatModel 都实现了 ChatModel 接口。
2. Prompt
Prompt 是发送给大模型的请求,它包含了用户的问题、系统提示词、参数配置等信息。Spring AI 中的 Prompt 是一个不可变对象,由多个 Message 组成。
Message 有三种核心类型:
SystemMessage:系统提示词,用于定义大模型的角色和行为UserMessage:用户的问题AssistantMessage:大模型的回复
3. Response
Response 是大模型返回的结果,它包含了生成的文本、使用的 Token 数量、完成原因等信息。不同类型的 Model 对应不同的 Response 类型,比如 ChatResponse、EmbeddingResponse。
4. ChatClient
ChatClient 是 Spring AI 提供的流式 API 构建器,它封装了 ChatModel 的底层调用,提供了更简洁、更流畅的编程体验。这是日常开发中最常用的组件。
package com.jam.demo.springai;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* ChatClient 示例
* @author ken
*/
@Slf4j
@RestController
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient
.prompt()
.user(message)
.call()
.content();
}
}
三、ChatClient 的底层执行流程
这是面试的核心考点,90% 的人答不出来。当你调用 chatClient.call().content() 时,Spring AI 内部执行了以下 6 个步骤:
- 构建 Prompt:将用户输入的消息、系统提示词、参数配置等组装成一个 Prompt 对象
- 执行拦截器链:依次执行所有注册的
ChatClientInterceptor,可以在这里添加日志、监控、限流等逻辑 - 转换 Prompt:将 Spring AI 标准的 Prompt 对象转换为对应大模型 SDK 的请求对象
- 发送 HTTP 请求:通过 RestClient 向大模型 API 发送 HTTP 请求
- 转换 Response:将大模型返回的响应转换为 Spring AI 标准的 ChatResponse 对象
- 返回结果:提取 ChatResponse 中的文本内容返回给调用者
整个流程采用了责任链设计模式,非常容易扩展。你可以通过添加自定义拦截器来实现各种横切关注点,而不需要修改核心业务代码。
四、RAG 的核心执行流程
RAG(检索增强生成)是目前最主流的大模型应用架构,也是面试的必考点。Spring AI 提供了完整的 RAG 支持,其核心执行流程分为 4 步:
- 文档加载:使用
DocumentReader加载各种格式的文档,比如 PDF、Word、TXT、Markdown 等 - 文档切分:使用
TextSplitter将长文档切分成多个小块,每个小块的大小通常在 500-1000 Token 之间 - 向量存储:使用
EmbeddingModel将每个文档块转换为向量,然后存储到向量数据库中 - 检索增强生成:用户提问时,先将问题转换为向量,从向量数据库中检索出最相关的几个文档块,然后将问题和文档块一起发送给大模型,大模型根据检索到的内容生成回答
@GetMapping("/rag")
public String rag(@RequestParam String question) {
return chatClient
.prompt()
.user(question)
.system("请根据以下上下文回答用户的问题,如果上下文没有相关信息,请回答'我不知道'")
.advisors(new QuestionAnswerAdvisor(vectorStore))
.call()
.content();
}
Spring AI 中的 QuestionAnswerAdvisor 封装了整个检索增强的逻辑,你只需要一行代码就能实现 RAG 功能。
五、面试高频题精选
1. Spring AI 和 LangChain4j 有什么区别?
- Spring AI 是 Spring 官方出品,和 Spring Boot 生态无缝集成,自动配置、依赖管理、事务等特性都能直接使用
- LangChain4j 是第三方框架,功能更丰富,但和 Spring 生态的集成度不如 Spring AI
- 对于 Spring Boot 项目,优先选择 Spring AI
2. ChatClient 和直接使用 RestTemplate 调用大模型 API 有什么区别?
- ChatClient 提供了统一的接口,支持不同大模型的无缝切换
- ChatClient 内置了拦截器机制,方便添加日志、监控、限流等功能
- ChatClient 封装了流式输出、函数调用、RAG 等高级功能
- ChatClient 自动处理了异常、重试、超时等问题
3. RAG 为什么要切分文档?
- 大模型的上下文窗口有限,不能处理太长的文档
- 切分后的文档块更精准,检索时能找到最相关的内容
- 减少 Token 消耗,降低成本
4. Spring AI 如何实现流式输出?
Spring AI 的 ChatClient 提供了 stream() 方法,它返回一个 Flux<ChatResponse>,可以通过响应式编程处理流式结果。底层是通过 HTTP SSE 协议实现的。
六、总结
Spring AI 的核心设计思想就是抽象。它通过定义一套标准的接口,屏蔽了不同大模型之间的差异,让 Java 开发者可以用熟悉的 Spring 编程模型来开发大模型应用。
面试时,只要你能讲清楚 Spring AI 的核心定位、四大组件、ChatClient 的执行流程和 RAG 的原理,就能超过 90% 的候选人。
我整理了一份阿里《AI白皮书》,关注公众号【果酱带你啃java】,回复【AI白皮书】即可免费领取。