springBoot集成Ollama大模型及流式傳輸?shù)膯?wèn)題小結(jié)
集成Ollama大模型
1.官網(wǎng)下載Ollama大模型
2.拉取版本鏡像,使用操作類似docker
我用的是llama3.1:8b的版本
3.問(wèn)題集合
D:\jiyunShiXunStudy\shixun2\spring-ai\src\main\java\com\ryx\ollama\controller\AiController.java:4:37
java: 無(wú)法訪問(wèn)org.springframework.ai.ollama.OllamaChatClient
錯(cuò)誤的類文件: /D:/java/repository_xsx/io/springboot/ai/spring-ai-ollama/1.0.3/spring-ai-ollama-1.0.3.jar!/org/springframework/ai/ollama/OllamaChatClient.class
類文件具有錯(cuò)誤的版本 61.0, 應(yīng)為 52.0
請(qǐng)刪除該文件或確保該文件位于正確的類路徑子目錄中。
jdk版本錯(cuò)誤
Java類文件的版本號(hào)對(duì)應(yīng)著特定的Java編譯器版本。在Java中,不同的Java編譯器版本會(huì)生成不同版本號(hào)的類文件。這些版本號(hào)可以幫助Java虛擬機(jī)(JVM)確定類文件的兼容性。
具體來(lái)說(shuō),Java類文件的版本號(hào)對(duì)應(yīng)如下:
- Java 1.0對(duì)應(yīng)版本號(hào) 45.0
- Java 1.1對(duì)應(yīng)版本號(hào) 45.3
- Java 1.2對(duì)應(yīng)版本號(hào) 46.0
- Java 1.3對(duì)應(yīng)版本號(hào) 47.0
- Java 1.4對(duì)應(yīng)版本號(hào) 48.0
- Java 5對(duì)應(yīng)版本號(hào) 49.0
- Java 6對(duì)應(yīng)版本號(hào) 50.0
- Java 7對(duì)應(yīng)版本號(hào) 51.0
- Java 8對(duì)應(yīng)版本號(hào) 52.0
- Java 9對(duì)應(yīng)版本號(hào) 53.0
- Java 10對(duì)應(yīng)版本號(hào) 54.0
- Java 11對(duì)應(yīng)版本號(hào) 55.0
- Java 12對(duì)應(yīng)版本號(hào) 56.0
- Java 13對(duì)應(yīng)版本號(hào) 57.0
- Java 14對(duì)應(yīng)版本號(hào) 58.0
- Java 15對(duì)應(yīng)版本號(hào) 59.0
- Java 16對(duì)應(yīng)版本號(hào) 60.0
- Java 17對(duì)應(yīng)版本號(hào) 61.0
在您的情況中,錯(cuò)誤信息中提到的版本號(hào) 52.0 對(duì)應(yīng)著 Java 8。這意味著您的項(xiàng)目中的類文件是使用 Java 8 編譯器編譯的。
因此,如果您的項(xiàng)目需要運(yùn)行這些類文件,您的開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境都需要支持 Java 8 或更高的版本。
一般來(lái)講這個(gè)錯(cuò)誤spring的parent版本不合適,修改版本即可,我用的jkd17,對(duì)應(yīng)parent為3.3.1
問(wèn)題2:ai的依賴版本無(wú)法拉取:
Dependency 'org.springframework.ai:spring-ai-ollama-spring-boot-starter:' not found
這個(gè)報(bào)錯(cuò)是找不到版本,設(shè)置依賴版本即可,我用的是
<spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
解決無(wú)法拉取依賴的遠(yuǎn)程倉(cāng)庫(kù)地址
<repositories> <!-- spring ai --> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories>
解決方案:1:配置一下遠(yuǎn)程倉(cāng)庫(kù)來(lái)源
yml配置
server: port: 8888 spring: application: name: Cleaner-AI ai: ollama: # ollama API Server 地址默認(rèn)的他就是11434 base-url: http://localhost:11434 chat: enabled: true # 使用的模型名稱 model: llama3.1:8b # 你自己下載的模型的版本 options: temperature: 0.7
Controller配置
我用的是兩種訪問(wèn)的方案,流式傳輸和普通輸出
package com.ryx.ollama.controller; ? import jakarta.annotation.Resource; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.ollama.OllamaChatModel; 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; import reactor.core.publisher.Flux; ? @RestController @RequestMapping("ai") public class AiController { @Resource private OllamaChatModel ollamaChatModel; ? /** * 流式對(duì)話 * * @param message 用戶指令 * @return */ @GetMapping("/streamChat") public Flux<ChatResponse> generateStream(@RequestParam("message") String message) { message = "請(qǐng)使用中文簡(jiǎn)體回答:" + message; Prompt prompt = new Prompt(new UserMessage(message)); return ollamaChatModel.stream(prompt); } ? /** * 普通對(duì)話 * @param message 用戶指令 * @return */ @GetMapping("/chat") public String generate(@RequestParam("message") String message) { message = "請(qǐng)使用中文簡(jiǎn)體回答:" + message; Prompt prompt = new Prompt(new UserMessage(message)); ChatResponse chatResponse = ollamaChatModel.call(prompt); String content = chatResponse.getResult().getOutput().getContent(); System.out.println("content = " + content); return chatResponse.toString(); } } ?
返回值示例
{ "metadata": { "id": "", "usage": { "promptTokens": 21, "generationTokens": 60, "totalTokens": 81 }, "rateLimit": "org.springframework.ai.chat.metadata.EmptyRateLimit@13f24745" }, "generations": [ { "assistantMessage": { "messageType": "ASSISTANT", "toolCalls": [], "textContent": "叫爹是指父母對(duì)孩子的稱呼,尤其是在一些非洲國(guó)家,如肯尼亞和坦桑尼亞,是一種常見(jiàn)的稱呼方式。這個(gè)習(xí)慣也存在于其他地區(qū),如加拿大、美國(guó)等地的某些社區(qū)中。", "metadata": { "messageType": "ASSISTANT" } }, "chatGenerationMetadata": { "finishReason": "stop", "contentFilterMetadata": null } } ] }
瀏覽器測(cè)試
postman測(cè)試
到此這篇關(guān)于springBoot集成Ollama大模型以及流式傳輸?shù)奈恼戮徒榻B到這了,更多相關(guān)springBoot集成Ollama大模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)兩張圖片2D翻轉(zhuǎn)動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)兩張圖片2D翻轉(zhuǎn)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目
這篇文章主要介紹了使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-12-12SpringBoot @Autowired注解注入規(guī)則介紹
這篇文章主要介紹了SpringBoot @Autowired注解注入規(guī)則介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-11-11