springBoot集成Ollama大模型及流式传输的问题小结

阿碹勇闯天涯 2025-04-27 10:31:54编程技术
565

随着人工智能技术的快速发展,大型语言模型在各个领域的应用越来越广泛。Spring Boot作为一种流行的微服务框架,与Ollama大模型的集成可以为企业带来诸多便利。本文将总结Spring Boot集成Ollama大模型及流式传输过程中遇到的一些常见问题及解决方案,帮助开发者更好地利用这一技术。

集成Ollama大模型

1.官网下载Ollama大模型

https://ollama.com/

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
      }
    }
  ]
}

 浏览器测试

postman测试 

springBoot集成Ollama大模型及流式传输的问题小结

总结

通过本文的总结,我们了解了Spring Boot集成Ollama大模型及流式传输的关键点和注意事项。在实际应用中,可能会遇到模型加载失败、版本不兼容、流式传输不稳定等问题。针对这些问题,我们可以采取相应的措施进行解决,如调整模型版本、优化配置参数、使用合适的传输协议等。掌握这些技巧,可以帮助开发者更加顺利地实现Spring Boot与Ollama大模型的集成,提升项目的整体性能和用户体验。

springBoot Ollama
THE END
蜜芽
故事不长,也不难讲,四字概括,毫无意义。

相关推荐

SpringBoot整合EasyExcel实现文件导入导出示例代码详解
Spring Boot作为一种流行的微服务框架,结合EasyExcel这一高性能的Excel处理库,可以实现快速、便捷的文件导入导出功能。本文将通过详细的示例代码,深入解析如何在Spring Bo...
2025-05-21 编程技术
671

本地部署大模型必知:llama、ollama与llama.cpp的区别详解
在本地部署大型语言模型(LLM)时,Llama、Ollama和Llama.cpp是三个高频出现的关键词。三者看似关联紧密,但定位与功能差异显著。本文ZHANID工具网将从技术架构、应用场景、性...
2025-04-28 编程技术
1582

SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'的解决方法
application.yml是Spring Boot中常用的配置文件之一,它以YAML格式存储配置信息,具有简洁易读的特点。然而,在启动Spring Boot应用时,有时会遇到Failed to load property s...
2025-04-11 编程技术
669

SpringBoot3集成EasyExcel实现动态表头重命名技术详解
随着技术的发展,SpringBoot框架因其轻量级和快速开发的特点而广受欢迎。EasyExcel作为一个基于Apache POI的简化库,它提供了一种更高效、更易于处理大数据量Excel文件的方式...
2025-03-31 编程技术
463

SpringBoot项目打包部署到服务器图文详解
对于初学者而言,如何将SpringBoot项目顺利打包并部署到服务器上,往往是一个既关键又充满挑战的步骤。本文将以图文结合的方式,详细阐述SpringBoot项目打包部署的全过程,从...
2025-03-28 编程技术
408

Ubuntu 系统部署 Ollama + DeepSeek + Docker + Ragflow
Ollama和DeepSeek作为当前领先的NLP模型,其强大的功能和灵活性使其在各种应用场景中备受青睐。为了更好地利用这些模型,许多开发者和企业选择在本地环境中进行部署。本文将详...
2025-03-26 编程技术
822