《Spring Boot 3实战案例锦集》PDF电子书现已出炉!
🎉🎉我们精心打造的《Spring Boot 3实战案例锦集》PDF电子书现已正式完成,目前已经有96个案例,后续还将继续更新。文末有电子书目录。
💪💪永久更新承诺:
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。随着Spring相关技术的更新升级,我们的电子书也将持续更新,确保您始终掌握最前沿、最实用的技术知识。
💌💌如何获取:
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.0
1. 简介
-
Chat Completion(聊天补全) -
Embedding(嵌入) -
Text to Image(文本转图像) -
Audio Transcription(音频转录) -
Text to Speech(文本转语音) -
Moderation(内容审核)
本篇文章我们将通过Spring AI + Ollama 实现 DeepSeek-r1模型的调用。
2. 实战案例
2.1 Ollama安装
访问如下的网站进行下载安装:
https://ollama.com/
根据自己的环境下载安装,我这里下载的是windows版本。
下载完成后进行安装,安装完成后,我们需要配置OLLAMA_HOST环境变量,进行修改默认绑定的地址及端口。如下:
通过http://localhost:11111测试服务是否正常
接下来就可以在命令行中运行下面的命令了:
由于机器的限制,我们这里只能安装deepseek-r1:1.5b的模型,运行如下的命令:
ollama run deepseek-r1:1.5b
等待下载完成后,我们就进入到下面的界面:
这里随便输入你想问的内容即可,如下:
以上我们就正确的安装ollama并且下载了deepseek-r1模型,下面我们就可以在程序中对接了。
2.2 对接Ollama
首先,引入如下依赖
<properties><spring.ai.version>1.0.0-M6</spring.ai.version></properties><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>${spring.ai.version}</version></dependency>
接着,在application.yml中进行如下的配置
spring:ai:ollama:base-url: http://localhost:11111chat:enabled: trueoptions:# 使用的模型model: deepseek-r1:1.5b
以上就完成了所有的配置。
最后,我们还需要配置一个ChatClient
public class AIConfig {ChatClient chatClient(ChatClient.Builder builder) {return builder.build() ;}}
完成以上的所有配置,我们就可以来写相应的接口进行测试了
定义Controller接口
public class AIController {private final ChatClient chatClient;AIController(ChatClient chatClient) {this.chatClient = chatClient;}// 根据用户输入的内容输出结果,这里我们以Stream的方式输出@GetMapping(value = "/chat", produces = "text/html;charset=utf-8")public Flux<String> chat(String message) {return chatClient.prompt().user(message).stream().content() ;}}
访问如下地址:
http://localhost:8080/ai/chat?message=讲一个笑话,50字内
这里是以打字的效果进行输出。
2.3 通过SSE实现
首先,将接口修改如下:
(value = "/chat", produces = {"text/html;charset=utf-8",MediaType.TEXT_EVENT_STREAM_VALUE})public Flux<String> chat(String message)
添加MediaType.TEXT_EVENT_STREAM_VALUE以支持事件流。
HTML页面如下:
<html lang="en"><head><meta charset="UTF-8"><title>Spring AI + Ollama + DeepSeek-r1:1.5b</title><script>function submitText() {let text = document.querySelector("#userText").value ;let chat = document.querySelector('.chat-content') ;chat.innerHTML = ''let source = new EventSource(`http://localhost:8080/ai/chat?message=${text}`) ;let count = 0 ;let content = '' ;source.onmessage = (e) => {let data = e.dataif (data == '\n' || data == '') {count ++ ;}if (count == 2) {source.close() ;}if (data == '</think>') {chat.appendChild(document.createElement("hr"))}if (data != '<think>' && data != '</think>') {chat.appendChild(document.createTextNode(data)) ;}}}</script><style type="text/css">.chat-content {width: 600px;height: 500px;border: 1px solid #DDD;}</style></head><body><div class="chat-content"></div><input type="text" value="讲一个笑话, 50字内" id="userText"/> <button type="button" onclick="submitText()">提交</button></body></html>
以上代码是有问题的,想了很多办法结束流但是都有问题(不结束将一直请求)。
最终页面效果
以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏
推荐文章
实战技巧!Spring Boot 非常有用的5个开发技巧,请收藏
中级开发!Spring Boot使用@Query + SpEL解决复杂动态查询
技术专家!Spring AOP + Nacos + Prometheus 实现动态限流及实时监控
Jackson在Spring Boot高级应用技巧【Long精度丢失, @JsonValue, 数据脱敏】
Tika 与 Spring Boot 的完美结合:支持任意文档解析的神器


