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

2025-05-14 06:36:28 152
魁首哥

集成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

这个报错是找不到版本,设置依赖版本即可,我用的是

1.0.0-snapshot

解决无法拉取依赖的远程仓库地址

 
        
        
            spring-milestones
            spring milestones
            https://repo.spring.io/milestone
            
                false
            
        
        
            spring-snapshots
            spring snapshots
            https://repo.spring.io/snapshot
            
                false
            
        
    

解决方案: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 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大模型以及流式传输的文章就介绍到这了,更多相关springboot集成ollama大模型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

分享
海报
152
上一篇:在MyBatis-Plus中关闭SQL日志输出的方法 下一篇:三分钟带你搞懂springboot原理

忘记密码?

图形验证码