背景介绍
在人工智能领域,大语言模型(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 服务提供商。