Spring AI的正式版已經發布了,很顯然,接下來我們要做的事情就是寫一個Hello World。
總體思路就是在本地搭建一個簡單的大模型,然后編寫Spring AI代碼與模型進行交互。 ?
分五步:
1. 安裝Ollama;
2. 安裝DeepSeek;
3. 創建Spring AI工程;
4. 編碼;
5. 測試與小結。
1. 安裝Ollama
為了在本地環境安裝DeepSeek,我們先安裝Ollama。Ollama是一個開源的大型語言模型服務工具,它幫助用戶快速在本地運行大模型。
打開官網:https://ollama.com/download,選擇Windows版本:
下載完成后,安裝非常簡單,按照提示操作即可,不過它默認安裝在C盤。所以在D盤新建一個Ollama的文件,并且把安裝程序(OllamaSetup.exe)拷貝到這個目錄中。
然后以管理員身份運行cmd,切換到D盤以后,運行如下的命令,用于設置系統的環境變量:
setx OLLAMA_MODELS?"D:\Ollama\models"?/M
切換到D盤的Ollama目錄,運行如下的命令:
OllamaSetup.exe /dir=D:\Ollama
隨后彈出安裝界面,按照提示點擊下一步即可。安裝成功后,在任務欄可以看到Ollama的圖標(一個小的羊駝)。也可以在命令行輸入ollama -v來查看它的版本號。
D:\>ollama -v
ollama version is?0.5.11
2. 安裝DeepSeek
還是進到Ollama官網,點擊DeepSeek-R1超鏈接:
在跳轉的頁面中,選擇體積最小的1.5b版本。這個b是billion(十億)的縮寫,1.5b就代表該模型包含15億個參數,屬于輕量級的人工智能模型。
點擊右側的復制按鈕,把命令復制下來并且運行,可以先把它下載到本地:
ollama pull deepseek-r1:1.5b
下載完成后,即可以在本地運行DeepSeek,把上面命令中的pull改成run即可運行。然后就可以跟DeepSeek進行對話了:
D:\>ollama run deepseek-r1:1.5b
>>> who are you
<think></think>Greetings! I'm DeepSeek-R1, an artificial intelligence assistant created by DeepSeek. I'm at your service and would be delighted to assist you with any inquiries or tasks you may have.
3. 創建Spring AI工程
接下來我們創建Spring AI工程。使用Spring Initializr可以快速生成腳手架: https://start.spring.io/,工程類型、語言、版本等內容可以參考下圖進行選擇,JDK選擇版本17:
點擊GENERATE按鈕即可生成,把它下載到本地并用idea打開。注意,在pom.xml文件中,它默認使用的是openai,把它改成ollama的starter,否則會報錯:
<!--<dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-model-openai</artifactId>-->
<!--</dependency>-->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
同時,修改yml文件的配置信息如下:
spring:http:encoding:charset: UTF-8enable: trueforce: trueai:ollama:base-url: http://localhost:11434chat:model: deepseek-r1:1.5b
4. 編碼
我們從常見的AI聊天開始。Spring AI提供了ChatClient接口,它使用流暢API與AI模型進行交互。
流暢API(Fluent API),也可理解鏈式API,它是一種編程接口設計風格,通過鏈式方法調用和上下文連貫性設計,使代碼具有類似自然語言的流暢性和可讀性?。它的特點是每個方法都返回當前對象實例,從而支持鏈式調用,減少代碼冗余,提升可讀性。
通過ChatClient.Builder對象可創建ChatClient,而對象ChatClient.Builder象可通過自動裝配的方式獲得。以下是controller的代碼,功能就是:用戶輸入消息,程序把消息發送給DeepSeek并返回對應的字符串結果:
package?com.myai.demo.controller;import?org.springframework.ai.chat.client.ChatClient;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestParam;
import?org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/ai")
publicclass?ChatController?{privatefinal?ChatClient chatClient;public?ChatController(ChatClient.Builder chatClient)?{this.chatClient = chatClient.build();}@GetMapping("/chat")public?String?chat(@RequestParam(value =?"message")?String message)?{String result;try?{result = chatClient.prompt().user(message).call().content();}?catch?(Exception e) {return"Exception";}return?result;}
}
5. 測試與小結
這是Spring Boot程序,當然還需要對應的啟動類,這個很簡單,此處不再給出,如果需要完整的源代碼,或者搭建過程中遇到什么問題,也歡迎后臺私信進行討論。程序啟動后,我們跟它打個招呼,輸入你好,看看它返回什么:
沒問題,大模型返回了相應的消息,這樣,第一盤菜Hello World算是搭建成功了。
初步想一想,應用程序能夠與后臺的大模型實時交互與對話,未來的想象空間確實比較大,讓原本規規矩矩的程序變得十分強大,一些傳統的功能經過大模型的智能運算處理,會厲害很多倍。
而且,當前這個程序只是基于本地的參數不多的模型,如果接入功能更為豐富、時效性更強的大模型,會智能得多。
接下來讓我們一起插上AI的翅膀,讓應用程序飛翔起來吧。
創作不易,煩請點個在看、點個贊。
有任何問題,也歡迎留言討論。