开篇引入
如果你是Java开发者,想要给你的应用加上AI能力,却不知道如何下手——调用OpenAI要用一套SDK,切换成DeepSeek又得重写一遍业务代码,更别提还要自己折腾RAG、函数调用这些高级功能了。本文将带你全面了解Spring AI,一款由Spring官方推出的可爱AI小助手级框架,它让Java开发者可以用熟悉的Spring编程模型轻松集成大语言模型。读完你将掌握Spring AI的核心概念、代码写法、底层原理以及高频面试考点。

本文同步发布于 可爱AI小助手 技术专栏,欢迎关注。
痛点切入:为什么需要Spring AI?

先看看没有Spring AI时,集成AI模型是什么体验。假设你要调用Open
// 传统做法:用HttpClient直接调用OpenAI API String url = "https://api.openai.com/v1/chat/completions"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Authorization", "Bearer " + API_KEY) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(""" {"model": "gpt-4", "messages": [{"role": "user", "content": "你好"}]} """)) .build(); String response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()).body(); // 然后手动解析JSON...
这段代码暴露了三个典型痛点:
1. 厂商绑定:OpenAI用一套API,DeepSeek用另一套,通义千问又是新的格式。换了模型,业务代码几乎要重写。
2. 重复造轮子:Prompt管理、对话记忆、流式输出、工具调用……每个项目都要自己封装一遍。
3. 工程化缺失:缺乏监控、重试、熔断等企业级能力,难以在生产环境稳定运行。
Spring AI的出现,正是为了解决这些问题。
h2 核心概念一:Spring AI框架
标准定义
Spring AI(Spring Artificial Intelligence)是Spring官方团队推出的AI应用开发框架,为Java/Spring生态系统提供统一、模块化、企业级友好的AI能力集成方案-14。
拆解关键词
Spring:它不是一个独立的AI库,而是Spring生态的一等公民,与Spring Boot、Spring Framework深度集成。
统一抽象:通过ChatClient、EmbeddingClient等通用接口,屏蔽不同AI厂商的底层差异。
POJO编程:开发者只需写普通的Java对象和注解,就能调用大模型能力。
生活化类比
可以把Spring AI想象成USB Hub。你不需要知道U盘、鼠标、键盘各自是什么协议,只需把它们插进Hub,电脑就能统一识别。Spring AI就是Java应用和AI模型之间的那个“Hub”。
核心价值
Spring AI的核心目标是通过简化AI模型与业务系统的集成流程,降低企业构建智能应用的门槛-3。它并不提升大模型本身的性能,而是聚焦于解决工程集成的复杂性——通过标准化接口、统一配置与可插拔设计,显著降低AI能力嵌入企业级Java应用的技术门槛-。
h2 核心概念二:Spring AI的关键能力
1. 统一对话接口(ChatClient)
Spring AI提供了ChatClient作为对话模型的统一入口,支持同步调用和流式调用。无论底层是OpenAI GPT、Claude、DeepSeek还是本地Ollama模型,调用方式完全一致-14。
2. 结构化输出
不需要手动解析AI返回的JSON,Spring AI可以直接将AI响应映射为Java对象。
3. 工具调用(Tool Calling / Function Calling)
这是Spring AI最核心的能力之一。它允许大语言模型在需要时调用Java开发者定义的外部函数,让AI能够执行操作或检索实时信息-52。
4. RAG(检索增强生成)
Spring AI内置了完整的RAG支持:文档加载 → 文本切片 → 向量化 → 向量库检索 → 增强问答。
5. 向量数据库抽象
通过统一的VectorStore接口,支持PGVector、Milvus、Chroma、ElasticSearch等多种向量数据库-14。
h2 概念关系与区别总结
| 概念 | 本质 | 解决的问题 |
|---|---|---|
| Spring AI 框架 | AI应用开发框架,统一抽象层 | 屏蔽模型差异、简化工程集成 |
| ChatClient | 对话模型的具体调用接口 | 统一调用方式,支持同步/流式 |
| Tool Calling | 模型调用外部函数的能力 | 让AI获取实时信息或执行操作 |
| RAG | 检索增强生成技术架构 | 解决知识幻觉和私有数据接入 |
一句话概括:Spring AI是一个框架,它提供了ChatClient、Tool Calling、RAG等能力组件,让Java开发者能用Spring的方式构建AI应用。
h2 代码实战:极简示例
准备工作
在pom.xml中添加依赖(以Spring AI 1.x为例):
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.3</version> </dependency>
💡 时效信息:Spring AI 2.0.0-M4已于2026年3月26日发布,最低要求Java 17,推荐Java 21,基础设施升级为Spring Boot 4.0 + Spring Framework 7.0-13。
配置文件(application.yml)
spring: ai: openai: api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4 temperature: 0.7
基础对话示例
@RestController public class ChatController { private final ChatClient chatClient; // 构造函数注入ChatClient.Builder,Spring AI自动配置 public ChatController(ChatClient.Builder builder) { this.chatClient = builder.build(); } @GetMapping("/chat") public String chat(@RequestParam String message) { // 一行代码完成AI调用 return chatClient.prompt(message).call().content(); } }
🔑 关键说明:ChatClient.Builder由Spring AI自动装配,无需手动创建。prompt()接收用户消息,call()发起请求,content()提取响应内容。
工具调用(Function Calling)示例
让AI模型能调用你写的Java方法获取实时信息:
@Configuration public class ToolConfig { @Bean @Description("查询指定城市的实时天气信息") // description帮助模型理解何时调用 public Function<WeatherRequest, WeatherResponse> getWeather() { return request -> { // 实际调用天气API return new WeatherResponse(request.city(), "晴", 26); }; } } // 定义请求和响应的POJO public record WeatherRequest(String city) {} public record WeatherResponse(String city, String weather, int temperature) {} // Controller中使用 @GetMapping("/weather-chat") public String weatherChat(@RequestParam String message) { return chatClient.prompt(message) .tools("getWeather") // 指定可用工具 .call() .content(); }
执行流程:用户问“杭州今天天气怎么样” → Spring AI将工具定义发给模型 → 模型决定调用getWeather → Spring AI自动执行你的Java方法 → 结果回传给模型 → 模型生成最终回答-13。
h2 底层原理浅析
Spring AI底层依赖以下几个核心技术:
1. 动态代理:Spring AI在运行时动态创建ChatClient的实现类,拦截方法调用,在调用前后插入日志、重试、监控等横切逻辑。
2. 自动配置:基于Spring Boot的@Conditional条件注解,根据类路径上的依赖和配置文件,自动创建ChatModel、ChatClient等Bean实例。
3. 反射与JSON Schema生成:对于@Tool注解的方法,Spring AI通过反射提取方法的参数类型和返回值类型,自动生成符合大模型API规范的JSON Schema,让模型理解这个工具的调用方式-54。
4. Function Registry(函数注册表) :这是Spring AI工具调用机制的核心组件,负责管理所有可调用的Java函数。当模型决定调用工具时,Spring AI通过注册表找到对应的函数并执行-59。
5. 流式响应与Reactive编程:Spring AI的流式调用返回Flux<ChatResponse>,底层利用Spring WebFlux的非阻塞I/O模型,实现逐字推送的打字机效果-13。
h2 高频面试题与参考答案
1. 什么是Spring AI?它解决了什么问题?
参考答案:Spring AI是Spring官方推出的AI应用开发框架,目标是让Java开发者能像使用Spring Data、Spring Security一样方便地接入AI能力。它解决的核心问题是统一不同大模型的调用方式——以前调OpenAI用一套SDK,调DeepSeek用另一套,代码完全不一样。Spring AI抽象了统一的ChatClient接口,换模型只需改配置,业务代码不用动-69。
踩分点:框架定位 + 核心问题(模型碎片化)+ 解决方案(统一抽象)。
2. Spring AI的Tool Calling(函数调用)原理是什么?
参考答案:Tool Calling允许大语言模型在必要时调用Java开发者定义的外部函数。原理分为五步:(1)开发者通过@Tool注解定义Java函数;(2)Spring AI自动生成函数的JSON Schema(包含函数名、描述、参数格式);(3)将这些Schema随Prompt发给大模型;(4)模型判断是否需要调用,如需调用则返回带有参数的JSON请求;(5)Spring AI通过Function Registry触发Java函数执行,将结果返回给模型,模型生成最终回答。关键安全机制是:模型只能请求调用,真正执行的是客户端应用,API密钥等敏感信息不会暴露给模型-52-59。
踩分点:@Tool注解 → Schema生成 → 模型决策 → 框架执行 → 安全隔离。
3. Spring AI和LangChain有什么区别?
参考答案:定位上,Spring AI是Java生态的企业级AI集成框架,LangChain是以Python为主的通用LLM应用开发框架。生态上,Spring AI与Spring Boot深度集成,支持自动配置、依赖注入、监控告警等企业级能力;LangChain功能更丰富但复杂度更高,Java支持较弱。选型建议:Java技术栈企业项目首选Spring AI;AI原生原型开发、需要丰富生态支持的选LangChain-22-64。
踩分点:语言生态差异 + 企业级能力对比 + 适用场景。
4. Spring AI如何实现RAG?
参考答案:RAG(检索增强生成)分离线构建和在线问答两步。离线阶段:用DocumentReader加载文档 → TextSplitter切片 → EmbeddingModel向量化 → 存入VectorStore。在线阶段:用户问题转向量 → VectorStore.similaritySearch()语义检索 → 将检索结果拼接进Prompt → ChatModel生成答案。这样大模型就能基于企业私有知识库回答,而不是依赖训练数据中的过时信息-64。
踩分点:RAG全称 + 六步流程 + 解决幻觉问题。
h2 结尾总结
本文系统讲解了Spring AI框架的核心内容:
| 知识点 | 核心要点 |
|---|---|
| Spring AI定位 | Spring官方AI框架,统一不同大模型调用,Java生态一等公民 |
| 核心能力 | ChatClient、结构化输出、Tool Calling、RAG、向量数据库抽象 |
| Tool Calling | @Tool定义 → Schema生成 → 模型决策 → 框架执行 → 安全隔离 |
| 底层原理 | 动态代理、自动配置、反射、Function Registry、Reactive流式 |
| 面试高频 | 框架定位、Tool Calling原理、vs LangChain、RAG实现 |
Spring AI 2.0正在快速迭代,2026年3月26日已发布2.0.0-M4版本-1。建议你动手写一个简单的Spring AI + DeepSeek对话示例,运行起来感受一下“一行代码调大模型”的体验。
下一篇预告:Spring AI中的RAG深度实战,将带你完整实现一个企业级知识库问答系统,敬请期待!
📌 本文为可爱AI小助手系列第1篇,如有疑问或建议,欢迎在评论区留言讨论。