springBoot集成Ollama大模型及流式傳輸?shù)膯栴}小結(jié)
集成Ollama大模型
1.官網(wǎng)下載Ollama大模型
2.拉取版本鏡像,使用操作類似docker
我用的是llama3.1:8b的版本
3.問題集合
D:\jiyunShiXunStudy\shixun2\spring-ai\src\main\java\com\ryx\ollama\controller\AiController.java:4:37
java: 無(wú)法訪問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)確定類文件的兼容性。
具體來說,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)行這些類文件,您的開發(fā)環(huán)境和運(yùn)行環(huán)境都需要支持 Java 8 或更高的版本。
一般來講這個(gè)錯(cuò)誤spring的parent版本不合適,修改版本即可,我用的jkd17,對(duì)應(yīng)parent為3.3.1
問題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ù)來源
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.7Controller配置
我用的是兩種訪問的方案,流式傳輸和普通輸出
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ó)家,如肯尼亞和坦桑尼亞,是一種常見的稱呼方式。這個(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è)計(jì)通用的返回?cái)?shù)據(jù)格式過程講解
現(xiàn)在很多的項(xiàng)目server端返回client端的數(shù)據(jù)多數(shù)以JSON格式返回,同時(shí)結(jié)合其它需要,通常加一下狀態(tài)碼和信息之類,給前端處理帶來很大的方便,這篇文章就用Java設(shè)計(jì)了通用的返回?cái)?shù)據(jù)格式,感興趣的同學(xué)可以參考下文2023-05-05
Java中this關(guān)鍵字的4種用法詳解(附常見面試題)
在Java的編程世界里,this關(guān)鍵字宛如一把神奇的鑰匙,看似簡(jiǎn)單,卻蘊(yùn)含著強(qiáng)大的功能,這篇文章主要介紹了Java中this關(guān)鍵字的4種用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-06-06
DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明
這篇文章主要介紹了DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn)
本文主要介紹了SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SpringBoot整合FFmpeg進(jìn)行視頻處理的詳細(xì)教學(xué)
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合FFmpeg進(jìn)行視頻處理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決
這篇文章主要介紹了springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
將應(yīng)用程序進(jìn)行Spring6遷移的最佳使用方式
這篇文章主要介紹了將應(yīng)用程序進(jìn)行Spring6遷移的最佳方式,以及如何充分利用此升級(jí),需要的朋友可以參考下,如有錯(cuò)誤的地方還請(qǐng)指正2023-03-03
SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫(kù)存的項(xiàng)目實(shí)踐
在開發(fā)中,異步任務(wù)應(yīng)用的場(chǎng)景非常的廣泛,本文主要介紹了SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫(kù)存的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
SpringBoot rabbitmq長(zhǎng)鏈接及域名TTL多機(jī)房切換配置重連能力(完整配置方案)
本文介紹了在SpringBoot中配置RabbitMQ以解決長(zhǎng)連接穩(wěn)定性、域名TTL問題及機(jī)房切換后的自動(dòng)重連能力的完整配置方案,通過優(yōu)化連接工廠參數(shù)、刷新DNS緩存和增強(qiáng)重連策略,確保RabbitMQ在各種網(wǎng)絡(luò)環(huán)境下穩(wěn)定運(yùn)行,感興趣的朋友跟隨小編一起看看吧2026-02-02

