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()); + } +}