遨游Spring AI:第一盤菜Hello World

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的翅膀,讓應用程序飛翔起來吧。

創作不易,煩請點個在看、點個贊。

有任何問題,也歡迎留言討論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82883.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為云Flexus+DeepSeek征文|基于華為云Flexus X和DeepSeek-R1打造個人知識庫問答系統

目錄 前言 1 快速部署&#xff1a;一鍵搭建Dify平臺 1.1 部署流程詳解 1.2 初始配置與登錄 2 構建專屬知識庫 2.1 進入知識庫模塊并創建新庫 2.2 選擇數據源導入內容 2.3 上傳并識別多種文檔格式 2.4 文本處理與索引構建 2.5 保存并完成知識庫創建 3接入ModelArts S…

Java優化:雙重for循環

在工作中&#xff0c;經常性的會出現在兩張表中查找相同ID的數據&#xff0c;許多開發者會使用兩層for循環嵌套&#xff0c;雖然實現功能沒有問題&#xff0c;但是效率極低&#xff0c;一下是一個簡單的優化過程&#xff0c;代碼耗時湊從26856ms優化到了748ms。 功能場景 有兩…

Prompt Tuning:生成的模型文件有什么構成

一、為什么Prompt Tuning會生成模型文件? 1. Prompt Tuning的本質:優化可訓練的「提示參數」 核心邏輯:Prompt Tuning(提示調優)是一種輕量級的微調技術,僅優化模型輸入層的提示向量(Prompt Embedding)或少量額外參數,而非更新整個預訓練模型的權重。生成模型文件的原…

ARM SMMUv3簡介(一)

1.概述 SMMU&#xff08;System Memory Management Unit&#xff0c;系統內存管理單元&#xff09;是ARM架構中用于管理設備訪問系統內存的硬件模塊。SMMU和MMU的功能類似&#xff0c;都是將虛擬地址轉換成物理地址&#xff0c;不同的是MMU轉換的虛擬地址來自CPU&#xff0c;S…

在 Windows 系統上運行 Docker 容器中的 Ubuntu 鏡像并顯示 GUI

在 Windows 上安裝一個 X Server&#xff08;如 VcXsrv 或 X410&#xff09;&#xff0c;Ubuntu 容器通過網絡將圖形界面轉發到 Windows。 步驟&#xff1a; 安裝 X Server&#xff1a; 推薦使用VcXsrv&#xff0c;免費開源。 安裝后運行 XLaunch&#xff0c;選擇&#xff1…

Vue3學習(4)- computed的使用

1. 簡述與使用 作用&#xff1a;computed 用于基于響應式數據派生出新值&#xff0c;其值會自動緩存并在依賴變化時更新。 ?緩存機制?&#xff1a;依賴未變化時直接返回緩存值&#xff0c;避免重復計算&#xff08;通過 _dirty 標志位實現&#xff09;。?響應式更新?&…

【HarmonyOS 5】出行導航開發實踐介紹以及詳細案例

以下是 ?HarmonyOS 5? 出行導航的核心能力詳解&#xff08;無代碼版&#xff09;&#xff0c;聚焦智能交互、多端協同與場景化創新&#xff1a; 一、交互革新&#xff1a;從被動響應到主動服務 ?意圖驅動導航? ?自然語義理解?&#xff1a;用戶通過語音指令&#xff08;如…

csrf攻擊學習

原理 csrf又稱跨站偽造請求攻擊&#xff0c;現代網站利用Cookie、Session 或 Token 等機制識別用戶身份&#xff0c;一旦用戶訪問某個網站&#xff0c;瀏覽器在之后請求會自動帶上這些信息來識別用戶身份。用戶在網站進行請求或者操作時服務器會給出對應的內容&#xff0c;比如…

深入剖析MySQL鎖機制,多事務并發場景鎖競爭

一、隱藏字段對 InnoDB 的行鎖&#xff08;Record Lock&#xff09;與間隙鎖&#xff08;Gap Lock&#xff09;的影響 1. 隱藏字段與鎖的三大核心影響 類型影響維度描述DB_TRX_IDMVCC 可見性控制決定是否讀取當前版本&#xff0c;或在加鎖時避開不可見版本&#xff08;影響加鎖…

以SMMUv2為例,使用Trace32可視化操作SMMU的常用命令詳解

Trace32支持一系列的SMMU命令&#xff0c;可以幫助用戶更好地配置、查看和分析SMMU。換句話說&#xff0c;就是讓SMMU的配置變得可視化。 在添加SMMU實例之前&#xff0c;需要選擇一個CPU來激活該SMMU實例的相關命令。Trace32讓SMMU的配置可視化的本質是&#xff0c;操縱CPU讀取…

將數據庫表導出為C#實體對象

數據庫方式 use 數據庫;declare TableName sysname 表名 declare Result varchar(max) /// <summary> /// TableName /// </summary> public class TableName {select Result Result /// <summary>/// CONVERT(NVARCHAR(500), ISNULL(ColN…

CSS 預處理器與工具

目錄 CSS 預處理器與工具1. Less主要特性 2. Sass/SCSS主要特性 3. Tailwind CSS主要特性 4. 其他工具PostCSSCSS Modules 5. 選擇建議 CSS 預處理器與工具 1. Less Less 是一個 CSS 預處理器&#xff0c;它擴展了 CSS 語言&#xff0c;添加了變量、嵌套規則、混合&#xff0…

this.$set() 的用法詳解(Vue響應式系統相關)

1. 什么是 this.$set()&#xff1f; this.$set(target, key, value) 是 Vue 2 中提供的一個方法&#xff0c;用于向響應式對象中動態添加屬性&#xff0c;確保新加的屬性同樣是響應式的。 2. 為什么需要它&#xff1f; Vue 2 的響應式系統基于 Object.defineProperty&#…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十)

目錄 1 -> 部署云側工程 2 -> 通過CloudDev面板獲取云開發資源支持 3 -> 通用云開發模板 3.1 -> 適用范圍 3.2 -> 效果圖 4 -> 總結 1 -> 部署云側工程 可以選擇在云函數和云數據庫全部開發完成后&#xff0c;將整個云工程資源統一部署到AGC云端。…

如何配置nginx解決前端跨域請求問題

我們以一個簡單的例子模擬不同情況下產生的跨域問題以及解決方案。假設在http://127.0.0.1:8000的頁面調用接口 fetch(http://127.0.0.1:8003/api/data)常看到的錯誤“Access to fetch at ‘http://127.0.0.1:8003/api/data’ from origin ‘http://localhost:8000’ has been…

React Hooks 指南:何時使用 useEffect ?

在 React 的函數組件中&#xff0c;useEffect Hook 是一個強大且不可或缺的工具。它允許我們處理副作用 (side effects)——那些在組件渲染之外發生的操作。但是&#xff0c;什么時候才是使用 useEffect 的正確時機呢&#xff1f;讓我們深入探討一下&#xff01; 什么是副作用…

bat批量去掉本文件夾中的文件擴展名

本文本夾內 批量去掉本文件夾中的文件擴展名 假如你有一些文件&#xff0c;你想去掉他們的擴展名 有沒有方便的辦法呢 今天我們就分享一種辦法。 下面&#xff0c;就來看看吧。 首先我們新建一個記事本&#xff0c;把名字改為&#xff0c;批量去掉本文件夾中的文件擴展名.txt 然…

STM32標準庫-輸入捕獲

一、輸入捕獲 1.簡介 IC&#xff08;Input Capture&#xff09;輸入捕獲輸入 捕獲模式下&#xff0c;當通道輸入引腳出現指定電平跳變時&#xff0c;當前CNT的值將被鎖存到CCR中&#xff0c;可用于測量PWM波形的頻率、占空比、脈沖間隔、電平持續時間等參數 每個高級定時器和…

在linux系統上搭建git服務器(ssh協議)

1.在windows上生成RSA密鑰對 ssh-keygen -t rsa -b 2048 -C"git用戶名/郵箱地址" 命令執行后會在 C:\Users\${windows登錄賬戶}\.ssh 目錄下生成密鑰對 其中 id_rsa 為私鑰&#xff0c;id_rsa.pub 為公鑰 2.在 linux 系統上登記公鑰 vim ~/.ssh/authorized_keys…

RAG檢索系統的兩大核心利器——Embedding模型和Rerank模型

在RAG系統中&#xff0c;有兩個非常重要的模型一個是Embedding模型&#xff0c;另一個則是Rerank模型&#xff1b;這兩個模型在RAG中扮演著重要角色。 Embedding模型的作用是把數據向量化&#xff0c;通過降維的方式&#xff0c;使得可以通過歐式距離&#xff0c;余弦函數等計算…