前言导读
前几天有一个朋友找到我需要做一个ai 的展示项目,客户端使用arkts 后端使用java来编写,之前有写过一些springboot 的项目。就想着把ai集成进来即可。那么废话不多说我们正式开始。这里只演示服务端效果
效果图
具体实现
在idea 里面创建spingboot 项目 jdk 版本选择17 因为spirngboot 集成ai 3.5版本最低Java版本需要jdk17
勾上我们的 springboot web 的依赖和Lombok 的依赖
添加springboot 需要的依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
同步拉取依赖,然后我们在 resources 目录下面的application.yml 目录下面添加我们的配置
# In application.yml
spring:
ai:
deepseek:
api-key: XXXXXXXXXXXXX 这里需要改成你自己的appkey
打开deepseek 的官网
创建一个属于自己的apikey
这里注意这个apikey 只能复制一次 并且需要充值才会生效大家可以自己充值再去创建
编写我们的charController 代码
创建我们的 DeepSeekChatModel 实例 并编写我们的ChatController 构造方法
private final DeepSeekChatModel chatModel;
@Autowired
public ChatController(DeepSeekChatModel chatModel) {
this.chatModel = chatModel;
}
-
普通的get请求并返回结果
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatModel.call(message));
}
-
流式get 请求返回结果
这里我们需要注意 设置编码为utf-8 编码不然会出现乱码
@GetMapping( value = "/ai/generateStreamio",produces ="text/html;charset=UTF-8")
public Flux<String> generateStreamio(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt).map(chatResponse -> chatResponse.getResult().getOutput().getText());
}
完整代码
package com.example.springai.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.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import java.util.Map;
@RestController
public class ChatController {
private final DeepSeekChatModel chatModel;
@Autowired
public ChatController(DeepSeekChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatModel.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
@GetMapping( value = "/ai/generateStreamio",produces ="text/html;charset=UTF-8")
public Flux<String> generateStreamio(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt).map(chatResponse -> chatResponse.getResult().getOutput().getText());
}
}
最后总结。
整个的springboot 项目集成deepseek ai 相对来说很简单 过程也比较顺利,如果你需要部署到阿里云服务器或者让腾讯云服务器,只需要把项目打包成jar 然后部署到远程服务器并 启动然后设置成后台启动即可。今天的文章就讲到这里有兴趣的同学可以继续研究 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 如果了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢
团队介绍
团队介绍:坚果派由坚果等人创建,团队由12位华为HDE以及若干热爱鸿蒙的开发者和其他领域的三十余位万粉博主运营。专注于分享 HarmonyOS/OpenHarmony,ArkUI-X,元服务,仓颉,团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,目前已开发鸿蒙 原生应用,三方库60+,欢迎进行课程,项目等合作。
坚果派官网地址 :
如果需要学习更多鸿蒙的知识可以关注我B站教程
课程地址
B站课程地址:www.bilibili.com/cheese/play…
项目内容:
-
1 常用布局组件的学习
-
2 网络请求工具类封装
-
3 arkui 生命周期启动流程
-
4 日志工具类的封装
-
5 自定义组合组件的封装
-
6 路由导航跳转的使用
-
7 本地地数据的缓存 以及缓存工具类的封装
-
8 欢迎页面的实现
-
9 登录案例和自动登录效果实现
-
10 请求网络数据分页上拉加载 下拉刷新的实现
-
11 list数据懒加载实现
-
12 webview组件的使用