引子
當 LLM
的浪潮以不可阻擋之勢席卷全球,從改變用戶交互到重塑商業模式,我們每一位開發者都身處這場技術變革的中心。作為龐大的 Java
生態中的一員,你是否也曾思考:當 Python
似乎成為 AI 的“官方語言”時,我們這些深耕 Spring
全家桶的開發者,該如何快速擁抱這個新時代?如今,Spring
團隊親自出手,為數百萬 Java
開發者帶來了官方答案——Spring AI。它將 AI 開發的復雜性進行封裝,讓集成 AI 能力變得像添加一個普通的 Starter
一樣簡單。
本文是 《Spring AI 進階之路》 系列的第一篇,我們將從最基礎的整合開始。你將看到,在 Spring Boot
的幫助下,集成一個強大的 AI 模型,真的只需三步!
話不多說,讓我們直接開始動手實踐。
前置準備
在開始三步集成前,先確保你已準備好以下基礎環境:
- JDK 17+:Spring Boot 3 和 Spring AI 基于較新的 Java 版本,確保你的 JDK 版本不低于 17。
- Maven 或 Gradle:本文以 Maven 為例,它是我們管理項目依賴的得力助手。
- 一個順手的 IDE:選擇你最熟悉的 IDE 即可,本文以 IntelliJ IDEA 為例。
- 一個 LLM廠商的 API Key:本文以 DeepSeek 為例,價格便宜且無需科學上網,使用起來很方便。
第一步:添加依賴
讓我們從創建項目開始。如果你使用 Spring Initializr
會更簡單,但為了讓大家理解每一步的細節,我們選擇從零開始創建一個 Maven
項目。
首先,創建一個新的Maven
空項目:
項目創建完成后,我們需要配置 pom.xml
。整個依賴配置分為三個部分:
1.設置 Spring Boot 父項目
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.0</version>
</parent>
2.管理 Spring AI 的版本
通過 BOM
統一管理 Spring AI
相關依賴的版本,避免版本沖突:
<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
3.添加具體依賴
<dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI OpenAI Starter --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency>
</dependencies>
你可能注意到,雖然我們前面提到本次使用的是 DeepSeek 的 API,但引入的卻是
spring-ai-starter-model-openai
。這是因為 DeepSeek 采用了與 OpenAI 完全兼容的 API 規范,我們可以直接復用 OpenAI 的客戶端實現。這種設計讓切換不同的 AI 服務商變得非常簡單——只需要更換 API Key 和端點地址即可。
第二步:配置憑證
有了依賴,接下來需要告訴 Spring AI 如何連接到 AI 服務。在 src/main/resources
目錄下創建 application.yml
文件(如果不存在的話),添加以下配置:
spring:ai:openai:api-key: {這里換成你自己的}base-url: https://api.deepseek.comchat:options:model: deepseek-chat
?? 提醒:直接將 API Key 寫在配置文件中僅適合本地開發和快速測試,但絕對不要在生產環境中這樣做!在生產環境中,推薦使用環境變量來管理你的密鑰。
第三步:編寫代碼調用
萬事俱備,讓我們開始編寫代碼來調用 AI 模型。
1.注入AI客戶端
接下來,創建一個 REST 控制器來處理 AI 對話請求。Spring AI 的魅力在于,它將復雜的 AI 交互抽象成了簡單的 Spring Bean:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/chat")
public class ChatController {private ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/test")public String completion(@RequestParam String message) {return chatClient.prompt().user(message).call().content();} }
2.啟動測試
啟動應用,Spring Boot 的控制臺會顯示啟動信息。待應用成功啟動后,我們可以通過Apifox
,向這個測試接口發送請求:
3.配置跨域
最終我們一定需要從前端應用調用這個接口,所以別忘了配置 CORS:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("/chat/*").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("*").allowCredentials(true).maxAge(3600);}
}
小結
至此,我們完成了 Spring AI 的基礎集成。不過,如果你仔細觀察測試結果,會發現當前的實現存在一個明顯的體驗問題:我們必須等待 AI 完全生成答案后才能看到結果。相比之下,那種逐字輸出的效果就友好得多。用戶能實時看到 AI 的"思考過程",體驗更加流暢自然。
那么,如何在 Spring AI 中實現這種流式響應呢?這正是下一篇文章要探討的內容。我們將介紹如何使用 SSE(Server-Sent Events)技術,讓你的 AI 應用也能實現實時的打字機效果。
如果你對本文有任何疑問或建議,歡迎在評論區交流。下篇見!