From a392c8fe5974caf0d79d3e4391042115affa22cc Mon Sep 17 00:00:00 2001 From: jack ning Date: Tue, 25 Nov 2025 07:21:52 +0800 Subject: [PATCH] update --- .../kbase/llm_faq/FaqRestService.java | 129 ++++-------------- .../kbase/utils/KbaseMessageUtils.java | 90 ++++++++++++ 2 files changed, 120 insertions(+), 99 deletions(-) create mode 100644 modules/kbase/src/main/java/com/bytedesk/kbase/utils/KbaseMessageUtils.java diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/llm_faq/FaqRestService.java b/modules/kbase/src/main/java/com/bytedesk/kbase/llm_faq/FaqRestService.java index ac2a8cb6eb..aac3e981b1 100644 --- a/modules/kbase/src/main/java/com/bytedesk/kbase/llm_faq/FaqRestService.java +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/llm_faq/FaqRestService.java @@ -37,10 +37,8 @@ import com.bytedesk.core.category.CategoryRequest; import com.bytedesk.core.category.CategoryResponse; import com.bytedesk.core.category.CategoryRestService; import com.bytedesk.core.config.BytedeskEventPublisher; -import com.bytedesk.core.enums.ChannelEnum; import com.bytedesk.core.message.MessageEntity; import com.bytedesk.core.message.MessageRestService; -import com.bytedesk.core.message.MessageStatusEnum; import com.bytedesk.core.message.MessageTypeEnum; import com.bytedesk.core.rbac.user.UserEntity; import com.bytedesk.core.thread.ThreadEntity; @@ -55,8 +53,7 @@ import com.bytedesk.kbase.llm_faq.FaqJsonLoader.Faq; import com.bytedesk.kbase.llm_faq.FaqJsonLoader.FaqConfiguration; import com.bytedesk.kbase.llm_faq.event.FaqUpdateDocEvent; import com.bytedesk.kbase.utils.KbaseConvertUtils; -import com.bytedesk.core.utils.BdDateUtils; - +import com.bytedesk.kbase.utils.KbaseMessageUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -130,14 +127,14 @@ public class FaqRestService extends BaseRestServiceWithExport findRandomFaq() { + try { + // 获取系统中任意一个FAQ + List randomFaqs = faqRepository.findRandomFaq(1); + if (randomFaqs != null && !randomFaqs.isEmpty()) { + return Optional.of(randomFaqs.get(0)); + } + } catch (Exception e) { + log.error("获取随机FAQ时出错: {}", e.getMessage(), e); + } + return Optional.empty(); + } + + + // generateSimilarQuestions + // public List generateSimilarQuestions(FaqRequest request) { + // List similarQuestions = new ArrayList<>(); + // // 使用OpenAI API生成相似问题 + // } + + // @Transactional // public void initRelationFaqs(String orgUid, String kbUid) { // try { // // 加载JSON文件中的FAQ数据 @@ -631,96 +654,4 @@ public class FaqRestService extends BaseRestServiceWithExport findRandomFaq() { - try { - // 获取系统中任意一个FAQ - List randomFaqs = faqRepository.findRandomFaq(1); - if (randomFaqs != null && !randomFaqs.isEmpty()) { - return Optional.of(randomFaqs.get(0)); - } - } catch (Exception e) { - log.error("获取随机FAQ时出错: {}", e.getMessage(), e); - } - return Optional.empty(); - } - - - // generateSimilarQuestions - // public List generateSimilarQuestions(FaqRequest request) { - // List similarQuestions = new ArrayList<>(); - // // 使用OpenAI API生成相似问题 - // } - } diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/utils/KbaseMessageUtils.java b/modules/kbase/src/main/java/com/bytedesk/kbase/utils/KbaseMessageUtils.java new file mode 100644 index 0000000000..6418c9bcad --- /dev/null +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/utils/KbaseMessageUtils.java @@ -0,0 +1,90 @@ +package com.bytedesk.kbase.utils; + +import org.springframework.util.StringUtils; + +import com.bytedesk.core.enums.ChannelEnum; +import com.bytedesk.core.message.MessageEntity; +import com.bytedesk.core.message.MessageStatusEnum; +import com.bytedesk.core.message.MessageTypeEnum; +import com.bytedesk.core.message.MessageUtils; +import com.bytedesk.core.thread.ThreadEntity; +import com.bytedesk.core.uid.UidUtils; +import com.bytedesk.core.utils.BdDateUtils; +import com.bytedesk.kbase.llm_faq.FaqMessageExtra; +import com.bytedesk.kbase.llm_faq.FaqResponse; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class KbaseMessageUtils { + + public static MessageEntity getFaqQuestionMessage(FaqResponse faqResponse, ThreadEntity threadEntity) { + // + FaqMessageExtra questionExtra = FaqMessageExtra.builder() + .faqUid(faqResponse.getUid()) + .build(); + MessageUtils.attachSequenceNumber(questionExtra, threadEntity.getUid()); + // + String content = faqResponse.getQuestion(); + String extra = questionExtra.toJson(); + String user = threadEntity.getUser(); + // + MessageEntity message = MessageEntity.builder() + .uid(UidUtils.getInstance().getUid()) + .content(content) + .type(MessageTypeEnum.FAQ_QUESTION.name()) + .status(MessageStatusEnum.READ.name()) + .channel(threadEntity.getChannel()) + .user(user) + .orgUid(threadEntity.getOrgUid()) + .createdAt(BdDateUtils.now()) + .updatedAt(BdDateUtils.now()) + .thread(threadEntity) + .extra(extra) + .build(); + + return message; + } + + public static MessageEntity getFaqAnswerMessage(FaqResponse faqResponse, ThreadEntity threadEntity) { + // + FaqMessageExtra answerExtra = FaqMessageExtra.builder() + .faqUid(faqResponse.getUid()) + .images(faqResponse.getImages()) + .attachments(faqResponse.getAttachments()) + .answerList(faqResponse.getAnswerList()) + .relatedFaqs(faqResponse.getRelatedFaqs()) + .build(); + MessageUtils.attachSequenceNumber(answerExtra, threadEntity.getUid()); + // + String content = faqResponse.getAnswer(); + if (StringUtils.hasText(faqResponse.getAnswerHtml())) { + content = faqResponse.getAnswerHtml(); + } + String extra = answerExtra.toJson(); + // 插入答案消息 + String answerUser = threadEntity.getRobot(); + if (threadEntity.isAgentType()) { + answerUser = threadEntity.getAgent(); + } else if (answerUser == null) { + answerUser = threadEntity.getWorkgroup(); + } + // + MessageEntity message = MessageEntity.builder() + .uid(UidUtils.getInstance().getUid()) + .content(content) + .type(MessageTypeEnum.FAQ_ANSWER.name()) + .status(MessageStatusEnum.READ.name()) + .channel(ChannelEnum.SYSTEM.name()) + .user(answerUser) + .orgUid(threadEntity.getOrgUid()) + .createdAt(BdDateUtils.now()) + .updatedAt(BdDateUtils.now()) + .thread(threadEntity) + .extra(extra) + .build(); + + return message; + } + +}