知识库初始化
This commit is contained in:
@@ -65,7 +65,7 @@ INSERT INTO config.tb_sys_config (
|
||||
-- Dify AI 配置
|
||||
-- Dify 基础配置
|
||||
('CFG-0450', 'cfg_dify_api_base', 'dify.apiBaseUrl', 'Dify API地址', 'http://localhost:8000/v1', 'String', 'input', 'Dify API基础地址', NULL, NULL, 'dify', 'mod_agent', 10, 1, 'Dify服务的API基础地址,如 http://localhost/dify/api', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0452', 'cfg_dify_knowledge_key','dify.knowledgeApiKey', '知识库API密钥', 'dataset-nupqKP4LONpzdXmGthIrbjeJ', 'String', 'password', '知识库API密钥', NULL, NULL, 'dify', 'mod_agent', 30, 1, '用于访问Dify知识库的API密钥', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0452', 'cfg_dify_knowledge_key','dify.knowledgeApiKey', '知识库API密钥', 'dataset-LepcmgOE95n2S7yweNhQzNoB', 'String', 'password', '知识库API密钥', NULL, NULL, 'dify', 'mod_agent', 30, 1, '用于访问Dify知识库的API密钥', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0453', 'cfg_dify_timeout', 'dify.timeout', '请求超时时间', '60', 'INTEGER', 'input', '请求超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 40, 1, 'API请求的超时时间(10-600秒)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0454', 'cfg_dify_conn_timeout','dify.connectTimeout', '连接超时时间', '10', 'INTEGER', 'input', '连接超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 50, 1, 'API连接的超时时间(5-60秒)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0455', 'cfg_dify_read_timeout','dify.readTimeout', '读取超时时间', '60', 'INTEGER', 'input', '读取超时时间(秒)', NULL, NULL, 'dify', 'mod_agent', 60, 1, 'API读取响应的超时时间(10-600秒)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
@@ -76,8 +76,14 @@ INSERT INTO config.tb_sys_config (
|
||||
('CFG-0461', 'cfg_dify_upload_max', 'dify.upload.maxSize', '最大文件大小', '50', 'INTEGER', 'input', '最大文件大小(MB)', NULL, NULL, 'dify', 'mod_agent', 90, 1, '单个文件上传的最大大小限制(1-500MB)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
|
||||
-- Dify 知识库配置
|
||||
('CFG-0470', 'cfg_dify_index_tech', 'dify.dataset.defaultIndexingTechnique','默认索引方式', 'high_quality', 'String', 'select', '默认索引方式', NULL, '["high_quality", "economy"]'::json, 'dify', 'mod_agent', 100, 1, '知识库文档的默认索引方式:high_quality(高质量)或 economy(经济)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0471', 'cfg_dify_embed_model', 'dify.dataset.defaultEmbeddingModel','默认Embedding模型', 'text-embedding-ada-002', 'String', 'input', '默认Embedding模型', NULL, NULL, 'dify', 'mod_agent', 110, 1, '知识库使用的默认Embedding模型名称', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0470', 'cfg_dify_index_tech', 'dify.knowledge.indexing.tchnique','默认索引方式', 'high_quality', 'String', 'select', '默认索引方式', NULL, '["high_quality", "economy"]'::json, 'dify', 'mod_agent', 100, 1, '知识库文档的默认索引方式:high_quality(高质量)或 economy(经济)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0471', 'cfg_dify_embed_model', 'dify.knowledge.embedding.model','默认Embedding模型', 'Qwen/Qwen3-Embedding-8B', 'String', 'input', '默认Embedding模型', NULL, NULL, 'dify', 'mod_agent', 110, 1, '知识库使用的默认Embedding模型名称', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0472', 'cfg_dify_embed_provider', 'dify.knowledge.embedding.model.provider','Embedding模型供应商', 'langgenius/siliconflow/siliconflow', 'String', 'input', 'Embedding模型供应商', NULL, NULL, 'dify', 'mod_agent', 120, 1, 'Embedding模型的供应商标识', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0473', 'cfg_dify_rerank_enable', 'dify.knowledge.reranking.enable','启用Rerank', 'true', 'BOOLEAN', 'switch', '是否启用Rerank重排序', NULL, NULL, 'dify', 'mod_agent', 130, 1, '启用后会对检索结果进行重排序提升相关性', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0474', 'cfg_dify_rerank_model', 'dify.knowledge.rerank.model','Rerank模型', 'Qwen/Qwen3-Reranker-8B', 'String', 'input', 'Rerank重排序模型', NULL, NULL, 'dify', 'mod_agent', 140, 1, '知识库使用的Rerank模型名称', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0475', 'cfg_dify_rerank_provider', 'dify.knowledge.rerank.model.provider','Rerank模型供应商', 'langgenius/siliconflow/siliconflow', 'String', 'input', 'Rerank模型供应商', NULL, NULL, 'dify', 'mod_agent', 150, 1, 'Rerank模型的供应商标识', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0476', 'cfg_dify_retrieval_topk', 'dify.knowledge.retrieval.top.k','检索TopK', '5', 'INTEGER', 'input', '检索返回的最大文档数', NULL, NULL, 'dify', 'mod_agent', 160, 1, '知识库检索时返回的最相关文档数量(1-20)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
('CFG-0477', 'cfg_dify_retrieval_threshold', 'dify.knowledge.retrieval.score.threshold','相似度阈值', '0.5', 'DOUBLE', 'input', '检索相似度阈值', NULL, NULL, 'dify', 'mod_agent', 170, 1, '低于此阈值的文档将被过滤(0.0-1.0)', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
|
||||
-- 日志与审计
|
||||
('CFG-0501', 'cfg_log_level', 'log.level', '日志级别', 'INFO', 'String', 'select', '系统日志级别', NULL, '["DEBUG", "INFO", "WARN", "ERROR"]'::json, 'log', 'mod_system', 10, 0, 'DEBUG/INFO/WARN/ERROR', 'system', NULL, NULL, now(), NULL, NULL, false),
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.xyzh.api.ai.service.AIFileUploadService;
|
||||
import org.xyzh.api.ai.service.KnowledgeService;
|
||||
import org.xyzh.api.file.dto.TbSysFileDTO;
|
||||
import org.xyzh.api.file.service.FileService;
|
||||
import org.xyzh.common.core.domain.LoginDomain;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
import org.xyzh.common.utils.id.IdUtil;
|
||||
@@ -75,12 +76,14 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
||||
}
|
||||
|
||||
// 2. 获取当前用户
|
||||
String userId = LoginUtil.getCurrentUserId();
|
||||
if (!StringUtils.hasText(userId)) {
|
||||
LoginDomain loginDomain = LoginUtil.getCurrentLogin();
|
||||
if (loginDomain == null || !StringUtils.hasText(loginDomain.getUser().getUserId())) {
|
||||
return ResultDomain.failure("用户未登录");
|
||||
}
|
||||
String userId = loginDomain.getUser().getUserId();
|
||||
|
||||
// 3. 生成ID
|
||||
knowledge.setDeptPath(loginDomain.getUserDepts().get(0).getDeptPath());
|
||||
knowledge.setOptsn(IdUtil.getOptsn());
|
||||
knowledge.setKnowledgeId(IdUtil.getSnowflakeId());
|
||||
knowledge.setCreator(userId);
|
||||
@@ -126,6 +129,73 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
||||
return ResultDomain.failure("创建知识库失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 内部创建知识库(不检查登录状态,用于系统初始化)
|
||||
* 注意:调用方需要自行设置knowledgeId和creator
|
||||
* @param knowledge 知识库信息
|
||||
* @return ResultDomain<TbKnowledge> 创建结果
|
||||
* @author yslg
|
||||
* @since 2025-12-20
|
||||
*/
|
||||
@Override
|
||||
public ResultDomain<TbKnowledge> createKnowledgeInternal(TbKnowledge knowledge) {
|
||||
// 1. 参数校验
|
||||
if (!StringUtils.hasText(knowledge.getTitle())) {
|
||||
return ResultDomain.failure("知识库标题不能为空");
|
||||
}
|
||||
if (!StringUtils.hasText(knowledge.getKnowledgeId())) {
|
||||
return ResultDomain.failure("知识库ID不能为空");
|
||||
}
|
||||
|
||||
// 2. 设置默认值
|
||||
if (!StringUtils.hasText(knowledge.getOptsn())) {
|
||||
knowledge.setOptsn(IdUtil.getOptsn());
|
||||
}
|
||||
if (!StringUtils.hasText(knowledge.getCreator())) {
|
||||
knowledge.setCreator("system");
|
||||
}
|
||||
|
||||
// 3. 创建Dify知识库
|
||||
String difyDatasetId = null;
|
||||
try {
|
||||
DatasetCreateRequest createRequest = new DatasetCreateRequest();
|
||||
createRequest.setName(knowledge.getTitle());
|
||||
createRequest.setDescription(knowledge.getDescription());
|
||||
if (StringUtils.hasText(knowledge.getDifyIndexingTechnique())) {
|
||||
createRequest.setIndexingTechnique(knowledge.getDifyIndexingTechnique());
|
||||
}
|
||||
|
||||
DatasetCreateResponse difyResponse = difyApiClient.createDataset(createRequest);
|
||||
if (difyResponse != null && StringUtils.hasText(difyResponse.getId())) {
|
||||
difyDatasetId = difyResponse.getId();
|
||||
knowledge.setDifyDatasetId(difyDatasetId);
|
||||
} else {
|
||||
return ResultDomain.failure("创建Dify知识库失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("创建Dify知识库异常: {}", e.getMessage(), e);
|
||||
return ResultDomain.failure("创建Dify知识库异常: " + e.getMessage());
|
||||
}
|
||||
|
||||
// 4. 插入数据库
|
||||
int rows = knowledgeMapper.insertKnowledge(knowledge);
|
||||
if (rows > 0) {
|
||||
logger.info("内部创建知识库成功: knowledgeId={}, title={}", knowledge.getKnowledgeId(), knowledge.getTitle());
|
||||
return ResultDomain.success("创建知识库成功", knowledge);
|
||||
}
|
||||
|
||||
// 数据库保存失败,补偿删除Dify知识库
|
||||
if (StringUtils.hasText(difyDatasetId)) {
|
||||
try {
|
||||
difyApiClient.deleteDataset(difyDatasetId);
|
||||
logger.info("补偿删除Dify知识库成功: difyDatasetId={}", difyDatasetId);
|
||||
} catch (Exception e) {
|
||||
logger.warn("补偿删除Dify知识库失败: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
return ResultDomain.failure("创建知识库失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 更新知识库,包含dify知识库各种参数的配置
|
||||
* @param knowledge 知识库信息
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<result column="embedding_model_provider" property="embeddingModelProvider" jdbcType="VARCHAR"/>
|
||||
<result column="rerank_model" property="rerankModel" jdbcType="VARCHAR"/>
|
||||
<result column="rerank_model_provider" property="rerankModelProvider" jdbcType="VARCHAR"/>
|
||||
<result column="reranking_enable" property="rerankingEnable" jdbcType="INTEGER"/>
|
||||
<result column="reranking_enable" property="rerankingEnable" jdbcType="BOOLEAN"/>
|
||||
<result column="retrieval_top_k" property="retrievalTopK" jdbcType="INTEGER"/>
|
||||
<result column="retrieval_score_threshold" property="retrievalScoreThreshold" jdbcType="DECIMAL"/>
|
||||
<result column="document_count" property="documentCount" jdbcType="INTEGER"/>
|
||||
|
||||
@@ -40,8 +40,8 @@ public class TbKnowledge extends BaseDTO{
|
||||
@Schema(description = "Rerank模型提供商")
|
||||
private String rerankModelProvider;
|
||||
|
||||
@Schema(description = "是否启用Rerank(0否 1是)")
|
||||
private Integer rerankingEnable;
|
||||
@Schema(description = "是否启用Rerank(false否 true是)")
|
||||
private Boolean rerankingEnable;
|
||||
|
||||
@Schema(description = "检索Top K(返回前K个结果)")
|
||||
private Integer retrievalTopK;
|
||||
|
||||
@@ -24,6 +24,15 @@ public interface KnowledgeService {
|
||||
*/
|
||||
ResultDomain<TbKnowledge> createKnowledge(TbKnowledge knowledge);
|
||||
|
||||
/**
|
||||
* @description 内部创建知识库(不检查登录状态,用于系统初始化)
|
||||
* @param knowledge 知识库信息(需要包含knowledgeId和creator)
|
||||
* @return ResultDomain<TbKnowledge> 创建结果
|
||||
* @author yslg
|
||||
* @since 2025-12-20
|
||||
*/
|
||||
ResultDomain<TbKnowledge> createKnowledgeInternal(TbKnowledge knowledge);
|
||||
|
||||
/**
|
||||
* @description 更新知识库,包含dify知识库各种参数的配置
|
||||
* @param knowledge 知识库信息
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.bouncycastle.jcajce.provider.asymmetric.EXTERNAL;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
@@ -14,6 +13,7 @@ import org.xyzh.api.ai.dto.TbKnowledge;
|
||||
import org.xyzh.api.ai.service.KnowledgeService;
|
||||
import org.xyzh.api.system.service.SysConfigService;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.utils.id.IdUtil;
|
||||
|
||||
/**
|
||||
* @description 初始化客服系统必须的8个知识库,4个内部知识库,4个外部知识库,运行结束即销毁
|
||||
@@ -44,16 +44,13 @@ public class KnowledgeInit {
|
||||
List<TbKnowledge> knowledges = buildKnowledgeConfigs();
|
||||
int successCount = 0;
|
||||
int skipCount = 0;
|
||||
|
||||
for (TbKnowledge knowledge : knowledges) {
|
||||
if (checkKnowledgeExists(knowledge)) {
|
||||
logger.info("知识库已存在,跳过: {}", knowledge.getTitle());
|
||||
for(TbKnowledge knowledge : knowledges){
|
||||
if(!checkKnowledgeExists(knowledge.getKnowledgeId())){
|
||||
if(createKnowledge(knowledge)){
|
||||
successCount++;
|
||||
}
|
||||
}else{
|
||||
skipCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (createKnowledge(knowledge)) {
|
||||
successCount++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +63,18 @@ public class KnowledgeInit {
|
||||
*/
|
||||
private List<TbKnowledge> buildKnowledgeConfigs() {
|
||||
List<TbKnowledge> knowledges = new ArrayList<>();
|
||||
// 从数据库获取知识库配置默认信息
|
||||
TbKnowledge baseKnowledge = new TbKnowledge();
|
||||
baseKnowledge.setDifyIndexingTechnique(sysConfigService.getStringConfig("dify.knowledge.indexing.tchnique"));
|
||||
baseKnowledge.setEmbeddingModel(sysConfigService.getStringConfig("dify.knowledge.embedding.model"));
|
||||
baseKnowledge.setEmbeddingModelProvider(sysConfigService.getStringConfig("dify.knowledge.embedding.model.provider"));
|
||||
baseKnowledge.setRerankingEnable(sysConfigService.getBooleanConfig("dify.knowledge.reranking.enable"));
|
||||
baseKnowledge.setRerankModel(sysConfigService.getStringConfig("dify.knowledge.rerank.model"));
|
||||
baseKnowledge.setRerankModelProvider(sysConfigService.getStringConfig("dify.knowledge.rerank.model.provider"));
|
||||
baseKnowledge.setRetrievalTopK(sysConfigService.getIntConfig("dify.knowledge.retrieval.top.k"));
|
||||
baseKnowledge.setRetrievalScoreThreshold(sysConfigService.getDoubleConfig("dify.knowledge.retrieval.score.threshold"));
|
||||
|
||||
|
||||
// 外部知识库
|
||||
TbKnowledge outerDevOperKnowledge = new TbKnowledge();
|
||||
outerDevOperKnowledge.setKnowledgeId("workcase_outer_device_operate");
|
||||
@@ -125,12 +134,29 @@ public class KnowledgeInit {
|
||||
knowledges.add(innerServChatKnowledge);
|
||||
|
||||
// 统一设置dify知识库相关参数,并设置service为workcase
|
||||
for(TbKnowledge knowledge: knowledges){
|
||||
knowledge.setService(SERVICE_WORKCASE);
|
||||
knowledge.setOptsn(IdUtil.getOptsn());
|
||||
// 从baseKnowledge同步知识库默认配置
|
||||
knowledge.setDifyIndexingTechnique(baseKnowledge.getDifyIndexingTechnique());
|
||||
knowledge.setEmbeddingModel(baseKnowledge.getEmbeddingModel());
|
||||
knowledge.setEmbeddingModelProvider(baseKnowledge.getEmbeddingModelProvider());
|
||||
knowledge.setRerankingEnable(baseKnowledge.getRerankingEnable());
|
||||
knowledge.setRerankModel(baseKnowledge.getRerankModel());
|
||||
knowledge.setRerankModelProvider(baseKnowledge.getRerankModelProvider());
|
||||
knowledge.setRetrievalTopK(baseKnowledge.getRetrievalTopK());
|
||||
knowledge.setRetrievalScoreThreshold(baseKnowledge.getRetrievalScoreThreshold());
|
||||
}
|
||||
|
||||
return knowledges;
|
||||
}
|
||||
|
||||
private boolean checkKnowledgeExists(TbKnowledge knowledge){
|
||||
return true;
|
||||
private boolean checkKnowledgeExists(String knowledgeId){
|
||||
ResultDomain<TbKnowledge> knowledge = knowledgeService.getKnowledgeById(knowledgeId);
|
||||
if(knowledge.getSuccess() && knowledge.getData() != null){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,7 +164,7 @@ public class KnowledgeInit {
|
||||
*/
|
||||
private boolean createKnowledge(TbKnowledge knowledge) {
|
||||
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledge(knowledge);
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledgeInternal(knowledge);
|
||||
|
||||
if (result.getSuccess()) {
|
||||
logger.info("创建知识库成功: {} [{}]", knowledge.getTitle(), knowledge.getCategory());
|
||||
|
||||
3342
urbanLifelineServ/模型供应商.json
Normal file
3342
urbanLifelineServ/模型供应商.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,72 @@
|
||||
.kb-categories {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 16px;
|
||||
margin-bottom: 24px;
|
||||
|
||||
.kb-category-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 20px 16px;
|
||||
background: #f5f7fa;
|
||||
border: 2px solid transparent;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background: #ecf5ff;
|
||||
border-color: #b3d8ff;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: #ecf5ff;
|
||||
border-color: #409eff;
|
||||
}
|
||||
|
||||
.el-icon {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.cat-name {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cat-count {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.kb-files-section {
|
||||
.section-toolbar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 16px;
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
}
|
||||
}
|
||||
|
||||
.file-name-cell {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
|
||||
.file-icon {
|
||||
color: #409eff;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,10 +157,8 @@ const currentTabDesc = computed(() => currentTabConfig.value.desc)
|
||||
const currentTabLabel = computed(() => currentTabConfig.value.label)
|
||||
const currentTabColor = computed(() => currentTabConfig.value.color)
|
||||
|
||||
// 当前 Tab 下的知识库列表
|
||||
const currentKnowledges = computed(() =>
|
||||
knowledges.value.filter((kb: TbKnowledge) => kb.category === activeTab.value)
|
||||
)
|
||||
// 当前 Tab 下的知识库列表(直接使用查询结果,不再前端过滤)
|
||||
const currentKnowledges = computed(() => knowledges.value)
|
||||
|
||||
// 当前选中的知识库名称
|
||||
const currentKnowledgeName = computed(() => {
|
||||
@@ -176,16 +174,18 @@ const filteredDocuments = computed(() => {
|
||||
)
|
||||
})
|
||||
|
||||
// 获取知识库列表
|
||||
// 获取知识库列表(根据当前 Tab 的 category 查询)
|
||||
const fetchKnowledges = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const result = await aiKnowledgeAPI.listKnowledges({ service: 'workcase' })
|
||||
if (result.success && Array.isArray(result.data)) {
|
||||
knowledges.value = result.data
|
||||
// 默认选中当前 Tab 下的第一个知识库
|
||||
selectFirstKnowledge()
|
||||
}
|
||||
const result = await aiKnowledgeAPI.listKnowledges({
|
||||
service: 'workcase',
|
||||
category: activeTab.value
|
||||
})
|
||||
console.log('知识库列表响应:', result)
|
||||
// API 返回的是 dataList 字段
|
||||
knowledges.value = result.dataList || []
|
||||
selectFirstKnowledge()
|
||||
} catch (error) {
|
||||
console.error('获取知识库列表失败:', error)
|
||||
ElMessage.error('获取知识库列表失败')
|
||||
@@ -236,10 +236,13 @@ const fetchDocuments = async (knowledgeId: string) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Tab 切换
|
||||
// Tab 切换时重新查询对应类别的知识库
|
||||
const handleTabChange = () => {
|
||||
searchKeyword.value = ''
|
||||
selectFirstKnowledge()
|
||||
knowledges.value = []
|
||||
activeKnowledgeId.value = ''
|
||||
documents.value = []
|
||||
fetchKnowledges()
|
||||
}
|
||||
|
||||
// 选择知识库
|
||||
|
||||
Reference in New Issue
Block a user