springBoot集成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测试 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值