开发者

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

目录
  • 集成Ollama大模型
    • 1.官网下载Ollama大模型
    • 2.拉取版本镜像,使用操作类似docker
    • 3.问题集合
      • jdk版本错误
      • 问题2:ai的依赖版本无法拉取:
      • 解决无法拉取依赖的远程仓库地址
      • 解决方案:1:配置一下远程仓库来源
    • yml配置
      • Controller配置
        • 返回值示例
          •  浏览器测试

          集成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 编译器编译的。nPDODlHzR

          因此,如果您的项目需要运行这些类文件,您的开发环境和运行环境都需要支持 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
              nPDODlHzR},
              "rateLimit": "org.springframework.ai.chat.metadata.EmptyRateLimit@13f24745"
            },
            "generations": [
              {
                "assistantMessage": {
                  "messageType": "ASSISTANT",
             http://www.devze.com     "toolCalls": [],
                  "textContent": "叫爹是指父母对孩子的称呼,尤其是在一些非洲国家,如肯尼亚和坦桑尼亚,是一种常见的称呼方式。这个习惯也存在于其他地区,如加拿大、美国等地的某些社区中。",
                  "metadata": {
                    "messageTypejavascript": "ASSISTANT"
                  }
                },
                "chatGenerationMetadata": {
                  "finishReason": "stop",
                  "contentFilterMetadata": null
                }
              }
            ]
          }

           浏览器测试

          postman测试 

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

          到此这篇关于springBoot集成Ollama大模型以及流式传输的文章就介绍到这了,更多相关springBoot集成Ollama大模型内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜