springBoot集成Ollama大模型及流式傳輸?shù)膯?wèn)題小結(jié)
集成Ollama大模型
1.官網(wǎng)下載Ollama大模型
2.拉取版本鏡像,使用操作類(lèi)似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ú)法訪(fǎng)問(wèn)org.springframework.ai.ollama.OllamaChatClient
錯(cuò)誤的類(lèi)文件: /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
類(lèi)文件具有錯(cuò)誤的版本 61.0, 應(yīng)為 52.0
請(qǐng)刪除該文件或確保該文件位于正確的類(lèi)路徑子目錄中。
jdk版本錯(cuò)誤
Java類(lèi)文件的版本號(hào)對(duì)應(yīng)著特定的Java編譯器版本。在Java中,不同的Java編譯器版本會(huì)生成不同版本號(hào)的類(lèi)文件。這些版本號(hào)可以幫助Java虛擬機(jī)(JVM)確定類(lèi)文件的兼容性。
具體來(lái)說(shuō),Java類(lèi)文件的版本號(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)目中的類(lèi)文件是使用 Java 8 編譯器編譯的。
因此,如果您的項(xiàng)目需要運(yùn)行這些類(lèi)文件,您的開(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的依賴(lài)版本無(wú)法拉取:
Dependency 'org.springframework.ai:spring-ai-ollama-spring-boot-starter:' not found
這個(gè)報(bào)錯(cuò)是找不到版本,設(shè)置依賴(lài)版本即可,我用的是
<spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
解決無(wú)法拉取依賴(lài)的遠(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
# 使用的模型名稱(chēng)
model:
llama3.1:8b
# 你自己下載的模型的版本
options:
temperature: 0.7Controller配置
我用的是兩種訪(fǎng)問(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ì)話(huà)
*
* @param message 用戶(hù)指令
* @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ì)話(huà)
* @param message 用戶(hù)指令
* @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ì)孩子的稱(chēng)呼,尤其是在一些非洲國(guó)家,如肯尼亞和坦桑尼亞,是一種常見(jiàn)的稱(chēng)呼方式。這個(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)畫(huà)效果
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)兩張圖片2D翻轉(zhuǎn)動(dòng)畫(huà)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目
這篇文章主要介紹了使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-12-12
SpringBoot @Autowired注解注入規(guī)則介紹
這篇文章主要介紹了SpringBoot @Autowired注解注入規(guī)則介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-11-11

