上一篇文章,我们介绍了如何在本地部署deepseek,这一篇我们继续学以致用,探索一下如何通过springAI 框架快速继承我们的deepseek服务,实现对外服务的功能。
1. 创建一个springboot ai项目
springboot提供了一个ai框架,可以快速创建一个ai项目,并可以通过配置的方式,快速集成:
openai
智谱ai
千帆ai
google vertexAI
Azure openAI
deepseek
- 月之暗面
kimi
英伟达chat
- IBM的
watsonX ai
ollma
大模型
- 各种常见的向量数据库
可以看到,deepseek很快就集成进去了,正好满足我们的诉求。
构建项目
打开springboot的快速构建页面,添加Open AI
和 Spring Reactive Web
两个依赖,然后开始。

Open AI
是一个chat框架,除了接入openai外,还可以接入我们的deepseek r1模型。
Spring Reactive Web
是交互式web框架,deepseek的流式交互需要用的此框架,而我们部署的deepseek r1 1.5b
模型似乎只支持流式交互,所以需要用到此框架。
- 神奇的时,如果我连deepseek官方的满血r1模型,及时不是流式交互,也是可以的,这里尚未找到原因,有知道的朋友可以解答一下。
这就是我们创建好的springboot AI项目的pom配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
api接口
chat controller 接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| @RestController @RequestMapping("/ai/chat") public class ChatController {
private final OpenAiChatModel chatModel;
@Autowired public ChatController(OpenAiChatModel chatModel) { this.chatModel = chatModel; }
@GetMapping("/generate") public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) { String uuid = UUID.randomUUID().toString(); System.out.printf("uid=%s, message: %s%n", uuid, message); String res = this.chatModel.call(message); System.out.printf("uid=%s, message: %s%n", uuid, res); return Map.of("generation", res); }
@GetMapping("/generateStream") public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) { Prompt prompt = new Prompt(new UserMessage(message)); return this.chatModel.stream(prompt); } }
|
- generate: 阻塞式接口,如果我们介入的deepseekV3模型,R1满血模型,可以用这个接口请求,会一次性把回答全部返回。需要添加依赖
spring-boot-starter-web
- generateStream:流式接口,如果deepseekV3模型,R1模型,可以用这个接口请求,会一个字一个字返回数据。 经验证,R1的1.5B模型仅支持流式交互。
配置deepseek
最后,我们就可以介入自己搭建的deepseek了
1 2 3 4 5 6
| # r1 模型需要使用流模式 spring.ai.openai.base-url=http://192.168.2.68:8000 spring.ai.openai.api-key=test-key # 自己搭建的模型不用key spring.ai.openai.chat.options.model=model/DeepSeek-R1-Distill-Qwen-1.5B spring.ai.openai.embedding.enabled=false
|
启动项目
然后在浏览器里访问http://localhost:8080/ai/chat/generateStream?message=你是谁
,就可以看到deepseek的回答了,会看到一长串的流式数据,类似下面:

参考
spring AI 官方文档
github demo代码