From 69d058922231780927cdec42085f70be363aa88a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= <2270033969@qq.com>
Date: Wed, 12 Mar 2025 12:05:58 +0800
Subject: [PATCH] =?UTF-8?q?feat(ai-chat):=20=E6=B7=BB=E5=8A=A0=20AI=20?=
=?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=20DTO=20=E5=92=8C=E6=8E=A7=E5=88=B6=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 `AiChatMessageDTO` 用于处理 AI 聊天消息
- 新增 `AiChatController` 提供 AI 聊天接口,支持普通聊天和网络搜索模式
- 在 `pom.xml` 中添加大模型相关依赖
---
.../pigx/admin/api/dto/AiChatMessageDTO.java | 23 +++++++++
pigx-upms/pigx-upms-biz/pom.xml | 9 ++++
.../admin/controller/AiChatController.java | 50 +++++++++++++++++++
3 files changed, 82 insertions(+)
create mode 100644 pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/AiChatMessageDTO.java
create mode 100644 pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/AiChatController.java
diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/AiChatMessageDTO.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/AiChatMessageDTO.java
new file mode 100644
index 000000000..db00bef99
--- /dev/null
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/AiChatMessageDTO.java
@@ -0,0 +1,23 @@
+package com.pig4cloud.pigx.admin.api.dto;
+
+import lombok.Data;
+
+/**
+ * AI 聊天消息 DTO
+ *
+ * @author lengleng
+ * @date 2025/02/20
+ */
+@Data
+public class AiChatMessageDTO {
+
+ /**
+ * 消息
+ */
+ private String message;
+
+ /**
+ * 网络搜索
+ */
+ private boolean webSearch;
+}
diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml
index 239b4cb37..19430deae 100644
--- a/pigx-upms/pigx-upms-biz/pom.xml
+++ b/pigx-upms/pigx-upms-biz/pom.xml
@@ -174,6 +174,15 @@
org.dromara.sms4j
sms4j-oa-core
+
+
+ io.github.pig-mesh.ai
+ deepseek-spring-boot-starter
+
+
+ com.pig4cloud
+ pigx-common-sse
+
org.apache.velocity
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/AiChatController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/AiChatController.java
new file mode 100644
index 000000000..4902f46f3
--- /dev/null
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/AiChatController.java
@@ -0,0 +1,50 @@
+package com.pig4cloud.pigx.admin.controller;
+
+import com.pig4cloud.pigx.admin.api.dto.AiChatMessageDTO;
+import io.github.pigmesh.ai.deepseek.core.DeepSeekClient;
+import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
+
+import java.util.Optional;
+
+/**
+ * AI 聊天控制器
+ *
+ * @author lengleng
+ * @date 2025/02/20
+ */
+@Slf4j
+@RestController
+@RequestMapping("/ai")
+@RequiredArgsConstructor
+public class AiChatController {
+
+ private final Optional deepSeekClientOptional;
+
+
+ /**
+ * 聊天
+ *
+ * @param message 消息
+ * @return {@link Flux }<{@link ChatCompletionResponse }>
+ */
+ @PostMapping("/chat")
+ public Flux chat(@RequestBody AiChatMessageDTO message) {
+
+ if (deepSeekClientOptional.isEmpty()) {
+ log.warn("DeepSeek 大模型聊天未开启,请检查配置");
+ return Flux.empty();
+ }
+
+ if (message.isWebSearch()) {
+ return deepSeekClientOptional.get().chatSearchCompletion(message.getMessage());
+ }
+ return deepSeekClientOptional.get().chatFluxCompletion(message.getMessage());
+ }
+}