
Spring AI集成Ollama调用本地大模型DeepSeek
Spring AI 是一个强大的框架,它使得开发者能够轻松地将 AI 功能集成到 Spring Boot 应用程序中。本文将通过一个简单的示例,展示如何使用 Spring AI 集成Ollama 并调用本地化DeepSeek大模型,实现跟deepseek简单的聊天对话功能。
Spring AI 是一个强大的框架,它使得开发者能够轻松地将 AI 功能集成到 Spring Boot 应用程序中。本文将通过一个简单的示例,展示如何使用 Spring AI 集成Ollama 并调用本地化DeepSeek大模型,实现跟deepseek简单的聊天对话功能。
1、前提条件
在开始之前,需要确保 DeepSeek 模型已经在本地环境中正确部署。关于“如何使用Ollama本地化部署DeepSeek ”,请参考其它文档,本文不作介绍。
2、配置 application.yml
创建springboot工程后,配置application.yml。为了确保应用程序能够正确连接到本地部署的 Ollama 模型,我们需要在application.yml文件中进行相应的配置,我是部署了DeepSeek-R1-Distill-Qwen-32B-GGUF:Q4_K_M模型,读者可以根据自己部署的模型版本,修改如下参数。
server:
port: 8080
spring:
application:
name: spring-ai-ollama-demo
ai:
ollama:
base-url: https:/127.0.0.1:8443
chat:
model: modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF:Q4_K_M
3、集成 Ollama 到 Spring AI 框架
接下来,我们将详细介绍如何将 Ollama 集成到 Spring AI 框架中。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yuncheng</groupId>
<artifactId>spring-ai-deepseek-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-ai.version>1.0.0-M5</spring-ai.version>
<spring-ai-alibaba.version>1.0.0-M5.1</spring-ai-alibaba.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>${spring-ai.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
4、创建控制器类
创建一个控制器类 DeepSeekClientController,用于处理与 AI 模型的交互。
import jakarta.servlet.http.HttpServletResponse;
import reactor.core.publisher.Flux;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/ollama/deepseek")
public class DeepSeekClientController {
private static final String DEFAULT_PROMPT = "你好,介绍下你自己!请用中文回答。";
private final ChatClient ollamaiChatClient;
public DeepSeekClientController(ChatModel chatModel) {
// 构造时,可以设置 ChatClient 的参数
// {@link org.springframework.ai.chat.client.ChatClient};
this.ollamaiChatClient = ChatClient.builder(chatModel)
// 实现 Chat Memory 的 Advisor
// 在使用 Chat Memory 时,需要指定对话 ID,以便 Spring AI 处理上下文。
.defaultAdvisors(
new MessageChatMemoryAdvisor(new InMemoryChatMemory())
)
// 实现 Logger 的 Advisor
.defaultAdvisors(
new SimpleLoggerAdvisor()
)
// 设置 ChatClient 中 ChatModel 的 Options 参数
.defaultOptions(
OllamaOptions.builder()
.topP(0.7)
.build()
)
.build();
}
/**
* ChatClient 简单调用
*/
@GetMapping("/simple/chat")
public String simpleChat(String input) {
return ollamaiChatClient.prompt(DEFAULT_PROMPT).user(input).call().content();
}
/**
* ChatClient 流式调用
*/
@GetMapping("/stream/chat")
public Flux<String> streamChat(HttpServletResponse response,String input) {
response.setCharacterEncoding("UTF-8");
return ollamaiChatClient.prompt(DEFAULT_PROMPT).user(input).stream().content();
}
}
在构造函数中,初始化了一个ChatClient实例,并设置了几个关键的顾问(Advisor)来增强其功能:
1)MessageChatMemoryAdvisor:用于管理对话上下文的记忆。通过使用 InMemoryChatMemory,我们可以保存用户的对话历史记录,从而实现连续对话。
2) SimpleLoggerAdvisor:用于记录日志,帮助调试和监控对话过程。
3) OllamaOptions:配置了模型的一些参数,例如topP(采样阈值),以控制生成文本的质量和多样性。
本RestController提供了两个方法来处理不同的请求:
1)简单调用 (/simple/chat):接收用户输入并返回 AI 模型的响应。使用 .call()方法同步获取结果。
2)流式调用 (/stream/chat):接收用户输入并以流的形式返回 AI 模型的响应。使用 .stream()方法异步获取结果,适合处理长文本或需要实时更新的情况。
5、测试deepseek对话聊天
启动springboot工程后,就可以使用deepseek进行对话聊天了,可以发送如下 HTTP 请求:
1)简单调用:
http://localhost:8080/ollama/deepseek/simple/chat?input=你叫什么名字?
2)流式调用:
http://localhost:8080/ollama/deepseek/stream/chat?input=你叫什么名字?
对于第一个请求,你会得到一个完整的 JSON 响应,包含 AI 模型的回答。而对于第二个请求,响应会以流的形式逐步返回,适合实时显示给用户。
更多推荐
所有评论(0)