From cace12fea0c19cb7ceae0aca56db07d3da5dbc79 Mon Sep 17 00:00:00 2001 From: jack ning Date: Thu, 24 Apr 2025 09:44:47 +0800 Subject: [PATCH] update modules/kbase: mod 3 files --- .../kbase/llm/qa/QaElasticSearchResult.java | 10 +++++- .../kbase/llm/qa/QaRestControllerVisitor.java | 13 +++++++- .../com/bytedesk/kbase/llm/qa/QaService.java | 33 +++++-------------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaElasticSearchResult.java b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaElasticSearchResult.java index 1edbee9d34..ad83c98fd4 100644 --- a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaElasticSearchResult.java +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaElasticSearchResult.java @@ -15,5 +15,13 @@ public class QaElasticSearchResult { private QaElastic qaElastic; private float score; - + + // 存储带高亮标记的问题文本 + private String highlightedQuestion; + + // 添加一个构造函数,同时设置qaElastic和score + public QaElasticSearchResult(QaElastic qaElastic, float score) { + this.qaElastic = qaElastic; + this.score = score; + } } diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestControllerVisitor.java b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestControllerVisitor.java index b8d79845be..0a0b6f6377 100644 --- a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestControllerVisitor.java +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaRestControllerVisitor.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-13 11:16:32 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-04-12 11:51:04 + * @LastEditTime: 2025-04-24 09:40:03 * @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. @@ -35,6 +35,8 @@ import org.springframework.web.bind.annotation.RequestMapping; @AllArgsConstructor public class QaRestControllerVisitor { + private final QaService qaService; + private final QaRestService qaRestService; private final MessageRestService messageRestService; @@ -48,6 +50,15 @@ public class QaRestControllerVisitor { return ResponseEntity.ok(JsonResult.success(qaList)); } + // suggest qa + @GetMapping("/suggest") + public ResponseEntity suggest(QaRequest request) { + + qaService.suggestQa(request.getQuestion(), request.getKbUid(), request.getCategoryUid(), request.getOrgUid()); + + return ResponseEntity.ok(JsonResult.success(page)); + } + // 换一换qa @GetMapping("/change") public ResponseEntity change(QaRequest request) { diff --git a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaService.java b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaService.java index 2528c608a7..a0d3fa9531 100644 --- a/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaService.java +++ b/modules/kbase/src/main/java/com/bytedesk/kbase/llm/qa/QaService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-04-22 15:26:22 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-04-24 09:32:38 + * @LastEditTime: 2025-04-24 09:44:33 * @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. @@ -146,7 +146,7 @@ public class QaService { } // 用户在输入过程中,给出输入联想 - public List suggestQa(String query, String kbUid, String categoryUid, String orgUid) { + public List suggestQa(String query, String kbUid, String categoryUid, String orgUid) { log.info("QA输入联想: query={}, kbUid={}, categoryUid={}, orgUid={}", query, kbUid, categoryUid, orgUid); if (query == null || query.trim().isEmpty()) { @@ -193,42 +193,27 @@ public class QaService { boolQueryBuilder.filter(QueryBuilders.term().field("orgUid").value(orgUid).build()._toQuery()); } - // 使用NativeQuery而不是直接处理高亮 - // Spring Data Elasticsearch 5.x版本中,使用highlight字段名方式 + // 构建查询 NativeQuery searchQuery = NativeQuery.builder() .withQuery(boolQueryBuilder.build()._toQuery()) - .withFields("question", "questionList", "tagList") // 指定需要返回的字段 .withMaxResults(10) // 限制结果数量 .build(); - // 执行搜索,暂时不使用高亮功能 + // 执行搜索 SearchHits searchHits = elasticsearchOperations.search( searchQuery, QaElastic.class ); - // 处理结果,由于没有高亮功能,直接返回匹配的问题 - List suggestions = new ArrayList<>(); + // 处理结果,返回QaElasticSearchResult对象列表 + List qaElasticResultList = new ArrayList<>(); for (SearchHit hit : searchHits) { QaElastic qaElastic = hit.getContent(); - // 优先使用主问题 - String question = qaElastic.getQuestion(); - if (question != null && !question.trim().isEmpty()) { - // 添加简单的高亮标记 - 在包含查询词的部分手动添加标签 - if (query != null && !query.isEmpty() && question.toLowerCase().contains(query.toLowerCase())) { - int startIdx = question.toLowerCase().indexOf(query.toLowerCase()); - int endIdx = startIdx + query.length(); - question = question.substring(0, startIdx) + - "" + question.substring(startIdx, endIdx) + "" + - question.substring(endIdx); - } - suggestions.add(question); - } + float score = hit.getScore(); + qaElasticResultList.add(new QaElasticSearchResult(qaElastic, score)); } - // 去重 - return suggestions.stream().distinct().toList(); + return qaElasticResultList; } - }