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
该问题通常是由于依赖版本不存在或配置错误引起的。确认依赖版本无误后,只需在项目中添加以下配置即可解决:
1.0.0-SNAPSHOT
另外,还需要在 pom 文件中添加远程仓库的配置:
spring-milestones https://repo.spring.io/milestone spring-snapshots https://repo.spring.io/snapshot
配置项解析
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 FluxgenerateStream(@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 大模型的集成,提升项目的整体性能和用户体验。