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 80053ef6..19e659da 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 @@ -595,10 +595,49 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl getValidatedRAGConfig(String ragModelId) { + Map ragConfig; if (StringUtils.isNotBlank(ragModelId)) { - return getRAGConfig(ragModelId); + ragConfig = getRAGConfig(ragModelId); } else { - return getDefaultRAGConfig(); + ragConfig = getDefaultRAGConfig(); + } + + // 验证baseUrl和apiKey + validateRAGConfigParameters(ragConfig); + + return ragConfig; + } + + /** + * 验证RAG配置参数 + */ + private void validateRAGConfigParameters(Map ragConfig) { + if (ragConfig == null) { + throw new RenException(ErrorCode.RAG_CONFIG_NOT_FOUND, "RAG配置为空,请检查配置"); + } + + // 从配置中提取必要的参数 + String baseUrl = (String) ragConfig.get("base_url"); + String apiKey = (String) ragConfig.get("api_key"); + + // 验证base_url是否存在且非空 + if (StringUtils.isBlank(baseUrl)) { + throw new RenException(ErrorCode.RAG_CONFIG_MISSING_PARAMS, "RAG配置中base_url为空,请完善配置"); + } + + // 验证apiKey是否存在且非空 + if (StringUtils.isBlank(apiKey)) { + throw new RenException(ErrorCode.RAG_CONFIG_MISSING_PARAMS, "RAG配置中api_key为空,请完善配置"); + } + + // 验证apiKey是否包含"你"字(可能是占位符) + if (apiKey.contains("你")) { + throw new RenException(ErrorCode.RAG_CONFIG_MISSING_PARAMS, "RAG配置中api_key包含占位符'你',请替换为实际的API密钥"); + } + + // 验证baseUrl格式(基本验证) + if (!baseUrl.startsWith("http://") && !baseUrl.startsWith("https://")) { + throw new RenException(ErrorCode.RAG_CONFIG_MISSING_PARAMS, "RAG配置中base_url格式不正确,必须以http://或https://开头"); } } diff --git a/main/manager-api/src/main/resources/db/changelog/202510250955.sql b/main/manager-api/src/main/resources/db/changelog/202510250956.sql similarity index 91% rename from main/manager-api/src/main/resources/db/changelog/202510250955.sql rename to main/manager-api/src/main/resources/db/changelog/202510250956.sql index 0256a7a2..b4129af1 100644 --- a/main/manager-api/src/main/resources/db/changelog/202510250955.sql +++ b/main/manager-api/src/main/resources/db/changelog/202510250956.sql @@ -8,7 +8,7 @@ INSERT INTO `ai_model_provider` (`id`, `model_type`, `provider_code`, `name`, `f -- 添加RAG模型配置 delete from `ai_model_config` where id = 'RAG_RAGFlow'; -INSERT INTO `ai_model_config` VALUES ('RAG_RAGFlow', 'RAG', 'ragflow', 'RAGFlow', 1, 1, '{"type": "ragflow", "base_url": "http://localhost", "api_key": "your_api_key_here"}', 'https://github.com/infiniflow/ragflow/blob/main/README_zh.md', 'RAGFlow配置说明: +INSERT INTO `ai_model_config` VALUES ('RAG_RAGFlow', 'RAG', 'ragflow', 'RAGFlow', 1, 1, '{"type": "ragflow", "base_url": "http://localhost", "api_key": "你的RAG密钥"}', 'https://github.com/infiniflow/ragflow/blob/main/README_zh.md', 'RAGFlow配置说明: 一、快速部署教程(docker部署) 1.$ sysctl vm.max_map_count 2.$ sysctl -w vm.max_map_count=262144 diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index 5fd1905a..326d6f57 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -403,12 +403,12 @@ databaseChangeLog: encoding: utf8 path: classpath:db/changelog/202510191042.sql - changeSet: - id: 202510250955 + id: 202510250956 author: rainv123 changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/202510250955.sql + path: classpath:db/changelog/202510250956.sql - changeSet: id: 202510251150 author: rainv123 diff --git a/main/manager-web/src/views/KnowledgeBaseManagement.vue b/main/manager-web/src/views/KnowledgeBaseManagement.vue index d39d1f03..13707357 100644 --- a/main/manager-web/src/views/KnowledgeBaseManagement.vue +++ b/main/manager-web/src/views/KnowledgeBaseManagement.vue @@ -299,16 +299,20 @@ export default { console.log('Creating knowledge base with data:', createData); Api.knowledgeBase.createKnowledgeBase(createData, (res) => { console.log('Create response:', res); - // 修复:检查 res.data.code 而不是 res.code if (res.data && res.data.code === 0) { this.dialogVisible = false; this.fetchKnowledgeBaseList(); this.$message.success(this.$t('knowledgeBaseManagement.addSuccess')); - } else { - this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.addFailed')); } - }, () => { - this.$message.error(this.$t('knowledgeBaseManagement.addFailed')); + }, (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.addFailed')); + } else { + this.$message.error(this.$t('knowledgeBaseManagement.addFailed')); + } }); } }, @@ -328,7 +332,6 @@ export default { }).then(() => { const ids = this.selectedKnowledgeBase.map(item => item.datasetId).join(','); Api.knowledgeBase.deleteKnowledgeBases(ids, (res) => { - // 修复:检查 res.data.code 而不是 res.code if (res.data && res.data.code === 0) { this.fetchKnowledgeBaseList(); this.$message.success(this.$t('knowledgeBaseManagement.batchDeleteSuccess', { count: this.selectedKnowledgeBase.length })); @@ -356,7 +359,6 @@ export default { type: 'warning' }).then(() => { Api.knowledgeBase.deleteKnowledgeBase(row.datasetId, (res) => { - // 修复:检查 res.data.code 而不是 res.code if (res.data && res.data.code === 0) { this.fetchKnowledgeBaseList(); this.$message.success(this.$t('knowledgeBaseManagement.batchDeleteSuccess', { count: 1 }));