集成Ollama大模型
1.官网下载Ollama大模型
2.拉取版本镜像,使用操作类似docker
我用的是llama3.1:8b的版本
3.问题集合
D:\jiyunShiXunStudy\shixun2\spring-ai\src\main\java\com\ryx\ollama\controller\AiController.java:4:37
java: 无法访问org.springframework.ai.ollama.OllamaChatClient
错误的类文件: /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
类文件具有错误的版本 61.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。
jdk版本错误
Java类文件的版本号对应着特定的Java编译器版本。在Java中,不同的Java编译器版本会生成不同版本号的类文件。这些版本号可以帮助Java虚拟机(JVM)确定类文件的兼容性。
具体来说,Java类文件的版本号对应如下:
- Java 1.0对应版本号 45.0
- Java 1.1对应版本号 45.3
- Java 1.2对应版本号 46.0
- Java 1.3对应版本号 47.0
- Java 1.4对应版本号 48.0
- Java 5对应版本号 49.0
- Java 6对应版本号 50.0
- Java 7对应版本号 51.0
- Java 8对应版本号 52.0
- Java 9对应版本号 53.0
- Java 10对应版本号 54.0
- Java 11对应版本号 55.0
- Java 12对应版本号 56.0
- Java 13对应版本号 57.0
- Java 14对应版本号 58.0
- Java 15对应版本号 59.0
- Java 16对应版本号 60.0
- Java 17对应版本号 61.0
在您的情况中,错误信息中提到的版本号 52.0 对应着 Java 8。这意味着您的项目中的类文件是使用 Java 8 编译器编译的。
因此,如果您的项目需要运行这些类文件,您的开发环境和运行环境都需要支持 Java 8 或更高的版本。
一般来讲这个错误spring的parent版本不合适,修改版本即可,我用的jkd17,对应parent为3.3.1
问题2:ai的依赖版本无法拉取:
Dependency 'org.springframework.ai:spring-ai-ollama-spring-boot-starter:' not found
这个报错是找不到版本,设置依赖版本即可,我用的是
<spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
解决无法拉取依赖的远程仓库地址
<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:配置一下远程仓库来源
yml配置
server:
port: 8888
spring:
application:
name: Cleaner-AI
ai:
ollama:
# ollama API Server 地址默认的他就是11434
base-url: http://localhost:11434
chat:
enabled: true
# 使用的模型名称
model:
llama3.1:8b
# 你自己下载的模型的版本
options:
temperature: 0.7
Controller配置
我用的是两种访问的方案,流式传输和普通输出
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;
/**
* 流式对话
*
* @param message 用户指令
* @return
*/
@GetMapping("/streamChat")
public Flux<ChatResponse> generateStream(@RequestParam("message") String message) {
message = "请使用中文简体回答:" + message;
Prompt prompt = new Prompt(new UserMessage(message));
return ollamaChatModel.stream(prompt);
}
/**
* 普通对话
* @param message 用户指令
* @return
*/
@GetMapping("/chat")
public String generate(@RequestParam("message") String message) {
message = "请使用中文简体回答:" + 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": "叫爹是指父母对孩子的称呼,尤其是在一些非洲国家,如肯尼亚和坦桑尼亚,是一种常见的称呼方式。这个习惯也存在于其他地区,如加拿大、美国等地的某些社区中。",
"metadata": {
"messageType": "ASSISTANT"
}
},
"chatGenerationMetadata": {
"finishReason": "stop",
"contentFilterMetadata": null
}
}
]
}
浏览器测试