redis反序列化问题
This commit is contained in:
@@ -4,6 +4,7 @@ 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;
|
||||
@@ -11,6 +12,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -27,28 +29,30 @@ public class KnowledgeInit {
|
||||
private static final String SERVICE_WORKCASE = "workcase";
|
||||
private static final String CATEGORY_INTERNAL = "internal";
|
||||
private static final String CATEGORY_EXTERNAL = "external";
|
||||
private static final String PERMISSION_PUBLIC = "PUBLIC";
|
||||
|
||||
@DubboReference(version = "1.0.0", group = "ai", timeout = 30000)
|
||||
private KnowledgeService knowledgeService;
|
||||
|
||||
@DubboReference(version = "1.0.0", group = "system", timeout = 30000)
|
||||
private SysConfigService sysConfigService;
|
||||
|
||||
@Bean
|
||||
public CommandLineRunner knowledgeInitRunner() {
|
||||
return args -> {
|
||||
logger.info("开始初始化客服系统知识库...");
|
||||
|
||||
List<KnowledgeConfig> configs = buildKnowledgeConfigs();
|
||||
List<TbKnowledge> knowledges = buildKnowledgeConfigs();
|
||||
int successCount = 0;
|
||||
int skipCount = 0;
|
||||
|
||||
for (KnowledgeConfig config : configs) {
|
||||
if (checkKnowledgeExists(knowledgeService, config.title)) {
|
||||
logger.info("知识库已存在,跳过: {}", config.title);
|
||||
for (TbKnowledge knowledge : knowledges) {
|
||||
if (checkKnowledgeExists(knowledge)) {
|
||||
logger.info("知识库已存在,跳过: {}", knowledge.getTitle());
|
||||
skipCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (createKnowledge(knowledgeService, config)) {
|
||||
if (createKnowledge(knowledge)) {
|
||||
successCount++;
|
||||
}
|
||||
}
|
||||
@@ -60,109 +64,88 @@ public class KnowledgeInit {
|
||||
/**
|
||||
* 构建8个知识库配置
|
||||
*/
|
||||
private List<KnowledgeConfig> buildKnowledgeConfigs() {
|
||||
List<KnowledgeConfig> configs = new ArrayList<>();
|
||||
private List<TbKnowledge> buildKnowledgeConfigs() {
|
||||
List<TbKnowledge> knowledges = new ArrayList<>();
|
||||
// 外部知识库
|
||||
TbKnowledge outerDevOperKnowledge = new TbKnowledge();
|
||||
outerDevOperKnowledge.setKnowledgeId("workcase_outer_device_operate");
|
||||
outerDevOperKnowledge.setTitle("设备操作指南");
|
||||
outerDevOperKnowledge.setAvatar("settings");
|
||||
outerDevOperKnowledge.setCategory(CATEGORY_EXTERNAL);
|
||||
knowledges.add(outerDevOperKnowledge);
|
||||
|
||||
TbKnowledge outerCommonErrorKnowledge = new TbKnowledge();
|
||||
outerCommonErrorKnowledge.setKnowledgeId("workcase_outer_common_error");
|
||||
outerCommonErrorKnowledge.setTitle("常见故障解决方案");
|
||||
outerCommonErrorKnowledge.setAvatar("question");
|
||||
outerCommonErrorKnowledge.setCategory(CATEGORY_EXTERNAL);
|
||||
knowledges.add(outerCommonErrorKnowledge);
|
||||
|
||||
TbKnowledge outerSanBaoKnowledge = new TbKnowledge();
|
||||
outerSanBaoKnowledge.setKnowledgeId("workcase_outer_sanbao");
|
||||
outerSanBaoKnowledge.setTitle("三包外服务政策");
|
||||
outerSanBaoKnowledge.setAvatar("document");
|
||||
outerSanBaoKnowledge.setCategory(CATEGORY_EXTERNAL);
|
||||
knowledges.add(outerSanBaoKnowledge);
|
||||
|
||||
TbKnowledge outerMountingsKnowledge = new TbKnowledge();
|
||||
outerMountingsKnowledge.setKnowledgeId("workcase_outer_mounting_chat");
|
||||
outerMountingsKnowledge.setTitle("配件咨询话术");
|
||||
outerMountingsKnowledge.setAvatar("chat");
|
||||
outerMountingsKnowledge.setCategory(CATEGORY_EXTERNAL);
|
||||
knowledges.add(outerMountingsKnowledge);
|
||||
|
||||
// 内部知识库
|
||||
TbKnowledge innerDevFixKnowledge = new TbKnowledge();
|
||||
innerDevFixKnowledge.setKnowledgeId("workcase_inner_device_fix");
|
||||
innerDevFixKnowledge.setTitle("技术维修手册");
|
||||
innerDevFixKnowledge.setAvatar("settings");
|
||||
outerMountingsKnowledge.setCategory(CATEGORY_INTERNAL);
|
||||
knowledges.add(innerDevFixKnowledge);
|
||||
|
||||
TbKnowledge innerProArgsKnowledge = new TbKnowledge();
|
||||
innerProArgsKnowledge.setKnowledgeId("workcase_inner_product_args_info");
|
||||
innerProArgsKnowledge.setTitle("产品参数明细");
|
||||
innerProArgsKnowledge.setAvatar("document");
|
||||
innerProArgsKnowledge.setCategory(CATEGORY_INTERNAL);
|
||||
knowledges.add(innerProArgsKnowledge);
|
||||
|
||||
TbKnowledge innerServExpKnowledge = new TbKnowledge();
|
||||
innerServExpKnowledge.setKnowledgeId("workcase_inner_service_exp");
|
||||
innerServExpKnowledge.setTitle("内部服务流程规范");
|
||||
innerServExpKnowledge.setAvatar("document");
|
||||
innerServExpKnowledge.setCategory(CATEGORY_INTERNAL);
|
||||
knowledges.add(innerServExpKnowledge);
|
||||
|
||||
TbKnowledge innerServChatKnowledge = new TbKnowledge();
|
||||
innerServChatKnowledge.setKnowledgeId("workcase_inner_service_chat");
|
||||
innerServChatKnowledge.setTitle("客户服务话术模板");
|
||||
innerServChatKnowledge.setAvatar("chat");
|
||||
innerServChatKnowledge.setCategory(CATEGORY_INTERNAL);
|
||||
knowledges.add(innerServChatKnowledge);
|
||||
|
||||
// 统一设置dify知识库相关参数,并设置service为workcase
|
||||
|
||||
// 4个内部知识库
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-政策法规库",
|
||||
"存储城市生命线相关政策法规、行业标准、规范文件",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-技术文档库",
|
||||
"存储技术规范、操作手册、维护指南等技术文档",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-案例经验库",
|
||||
"存储历史工单处理案例、经验总结、故障排查记录",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-培训资料库",
|
||||
"存储员工培训材料、业务知识、常见问题解答",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
|
||||
// 4个外部知识库
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-服务指南库",
|
||||
"面向公众的服务办理指南、流程说明、所需材料",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-常见问题库",
|
||||
"公众常见咨询问题及标准答案,FAQ知识库",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-公告通知库",
|
||||
"政府公告、服务通知、停水停电通知等公开信息",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-便民信息库",
|
||||
"便民服务信息、联系方式、服务网点、办事地点等",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
|
||||
return configs;
|
||||
return knowledges;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查知识库是否已存在
|
||||
*/
|
||||
private boolean checkKnowledgeExists(KnowledgeService knowledgeService, String title) {
|
||||
TbKnowledge filter = new TbKnowledge();
|
||||
filter.setTitle(title);
|
||||
filter.setService(SERVICE_WORKCASE);
|
||||
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.listKnowledges(filter);
|
||||
if (result.getSuccess() && result.getDataList() != null && !result.getDataList().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
private boolean checkKnowledgeExists(TbKnowledge knowledge){
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建知识库
|
||||
*/
|
||||
private boolean createKnowledge(KnowledgeService knowledgeService, KnowledgeConfig config) {
|
||||
TbKnowledge knowledge = new TbKnowledge();
|
||||
knowledge.setTitle(config.title);
|
||||
knowledge.setDescription(config.description);
|
||||
knowledge.setService(SERVICE_WORKCASE);
|
||||
knowledge.setCategory(config.category);
|
||||
knowledge.setDifyIndexingTechnique("high_quality");
|
||||
knowledge.setRetrievalTopK(5);
|
||||
knowledge.setRetrievalScoreThreshold(0.5);
|
||||
knowledge.setRerankingEnable(1);
|
||||
private boolean createKnowledge(TbKnowledge knowledge) {
|
||||
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledge(
|
||||
knowledge, PERMISSION_PUBLIC, null, null);
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledge(knowledge);
|
||||
|
||||
if (result.getSuccess()) {
|
||||
logger.info("创建知识库成功: {} [{}]", config.title, config.category);
|
||||
logger.info("创建知识库成功: {} [{}]", knowledge.getTitle(), knowledge.getCategory());
|
||||
return true;
|
||||
} else {
|
||||
logger.error("创建知识库失败: {} - {}", config.title, result.getMessage());
|
||||
logger.error("创建知识库失败: {} - {}", knowledge.getTitle(), result.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 知识库配置内部类
|
||||
*/
|
||||
private static class KnowledgeConfig {
|
||||
final String title;
|
||||
final String description;
|
||||
final String category;
|
||||
|
||||
KnowledgeConfig(String title, String description, String category) {
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user