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 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 服務提供商。