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

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

背景介绍

在人工智能领域,大语言模型(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 qwen

4. 离线模型部署

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

-- 查看模型Modelfile
ollama show --modelfile qwen

-- 创建模型
ollama create <your-model-name> -f <./Modelfile>

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>

3. 配置文件

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

spring:
  ai:
    ollama:
      base-url: http://127.0.0.1:11434
      chat:
        model: "qwen"
        enabled: true

server:
  servlet:
    encoding:
      charset: utf-8
      enabled: true
      force: true

三、编写示例代码

下面是一个简单的示例,展示如何使用 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());
    }

}

2. 启动应用

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

四、总结与扩展

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

责任编辑:武晓燕 来源: Java技术指北
相关推荐

2024-10-28 08:26:55

SpringAI语言模型1. 多模型

2024-06-11 09:20:48

2024-05-09 11:52:30

通义大模型通义

2023-04-07 14:01:18

ChatGPT人工智能

2023-08-03 19:11:45

2023-12-04 09:55:58

AI大模型

2023-04-11 15:49:17

阿里云峰会人工智能

2023-04-11 13:40:22

阿里云大模型通义千问

2024-08-30 15:19:22

2023-12-01 13:36:01

阿里云通义千问

2024-12-02 08:00:00

2024-01-26 13:19:00

模型数据

2024-05-21 11:35:48

阿里云通义千问

2023-11-01 19:03:58

GPT-4

2024-02-06 12:50:08

AI训练

2023-10-31 15:26:02

阿里云通义千问

2023-12-01 12:31:22

AI模型

2024-04-30 14:11:00

训练模型

2023-08-28 00:50:14

模型开源
点赞
收藏

51CTO技术栈公众号