From ae29fbcba6436a762f3b37a9f012a470da509087 Mon Sep 17 00:00:00 2001 From: vertoryao Date: Tue, 22 Apr 2025 17:18:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(dify):=20=E9=9B=86=E6=88=90=20Dify=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=B9=B6=E6=9B=B4=E6=96=B0=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 application.yml 中添加 Dify 服务相关配置 - 删除 PageDto 类 - 更新 pom.xml,升级 mybatis-plus 版本并添加 dify-spring-boot-starter 依赖 - 调整 SpringSecurityConfig 中的请求匹配规则 --- .../dify/controller/V1ChatController.java | 44 +++++++++++++++++++ .../modules/dify/service/DifyChatService.java | 35 +++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java create mode 100644 src/main/java/com/zsc/edu/dify/modules/dify/service/DifyChatService.java diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java new file mode 100644 index 0000000..2e431a5 --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java @@ -0,0 +1,44 @@ +package com.zsc.edu.dify.modules.dify.controller; + +import com.zsc.edu.dify.modules.dify.service.DifyChatService; +import io.github.guoshiqiufeng.dify.chat.dto.request.ChatMessageSendRequest; +import io.github.guoshiqiufeng.dify.chat.dto.request.MessageConversationsRequest; +import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendCompletionResponse; +import io.github.guoshiqiufeng.dify.chat.dto.response.MessageConversationsResponse; +import io.github.guoshiqiufeng.dify.core.pojo.DifyPageResult; +import jakarta.annotation.Resource; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; + +/** + * @author yanghq + * @version 1.0 + * @since 2025/3/25 10:48 + */ +@RestController +@RequestMapping("/v1/chat") +public class V1ChatController { + + @Resource + private DifyChatService difyChatService; + + /** + * 发送消息(流式) + * + * @param sendRequest 消息参数 (可以自定义参数,调用 difyChat 实例时重新组装即可), + * 用户 id可以改为从上下文(token)获取, + * apikey 建议在数据库进行存储,前端调用时传智能体 id,从数据库查询 + */ + @PostMapping(value = "/completions", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux sendChatMessageStream(@RequestBody ChatMessageSendRequest sendRequest) { + return difyChatService.sendChatMessageStream(sendRequest); + } + + + @GetMapping("/conversations") + public DifyPageResult conversations(@RequestBody MessageConversationsRequest request) { + return difyChatService.conversations(request); + } + +} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyChatService.java b/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyChatService.java new file mode 100644 index 0000000..2150824 --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyChatService.java @@ -0,0 +1,35 @@ +package com.zsc.edu.dify.modules.dify.service; + +import io.github.guoshiqiufeng.dify.chat.DifyChat; +import io.github.guoshiqiufeng.dify.chat.dto.request.ChatMessageSendRequest; +import io.github.guoshiqiufeng.dify.chat.dto.request.MessageConversationsRequest; +import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendCompletionResponse; +import io.github.guoshiqiufeng.dify.chat.dto.response.MessageConversationsResponse; +import io.github.guoshiqiufeng.dify.core.pojo.DifyPageResult; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Flux; + +/** + * @author yanghq + * @version 1.0 + * @since 2025/3/25 10:48 + */ +@Slf4j +@Service +public class DifyChatService { + + @Resource + private DifyChat difyChat; + + public Flux sendChatMessageStream(ChatMessageSendRequest sendRequest) { + // 可以进行自定义逻辑处理:参数转换、权限校验等 + return difyChat.sendChatMessageStream(sendRequest); + } + + public DifyPageResult conversations(MessageConversationsRequest request) { + return difyChat.conversations(request); + } + +}