Spring AI与Ollama整合离线通义千问模型

愤怒的蜗牛

背景介绍

在人工智能领域,大语言模型(LLM)的发展已经取得了显著进展,这些模型在自然语言处理、知识图谱构建和智能问答等多个方面表现出色。SpringAI 项目旨在简化包含人工智能功能的应用程序的开发,避免不必要的复杂性。该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 SpringAI 并不是这些项目的直接移植。它支持所有主要模型,包括 OpenAI、Ollama、Azure OpenAI、Amazon Bedrock、Huggingface、Google VertextAI、Mistral AI 等。

本文将详细介绍如何使用SpringAI基于Ollama整合通义千问等大语言模型,离线实现AI聊天,并提供一个示例来展示其实现过程。

一、环境准备

在开始之前,需要确保开发环境满足一定的要求,包括安装 JDK、Maven 以及 Spring Boot。Ollama环境以及Qwen模型。

1. 安装 Ollama

Ollama,是一个开源的大语言模型平台,它允许用户在本地环境中运行、创建和共享大型语言模型。Ollama提供了丰富的功能和特性,使得用户可以在自己的计算机上轻松地部署和运行大型语言模型。

下载

首先,需要在本地或服务器上安装 Ollama。以下是在不同操作系统上的安装步骤:

  • Windows:

下载 Ollama 的 Windows 安装包并执行安装程序。

配置环境变量,将 Ollama 的安装路径添加到系统的 PATH 环境变量中。

2. 配置 Ollama

安装完成后电脑右下角有一只骆驼的图标

3. 模型安装

进入Ollama仓库中查询自己需要的模型:https://ollama.com/library, 这里我们想下载qwen模型,通过下面的命令进行下载:

-- 下载模型ollama pull qwen  
-- 运行模型ollama run qwen1.2.3.4.5.

4. 离线模型部署

服务器环境我们需要离线的模型文件,可以通过下面的命令,生成Modelfile,在服务器环境上传即可。

-- 查看模型Modelfileollama show --modelfile qwen-- 创建模型ollama create <your-model-name> -f <./Modelfile>1.2.3.4.5.

a. 根据Modelfile内容查看模型具体位置,并上传到服务器 b. 保存Modelfile文件,并修改FROM子句,改为自己模型位置 c. 执行create命令

二、SpringAI 项目设置

1. 创建 Spring Boot 项目

可以使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖项:

  • Spring Web

  • Spring Boot DevTools

2. 添加 Maven 依赖

在项目的 pom.xml 文件中,添加 Spring Cloud Alibaba AI 的依赖:注意这里将spring-ai-core升级了,不然会有问题

<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      
      <dependency>
          <groupId>org.springframework.ai</groupId>
          <artifactId>spring-ai-core</artifactId>
          <version>1.0.0-M2</version>
      </dependency>
      
      <dependency>
          <groupId>org.springframework.ai</groupId>
          <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.ai</groupId>
                  <artifactId>spring-ai-core</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
    </dependencies></project>1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.

3. 配置文件

在 application.yml 文件中,添加Ollama服务配置并启用通义千问模型:

spring:
  ai:
    ollama:
      base-url: http://127.0.0.1:11434
      chat:
        model: "qwen"
        enabled: trueserver:
  servlet:
    encoding:      charset: utf-8
      enabled: true
      force: true1.2.3.4.5.6.7.8.9.10.11.12.13.14.

三、编写示例代码

下面是一个简单的示例,展示如何使用 SpringAI 与通义千问进行交互,并实现一个基本的聊天功能。

1. 创建控制器类

创建一个名为 ChatController 的控制器类,用于处理用户的聊天请求:

package cn.cycad.ai.qwen.controller;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.beans.factory.annotation.Autowired;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("/chat")public class ChatController {

    private final OllamaChatModel chatModel;

    @Autowired
    public ChatController(OllamaChatModel chatModel) {
        this.chatModel = chatModel;
    }    @GetMapping
    public String generate(@RequestParam(value = "message") String message) {
        ChatResponse response = chatModel.call(new Prompt(message));
        return response.getResult().getOutput().getContent();
    }    @GetMapping("/stream")
 public Flux<String> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        Flux<ChatResponse> stream = this.chatModel.stream(prompt);
        return stream.map(response->response.getResult().getOutput().getContent());
    }

}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.

2. 启动应用

运行 Spring Boot 应用,然后访问 http://localhost:8080/chat?message=你是谁 即可看到通义千问返回的回答。

四、总结与扩展

通过上述步骤,我们成功地将 SpringAI 与通义千问大语言模型整合在一起,并实现了一个简单的聊天功能。这种整合方式不仅简化了开发流程,还提供了强大的灵活性,可以轻松切换不同的 AI 服务提供商。


您需要 登录账户 后才能发表评论

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,11人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码