redis反序列化问题

This commit is contained in:
2025-12-19 19:04:43 +08:00
parent 1131a34c6e
commit 566d03491b
15 changed files with 123 additions and 140 deletions

View File

@@ -22,6 +22,10 @@
<groupId>org.xyzh.apis</groupId>
<artifactId>api-workcase</artifactId>
</dependency>
<dependency>
<groupId>org.xyzh.apis</groupId>
<artifactId>api-system</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.xyzh.apis</groupId>
<artifactId>api-ai</artifactId>

View File

@@ -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;
}
}
}