From 0d4d2e5f4e2f0ed746c3737aadd66e1a2f480e3a Mon Sep 17 00:00:00 2001 From: jack ning Date: Thu, 24 Apr 2025 13:23:22 +0800 Subject: [PATCH] update modules/kbase: mod 3 files --- .../springai/service/BaseSpringAIService.java | 54 +++++++++++++++---- .../com/bytedesk/core/base/BaseRequest.java | 6 ++- .../bytedesk/kbase/llm/qa/QaRestService.java | 6 ++- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/modules/ai/src/main/java/com/bytedesk/ai/springai/service/BaseSpringAIService.java b/modules/ai/src/main/java/com/bytedesk/ai/springai/service/BaseSpringAIService.java index 5dcfcc2bec..c5034e4926 100644 --- a/modules/ai/src/main/java/com/bytedesk/ai/springai/service/BaseSpringAIService.java +++ b/modules/ai/src/main/java/com/bytedesk/ai/springai/service/BaseSpringAIService.java @@ -106,7 +106,7 @@ public abstract class BaseSpringAIService implements SpringAIService { Assert.notNull(emitter, "SseEmitter must not be null"); // sendSseTypingMessage(messageProtobuf, emitter); // search type - List searchContentList = new ArrayList<>(); + if (StringUtils.hasText(robot.getKbUid()) && robot.getIsKbEnabled()) { // if (robot.getLlm().getSearchType() == RobotSearchTypeEnum.FULLTEXT.name()) { @@ -118,11 +118,31 @@ public abstract class BaseSpringAIService implements SpringAIService { String formattedQa = String.format("问题: %s\n答案: %s", qa.getQuestion(), qa.getAnswer()); searchContentList.add(formattedQa); } + // 判断是否开启大模型 + if (robot.getLlm().isEnabled()) { + // 启用大模型 + processLlmResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } else { + // 未开启大模型,关键词匹配,使用搜索 + processSearchResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } } else if (robot.getLlm().getSearchType() == RobotSearchTypeEnum.VECTOR.name()) { // 使用向量搜索 List contentList = springAIVectorService.searchText(query, robot.getKbUid()); searchContentList.addAll(contentList); // + // 判断是否开启大模型 + if (robot.getLlm().isEnabled()) { + // 启用大模型 + processLlmResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } else { + // 未开启大模型,关键词匹配,使用搜索 + processSearchResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } } else if (robot.getLlm().getSearchType() == RobotSearchTypeEnum.MIXED.name()) { // 混合搜索 List searchResults = qaService.searchQa(query, robot.getKbUid(), null, null); @@ -134,6 +154,16 @@ public abstract class BaseSpringAIService implements SpringAIService { } List contentList = springAIVectorService.searchText(query, robot.getKbUid()); searchContentList.addAll(contentList); + // 判断是否开启大模型 + if (robot.getLlm().isEnabled()) { + // 启用大模型 + processLlmResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } else { + // 未开启大模型,关键词匹配,使用搜索 + processSearchResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } } else { // 默认全文搜索 List searchResults = qaService.searchQa(query, robot.getKbUid(), null, null); @@ -143,23 +173,25 @@ public abstract class BaseSpringAIService implements SpringAIService { String formattedQa = String.format("问题: %s\n答案: %s", qa.getQuestion(), qa.getAnswer()); searchContentList.add(formattedQa); } + // 判断是否开启大模型 + if (robot.getLlm().isEnabled()) { + // 启用大模型 + processLlmResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } else { + // 未开启大模型,关键词匹配,使用搜索 + processSearchResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, + emitter); + } } } log.info("BaseSpringAIService sendSseMessage searchContentList {}", searchContentList); - // 判断是否开启大模型 - if (robot.getLlm().isEnabled()) { - // 启用大模型 - processLlmResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, emitter); - } else { - // 未开启大模型,关键词匹配,使用搜索 - processSearchResponse(query, searchContentList, robot, messageProtobufQuery, messageProtobufReply, emitter); - } } private void processLlmResponse(String query, List searchContentList, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, - MessageProtobuf messageProtobufReply, + MessageProtobuf messageProtobufReply, SseEmitter emitter) { // if (searchContentList.isEmpty()) { @@ -186,7 +218,7 @@ public abstract class BaseSpringAIService implements SpringAIService { private void processSearchResponse(String query, List searchContentList, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, MessageProtobuf messageProtobufReply, SseEmitter emitter) { - // + // if (searchContentList.isEmpty()) { // 直接返回未找到相关问题答案 String answer = RobotConsts.ROBOT_UNMATCHED; diff --git a/modules/core/src/main/java/com/bytedesk/core/base/BaseRequest.java b/modules/core/src/main/java/com/bytedesk/core/base/BaseRequest.java index 50164fd29c..edfcd2a147 100644 --- a/modules/core/src/main/java/com/bytedesk/core/base/BaseRequest.java +++ b/modules/core/src/main/java/com/bytedesk/core/base/BaseRequest.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-01-29 16:21:24 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-04-19 14:44:01 + * @LastEditTime: 2025-04-24 13:18:12 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -102,6 +102,10 @@ public abstract class BaseRequest implements Serializable { @Builder.Default private boolean isSuperUser = false; + // 导出全部数据,默认false + @Builder.Default + private boolean exportAll = false; + /** * 获取分页对象 * 默认每页10条记录,按更新时间倒序排序 diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestService.java b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestService.java index 1ec2919c72..aa967dd707 100644 --- a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestService.java +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-03-22 22:59:18 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-04-24 10:18:33 + * @LastEditTime: 2025-04-24 13:19:14 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -68,6 +68,10 @@ public class QaRestService extends BaseRestServiceWithExcel queryByOrgEntity(QaRequest request) { Pageable pageable = request.getPageable(); Specification spec = QaSpecification.search(request); + // 是否导出全部 + if (request.isExportAll()) { + pageable = Pageable.unpaged(); + } return qaRepository.findAll(spec, pageable); }