1.概述
Spring AI 是一个为 Java 开发者设计的应用框架,其核心目标是将生成式 AI 能力(如大语言模型)以 Spring 生态特有的"习惯法"无缝集成到企业级应用中。本文将介绍deepseek模型本地化部署,并利用springAI开发应用,实现智能问答。
2.基于SpringAI开发的智能问答
2.1 docker安装部署deepseek
大模型的安装主要基于Ollama实现,Ollama 是一个将大型语言模型(LLM)的运行门槛降到"个人开发者级别"的开源工具,它能够让用户像安装APP一样安装大模型。
2.1.1 安装ollama
可以根据需要安装对应版本ollama,如果该指令无法获取到对应版本镜像,可以从华为云或者阿里云镜像仓库获取所需要版本。
docker pull ollama/ollama:0.5.10
也可以下载ollama二进制安装包进行安装。
2.1.2 运行ollama
docker run -d --name ollama -p 11434:11434
通过docker ps检查是否安装成功,如果出现如下信息,说明成功运行。

2.1.3 安装deepseek大模型
1.选择模型
在ollama官网选择所需要安装的模型,每个模型都有多个版本,可以根据服务器的配置进行安装,如果下载的模型运行需要较大资源,可能会无法运行。

本文选择deepseek-r1:1.5b,模型大小1.5G,2C4G勉强能运行。

2.进入ollama容器
bash
docker exec -it <containerId> bash
3.下载并安装模型
在容器中执行如下命令
bash
//下载模型
ollama pull deepseek-r1:1.5b
//运行模型
ollama run deepseek-r1:1.5b
验证模型运行状态,指令如下:
bash
ollama ps
如果出现如下信息,说明模型运行正常。

至此,deepseek模型部署完毕。由于我的服务器资源有限,因此选择了一个比较小的模型,在实际的测试中,可能会有响应较慢的情况。如果大家服务器资源充足,建议选择一个性能更好的模型,体验会更好点。
2.2 SpringAI整合deepseek实现智能问答
本文选择的springAI版本为2.0.0-M2,是目前最新的版本,1.0部分的接口和2.0的区别还是比较大的,选择时要注意,spring-boot-starter的版本选择4.0.2。
2.2.1 引入pom文件
java
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.eckey.lab</groupId>
<artifactId>ollama</artifactId>
<version>1.0.0</version>
<name>ollama-chat</name>
<properties>
<java.version>17</java.version>
<spring-ai.version>2.0.0-M2</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2.2 配置OllamaChatModel
java
@Configuration
public class OllamaConfig {
@Bean
public ChatClient chatClient(OllamaChatModel ollamaChatModel, ChatMemory chatMemory) {
return ChatClient.builder(ollamaChatModel)
//模型系统提示词
.defaultSystem("你是一个热心、可爱的智能助手,你的名字叫小钢炮,请以小钢炮的身份和语气回答问题")
.defaultAdvisors(
new SimpleLoggerAdvisor())
.build();
}
}
2.2.3 配置文件编写
java
spring.application.name=ollama-chat
server.port=8080
//ollama服务器地址
spring.ai.ollama.base-url=http://127.0.0.1:11434
//模型版本号
spring.ai.ollama.chat.model=deepseek-r1:1.5b
//日志打印级别
logging.level.org.springframework.ai.chat.client.advisor=debug
2.2.4 编写controller
java
@RestController()
@CrossOrigin("*")
@RequestMapping("/ai/chat/")
public class OllamaController {
@Resource
private ChatClient chatClient;
//同步返回,获取完模型的所有答案后才返回
@GetMapping
public String generate(@RequestParam("message") String message) {
return chatClient.prompt(message).call().content();
}
//流式输出,逐步返回模型思考结果
@RequestMapping(value = "/stream", produces = "text/html;charset=utf-8")
public Flux<String> generateStream(String prompt, String chatId) {
chatHistoryRepository.save(ChatTypeEnums.CHAT.getType(), chatId);
return chatClient.prompt(prompt).stream().content();
}
}
2.2.5 测试


流式输出会逐步输出返回结果,对用户来说更友好。由于我们添加了系统提示词,指定它是一个智能助手,名字叫小钢炮,所以它的回答还算正确。至此我们实现了一个简单的问答模型,可以用大模型写一个简单的前端页面,就可以进行交互测试了。
3.小结
1.本文利用SpirngAI实现了一个简单的智能助手,功能非常简单,但是也体现了springAI的开箱即用;
2.利用SpringAI实现的简单助手,还不够完善,没有集成上下文记忆功能,导致问答没有连续性,下一篇博客将介绍如何实现会话记忆功能;
3.选择SpringAI的版本很重要,不同版本的API是不一样的,存在较大差异,需要严格按照相关版本进行集成。