From ee0d89d8d2e1bae6de4eec1bcd314c46274e1eeb Mon Sep 17 00:00:00 2001 From: rainv123 <2148537152@qq.com> Date: Mon, 10 Nov 2025 15:14:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=9F=A5=E8=AF=86=E5=BA=93=E3=80=90?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E3=80=91=E3=80=90=E5=88=A0=E9=99=A4=E3=80=91?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/KnowledgeBaseServiceImpl.java | 92 ++++++++++++++----- main/manager-web/src/i18n/zh_CN.js | 1 + main/manager-web/src/i18n/zh_TW.js | 1 + .../src/views/KnowledgeBaseManagement.vue | 37 ++++++-- 4 files changed, 101 insertions(+), 30 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/knowledge/service/impl/KnowledgeBaseServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/knowledge/service/impl/KnowledgeBaseServiceImpl.java index 56a404dc..b2b75f48 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/knowledge/service/impl/KnowledgeBaseServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/knowledge/service/impl/KnowledgeBaseServiceImpl.java @@ -51,6 +51,7 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl ragConfig = getValidatedRAGConfig(knowledgeBaseDTO.getRagModelId()); + + // 调用RAGFlow API更新数据集 + updateDatasetInRAGFlow( + knowledgeBaseDTO.getDatasetId(), + knowledgeBaseDTO.getName(), + knowledgeBaseDTO.getDescription(), + ragConfig); + + log.info("RAGFlow API更新成功,datasetId: {}", knowledgeBaseDTO.getDatasetId()); + } else { + log.warn("datasetId或ragModelId为空,跳过RAGFlow更新"); + } + KnowledgeBaseEntity entity = ConvertUtils.sourceToTarget(knowledgeBaseDTO, KnowledgeBaseEntity.class); knowledgeBaseDao.updateById(entity); @@ -209,22 +229,6 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl ragConfig = getValidatedRAGConfig(knowledgeBaseDTO.getRagModelId()); - updateDatasetInRAGFlow( - knowledgeBaseDTO.getDatasetId(), - knowledgeBaseDTO.getName(), - knowledgeBaseDTO.getDescription(), - ragConfig); - } catch (Exception e) { - // 如果RAG API调用失败,回滚本地数据库操作 - knowledgeBaseDao.updateById(existingEntity); - throw e; - } - } - return ConvertUtils.sourceToTarget(entity, KnowledgeBaseDTO.class); } @@ -265,22 +269,29 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl 0 ? "成功" : "失败"); - - // 调用RAGFlow API删除数据集 + // 先调用RAGFlow API删除数据集 + boolean apiDeleteSuccess = false; if (StringUtils.isNotBlank(entity.getDatasetId()) && StringUtils.isNotBlank(entity.getRagModelId())) { try { log.info("开始调用RAGFlow API删除数据集"); + // 在删除前进行RAG配置校验 Map ragConfig = getValidatedRAGConfig(entity.getRagModelId()); deleteDatasetInRAGFlow(entity.getDatasetId(), ragConfig); log.info("RAGFlow API删除调用完成"); + apiDeleteSuccess = true; } catch (Exception e) { - log.warn("删除RAGFlow数据集失败: {}", e.getMessage()); + log.error("删除RAGFlow数据集失败: {}", e.getMessage()); + throw new RenException(ErrorCode.RAG_API_ERROR, "删除RAGFlow数据集失败: " + e.getMessage()); } } else { log.warn("datasetId或ragModelId为空,跳过RAGFlow删除"); + apiDeleteSuccess = true; // 没有RAG数据集,视为成功 + } + + // API删除成功后再删除本地记录 + if (apiDeleteSuccess) { + int deleteCount = knowledgeBaseDao.deleteById(entity.getId()); + log.info("本地数据库删除结果: {}", deleteCount > 0 ? "成功" : "失败"); } log.info("=== 通过datasetId删除操作结束 ==="); @@ -513,6 +524,24 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl responseMap = objectMapper.readValue(responseBody, Map.class); + Integer code = (Integer) responseMap.get("code"); + String message = (String) responseMap.get("message"); + + if (code != null && code != 0) { + log.error("RAGFlow API调用失败,响应码: {}, 消息: {}", code, message); + throw new RenException(ErrorCode.RAG_API_ERROR, "RAGFlow API调用失败: " + message); + } + } catch (Exception e) { + log.error("解析RAGFlow API响应失败: {}", e.getMessage(), e); + throw new RenException(ErrorCode.RAG_API_ERROR, "解析响应失败: " + e.getMessage()); + } + } + log.info("RAGFlow数据集更新成功,datasetId: {}", datasetId); } @@ -555,6 +584,25 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl responseMap = objectMapper.readValue(responseBody, Map.class); + Integer code = (Integer) responseMap.get("code"); + String message = (String) responseMap.get("message"); + + if (code != null && code != 0) { + log.error("RAGFlow API调用失败,响应码: {}, 消息: {}", code, message); + throw new RenException(ErrorCode.RAG_API_ERROR, "RAGFlow API调用失败: " + message); + } + } catch (Exception e) { + log.error("解析RAGFlow API响应失败: {}", e.getMessage(), e); + throw new RenException(ErrorCode.RAG_API_ERROR, "解析响应失败: " + e.getMessage()); + } + } + log.info("RAGFlow数据集删除成功,datasetId: {}", datasetId); } diff --git a/main/manager-web/src/i18n/zh_CN.js b/main/manager-web/src/i18n/zh_CN.js index 3986e858..cc2654c9 100644 --- a/main/manager-web/src/i18n/zh_CN.js +++ b/main/manager-web/src/i18n/zh_CN.js @@ -1259,4 +1259,5 @@ export default { 'knowledgeFileUpload.comprehensiveSimilarity': '综合相似度', 'knowledgeFileUpload.content': '内容:', 'knowledgeFileUpload.testQuestionRequired': '请输入测试问题', + 'knowledgeBaseDialog.descriptionRequired': '请输入知识库描述', } \ No newline at end of file diff --git a/main/manager-web/src/i18n/zh_TW.js b/main/manager-web/src/i18n/zh_TW.js index af8872d8..984c51d1 100644 --- a/main/manager-web/src/i18n/zh_TW.js +++ b/main/manager-web/src/i18n/zh_TW.js @@ -1258,4 +1258,5 @@ export default { 'knowledgeFileUpload.comprehensiveSimilarity': '綜合相似度', 'knowledgeFileUpload.content': '內容:', 'knowledgeFileUpload.testQuestionRequired': '請輸入測試問題', + 'knowledgeBaseDialog.descriptionRequired': '請輸入知识库描述', } \ No newline at end of file diff --git a/main/manager-web/src/views/KnowledgeBaseManagement.vue b/main/manager-web/src/views/KnowledgeBaseManagement.vue index 13707357..a672e324 100644 --- a/main/manager-web/src/views/KnowledgeBaseManagement.vue +++ b/main/manager-web/src/views/KnowledgeBaseManagement.vue @@ -273,11 +273,9 @@ export default { handleSubmit: function(form) { console.log('handleSubmit called with form:', form); if (form.id) { - // 编辑 - 使用dataset_id作为路径参数,form作为请求体 console.log('Editing knowledge base:', form.datasetId); Api.knowledgeBase.updateKnowledgeBase(form.datasetId, form, (res) => { console.log('Update response:', res); - // 修复:检查 res.data.code 而不是 res.code if (res.data && res.data.code === 0) { this.dialogVisible = false; this.fetchKnowledgeBaseList(); @@ -285,8 +283,15 @@ export default { } else { this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.updateFailed')); } - }, () => { - this.$message.error(this.$t('knowledgeBaseManagement.updateFailed')); + }, (err) => { + console.log('Error callback received:', err); + // 错误回调处理后端返回的错误信息 + if (err && err.data) { + console.log('后端返回错误消息:', err.data.msg || err.msg); + this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.updateFailed')); + } else { + this.$message.error(this.$t('knowledgeBaseManagement.updateFailed')); + } }); } else { // 新增 - 只传递必要的字段,不传递id @@ -303,6 +308,8 @@ export default { this.dialogVisible = false; this.fetchKnowledgeBaseList(); this.$message.success(this.$t('knowledgeBaseManagement.addSuccess')); + } else { + this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.addFailed')); } }, (err) => { console.log('Error callback received:', err); @@ -338,8 +345,15 @@ export default { } else { this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed')); } - }, () => { - this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed')); + }, (err) => { + console.log('Error callback received:', err); + // 错误回调处理后端返回的错误信息 + if (err && err.data) { + console.log('后端返回错误消息:', err.data.msg || err.msg); + this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.deleteFailed')); + } else { + this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed')); + } }); }).catch(() => { this.$message({ @@ -365,8 +379,15 @@ export default { } else { this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed')); } - }, () => { - this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed')); + }, (err) => { + console.log('Error callback received:', err); + // 错误回调处理后端返回的错误信息 + if (err && err.data) { + console.log('后端返回错误消息:', err.data.msg || err.msg); + this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.deleteFailed')); + } else { + this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed')); + } }); }).catch(() => { this.$message({