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