Spring Boot 集成 Ollama 大模型及流式传输问题总结
随着人工智能技术的快速发展,Spring Boot 作为流行的微服务框架,与 Ollama 大模型的结合越来越受到关注。本文将从实际开发的角度出发,分享在开发过程中遇到的一些问题及解决方案,帮助开发者更高效地完成集成。
集成 Ollama 大模型的步骤
在开始集成前,我们需要先获取并安装 Ollama 大模型。首先可以从其官方网站上下载相关资源。
Ollama 官方网站地址为:https://ollama.com/
接下来,我们需要通过 Docker 来拉取所需的版本镜像。本文中使用的是 llama-3.1-8b 版本。只需按照 Docker 的常规操作即可完成模型的部署。
常见问题及解决方案
JDK 版本错误问题
在开发过程中,可能会遇到以下错误信息:
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 8(即版本 52.0)编译的,但项目配置中使用的是 Java 17(版本 61.0)。解决方法是将 spring 的 parent 版本调整为兼容的版本。在本文案例中,使用了 JDK 17,并将 parent 版本配置为 3.3.1。
依赖版本无法拉取问题
在构建项目时,可能会遇到以下问题:
Dependency 'org.springframework.ai:spring-ai-ollama-spring-boot-starter:' not found
该问题通常是由于依赖版本不存在或配置错误引起的。确认依赖版本无误后,只需在项目中添加以下配置即可解决:
<spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
另外,还需要在 pom 文件中添加远程仓库的配置:
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
配置项解析
application.yml 配置
server:
port: 8888
spring:
application:
name: Cleaner-AI
ai:
ollama:
base-url: http://localhost:11434
chat:
enabled: true
model: llama3.1:8b
options:
temperature: 0.7
在配置文件中,我们设置了 Ollama 服务的访问地址和默认模型]
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;
@GetMapping("/streamChat")
public Flux<ChatResponse> generateStream(@RequestParam("message") String message) {
message = "请使用中文简体回答:" + message;
Prompt prompt = new Prompt(new UserMessage(message));
return ollamaChatModel.stream(prompt);
}
@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();
}
}
在 Controller 中,我们实现了两种消息处理方式:流式传输和普通输出。用户可以根据实际需求选择合适的处理方式。
功能测试示例
当发送一个包含用户消息的请求时,系统会返回如下的 JSON 结果:
{
"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
}
}
]
}
我们可以在 Postman 中进行功能测试,如下所示:
总结
通过本文的总结,我们了解了 Spring Boot 集成 Ollama 大模型及流式传输的关键点和注意事项。在实际应用中,可能会遇到模型加载失败、版本不兼容、流式传输不稳定等问题。针对这些问题,我们可以采取相应的措施进行解决,如调整模型版本、优化配置参数、使用合适的传输协议等。掌握这些技巧,可以帮助开发者更加顺利地实现 Spring Boot 与 Ollama 大模型的集成,提升项目的整体性能和用户体验。
