Spring AI + Ollama 實(shí)現(xiàn) DeepSeek-R1 的API服務(wù)和調(diào)用
兄弟們,今天咱來(lái)聊聊一個(gè)超有意思的技術(shù)組合 ——Spring AI + Ollama 實(shí)現(xiàn) deepseek - r1 的 API 服務(wù)和調(diào)用。咱都知道,人工智能這幾年那可是火得一塌糊涂,各種大模型你方唱罷我登場(chǎng)。deepseek - r1 就是其中一個(gè)挺厲害的模型,那怎么把它用起來(lái),讓它為咱們的項(xiàng)目服務(wù)呢?這就輪到 Spring AI 和 Ollama 閃亮登場(chǎng)啦!
一、啥是 Spring AI、Ollama 和 deepseek - r1
(一)Spring AI
Spring AI 呢,它就像是一個(gè)超級(jí)助手,專(zhuān)門(mén)為咱們開(kāi)發(fā)人工智能應(yīng)用提供各種便利。它基于咱們熟悉的 Spring 框架,有一套現(xiàn)成的工具和組件,能讓咱快速搭建起人工智能相關(guān)的功能。比如說(shuō),它能幫咱們輕松地集成各種大模型,管理模型的調(diào)用,處理輸入輸出啥的,就像給咱們的項(xiàng)目裝上了一個(gè)智能引擎,讓開(kāi)發(fā) AI 應(yīng)用變得簡(jiǎn)單又高效。
(二)Ollama
Ollama 又是什么呢?它是一個(gè)運(yùn)行和管理大語(yǔ)言模型的平臺(tái)。它的好處就在于,咱們不用費(fèi)老大勁去自己部署和管理模型了,Ollama 幫咱們把這些麻煩事都搞定。它支持好多主流的大模型,而且提供了簡(jiǎn)單易用的 API,咱們可以通過(guò)這些 API 很方便地和模型進(jìn)行交互,讓模型給咱們干活。
(三)deepseek - r1
deepseek - r1 可是個(gè)實(shí)力派選手,它是一個(gè)功能強(qiáng)大的大模型,在自然語(yǔ)言處理方面表現(xiàn)相當(dāng)出色。能幫咱們做文本生成、問(wèn)答系統(tǒng)、智能客服等等好多實(shí)用的功能。今天咱就來(lái)看看怎么把它和 Spring AI、Ollama 一起搭配,發(fā)揮出最大的威力。
二、準(zhǔn)備工作
在開(kāi)始動(dòng)手之前,咱得先把環(huán)境搭好。首先,你得確保你的開(kāi)發(fā)環(huán)境里有 Java。要是沒(méi)有的話,趕緊去下載安裝一個(gè),現(xiàn)在 Java 最新版都挺好用的,安裝過(guò)程也不難,按照提示一步一步來(lái)就行。
然后呢,咱們得安裝 Maven。Maven 是干啥的呢?它就像是一個(gè)大管家,幫咱們管理項(xiàng)目里用到的各種依賴。比如說(shuō),咱們要用 Spring AI 和 Ollama,就可以通過(guò) Maven 很方便地把它們加到咱們的項(xiàng)目里。安裝 Maven 也很簡(jiǎn)單,去 Maven 的官網(wǎng)下載安裝包,解壓之后配置一下環(huán)境變量就搞定啦。
接下來(lái),咱們還得安裝 Ollama。Ollama 的安裝也不復(fù)雜,它支持好幾種操作系統(tǒng)。你可以去 Ollama 的官網(wǎng),按照它給的安裝指南,根據(jù)你自己的操作系統(tǒng)來(lái)安裝。安裝好之后,啟動(dòng) Ollama,確保它在正常運(yùn)行。
三、創(chuàng)建 Spring Boot 項(xiàng)目
環(huán)境搭好之后,咱就可以開(kāi)始創(chuàng)建 Spring Boot 項(xiàng)目啦。打開(kāi)你喜歡的 IDE,比如說(shuō) IntelliJ IDEA 或者 Eclipse。在 IDE 里創(chuàng)建一個(gè)新的 Spring Boot 項(xiàng)目,這里選擇 Maven 項(xiàng)目,然后在項(xiàng)目的pom.xml文件里添加 Spring AI 和 Ollama 相關(guān)的依賴。
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Spring AI -->
<dependency>
<groupId>io.micronaut.ai</groupId>
<artifactId>micronaut-ai-openai</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Ollama -->
<dependency>
<groupId>com.github.jillesvangurp</groupId>
<artifactId>ollama-java</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
這些依賴就是咱們項(xiàng)目的 “彈藥庫(kù)”,有了它們,咱們才能在項(xiàng)目里使用 Spring AI 和 Ollama 的各種功能。添加好依賴之后,Maven 會(huì)自動(dòng)幫咱們下載這些依賴包,耐心等一會(huì)兒就行。
四、配置 Ollama 客戶端
接下來(lái),咱們得配置一下 Ollama 客戶端,這樣咱們的 Spring Boot 項(xiàng)目才能和 Ollama 進(jìn)行通信。在 Spring Boot 項(xiàng)目的src/main/resources目錄下創(chuàng)建一個(gè)application.properties文件,然后在里面添加 Ollama 的配置信息。
ollama.url=http://localhost:11434
ollama.url=http://localhost:11434
這里咱們假設(shè) Ollama 運(yùn)行在本地,端口是 11434,要是你安裝的時(shí)候改了端口,記得把這里的端口號(hào)也改成你自己的。
五、編寫(xiě)代碼調(diào)用 deepseek - r1
配置好之后,就到了最關(guān)鍵的部分啦,編寫(xiě)代碼來(lái)調(diào)用 deepseek - r1。咱們先創(chuàng)建一個(gè) Java 類(lèi),比如說(shuō)叫OllamaService,在這個(gè)類(lèi)里編寫(xiě)調(diào)用 Ollama 和 deepseek - r1 的方法。
import com.github.jillesvangurp.ollama.OllamaClient;
import com.github.jillesvangurp.ollama.api.ChatCompletionRequest;
import com.github.jillesvangurp.ollama.api.ChatCompletionResponse;
import com.github.jillesvangurp.ollama.api.Message;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Service
publicclass OllamaService {
@Value("${ollama.url}")
privateString ollamaUrl;
publicString generateText(String prompt) {
OllamaClient client = new OllamaClient(ollamaUrl);
List<Message> messages = new ArrayList<>();
messages.add(new Message("user", prompt));
ChatCompletionRequest request = new ChatCompletionRequest("deepseek - r1", messages);
ChatCompletionResponse response = null;
try {
response = client.createChatCompletion(request);
} catch (IOException e) {
e.printStackTrace();
}
assert response != null;
return response.getChoices().get(0).getMessage().getContent();
}
}
在這段代碼里,咱們首先創(chuàng)建了一個(gè)OllamaClient對(duì)象,用來(lái)和 Ollama 進(jìn)行通信。然后創(chuàng)建了一個(gè)ChatCompletionRequest對(duì)象,這里指定使用deepseek - r1模型,并且把用戶的輸入(也就是prompt)作為一條消息傳進(jìn)去。接著通過(guò)OllamaClient發(fā)送這個(gè)請(qǐng)求,得到ChatCompletionResponse,最后從響應(yīng)里取出模型生成的文本返回。
六、在 Controller 中使用服務(wù)
代碼寫(xiě)好了,怎么讓它跑起來(lái)呢?咱們還得創(chuàng)建一個(gè) Controller,在 Controller 里調(diào)用這個(gè)OllamaService。創(chuàng)建一個(gè)OllamaController類(lèi)。
import org.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
@RestController
public class OllamaController {
@Autowired
private OllamaService ollamaService;
@GetMapping("/generate")
public String generateText(@RequestParam String prompt) {
returnollamaService.generateText(prompt);
}
}
在這個(gè) Controller 里,咱們通過(guò)@Autowired注解把OllamaService注入進(jìn)來(lái),然后創(chuàng)建了一個(gè)/generate的接口,當(dāng)用戶訪問(wèn)這個(gè)接口并且傳入一個(gè)prompt參數(shù)的時(shí)候,就會(huì)調(diào)用OllamaService的generateText方法,返回模型生成的文本。
七、測(cè)試一下
現(xiàn)在,咱們的項(xiàng)目基本上就大功告成啦!啟動(dòng) Spring Boot 項(xiàng)目,等項(xiàng)目啟動(dòng)成功之后,打開(kāi)瀏覽器,輸入http://localhost:8080/generate?prompt=你好,給我講一個(gè)笑話(這里假設(shè)你的 Spring Boot 項(xiàng)目端口是 8080)。然后回車(chē),稍等一會(huì)兒,你就能看到瀏覽器里返回了一段由 deepseek - r1 模型生成的笑話。
怎么樣,是不是挺簡(jiǎn)單的?通過(guò) Spring AI 和 Ollama,咱們輕輕松松就實(shí)現(xiàn)了對(duì) deepseek - r1 模型的 API 服務(wù)和調(diào)用。當(dāng)然啦,這只是一個(gè)簡(jiǎn)單的示例,在實(shí)際項(xiàng)目中,你可以根據(jù)自己的需求對(duì)代碼進(jìn)行擴(kuò)展和優(yōu)化,比如說(shuō)增加更多的參數(shù)配置,處理更復(fù)雜的輸入輸出等等。
好啦,今天關(guān)于 Spring AI + Ollama 實(shí)現(xiàn) deepseek - r1 的 API 服務(wù)和調(diào)用就講到這里啦。