合并
This commit is contained in:
@@ -4,6 +4,8 @@ public class Constant {
|
||||
|
||||
public static final String CHANNEL_DCC = "Channel_Dcc";
|
||||
|
||||
public static final String CHANNEL_4IN1 = "Channel_4in1";
|
||||
|
||||
public static final String DISPLAY_STATUS = "FINISHED";
|
||||
|
||||
public static final String INTELLIGENT_CUSTOMER_4IN1 = "INTELLIGENT_CUSTOMER_4IN1";
|
||||
|
||||
@@ -12,7 +12,7 @@ public enum BusinessTypeEnum {
|
||||
SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"),
|
||||
SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"),
|
||||
INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"),
|
||||
|
||||
SMART_ASSISTANT_4IN1("SMART_ASSISTANT_4IN1", "智能客服-4In1"),
|
||||
//索赔检核
|
||||
CLAIM_VERIFICATION("CLAIM_VERIFICATION", "索赔检核流程"),
|
||||
CLAIM_VERIFICATION_FILE_ANALYSIS("99001", "索赔检核文件分析"),
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.retry.annotation.EnableRetry;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@@ -18,6 +19,7 @@ import com.volvo.common.feign.annotation.EnableVolvoFeignClients;
|
||||
@MapperScan({"com.volvo.ai.analytic.center.mapper"})
|
||||
@EnableDiscoveryClient
|
||||
@EnableRetry
|
||||
@EnableAsync
|
||||
public class AiAnalyticCenterServiceApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.volvo.ai.analytic.center.job;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.volvo.ai.analytic.center.dto.PageDto;
|
||||
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
||||
import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO;
|
||||
@@ -11,12 +12,10 @@ import com.volvo.ai.analytic.center.entity.AiAnalysisErrors;
|
||||
import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs;
|
||||
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
||||
import com.volvo.ai.analytic.center.enums.CategoryEnum;
|
||||
import com.volvo.ai.analytic.center.feign.DiFyFeign;
|
||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper;
|
||||
import com.volvo.ai.analytic.center.mapper.TmTelephoneCorpusMapper;
|
||||
import com.volvo.ai.analytic.center.service.AiAnalysisErrorsService;
|
||||
import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService;
|
||||
import com.volvo.ai.analytic.center.service.DiFyService;
|
||||
import com.volvo.ai.analytic.center.service.TmTelephoneCorpusService;
|
||||
import com.volvo.ai.analytic.center.service.*;
|
||||
import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -34,6 +33,8 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -69,9 +70,16 @@ public class CorpusFailJob {
|
||||
private String dccMqTipic;
|
||||
@Value("${rocketmq.consumer.intelligentCustomer.topic}")
|
||||
private String intelligentCustomerTipic;
|
||||
|
||||
@Value("${rocketmq.producer.intelligentCustomer.topic}")
|
||||
private String intelligentCustomerProducerTopic;
|
||||
|
||||
@Autowired
|
||||
private TmTelephoneCorpusMapper tmTelephoneCorpusMapper;
|
||||
|
||||
@Autowired
|
||||
private DiFyFeign diFyFeign;
|
||||
|
||||
|
||||
/**
|
||||
* 企微语料处理
|
||||
@@ -235,4 +243,95 @@ public class CorpusFailJob {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 智能客服-电话场景-四合一 一分钟一次
|
||||
*/
|
||||
@XxlJob("intelligentCustomer4in1MobileFailTask")
|
||||
@PostMapping("intelligentCustomer4in1MobileFailTask")
|
||||
public void intelligentCustomer4in1MobileFailTask() {
|
||||
|
||||
log.info(" intelligentCustomer4in1MobileFailTask 解析失败重试处理");
|
||||
Integer total = aiAnalysisErrorsService.queryCountAnalysisErrorList(Collections.singletonList(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()));
|
||||
log.info("intelligentCustomer4in1MobileFailTask 语料解析失败重试处理数据量:{}", total);
|
||||
int totalPages = PageDto.getTotalPages(total, pageSize);
|
||||
log.info("intelligentCustomer4in1MobileFailTask 语料解析失败重试处理数据量:{},总页数:{}", total, totalPages);
|
||||
for (int i = 1; i <= totalPages; i++) {
|
||||
int offset = (i - 1) * pageSize;
|
||||
|
||||
List<AiAnalysisErrors> aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList(
|
||||
Collections.singletonList(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()), offset, pageSize);
|
||||
if (CollectionUtils.isNotEmpty(aiAnalysisErrorsListlist)) {
|
||||
log.info("intelligentCustomer4in1MobileFailTask语料解析失败重试处理 size:{}", aiAnalysisErrorsListlist.size());
|
||||
aiAnalysisErrorsListlist.forEach(aiAnalysisErrors -> {
|
||||
try {
|
||||
log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs-id:{}", aiAnalysisErrors.getAiAnalysisRequestId());
|
||||
String aiAnalysisRequestId = aiAnalysisErrors.getAiAnalysisRequestId();
|
||||
LambdaQueryWrapper<AiAnalysisRequestLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(AiAnalysisRequestLogs::getAiAnalysisRequestId, aiAnalysisRequestId);
|
||||
AiAnalysisRequestLogs aiAnalysisRequestLogs = aiAnalysisRequestLogsMapper.selectOne(queryWrapper);
|
||||
|
||||
log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs:{}", aiAnalysisRequestLogs);
|
||||
|
||||
if (null != aiAnalysisRequestLogs) {
|
||||
String difyRequest = aiAnalysisRequestLogs.getDifyRequest();
|
||||
log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs difyRequest:{}", aiAnalysisRequestLogs);
|
||||
DiFyReq diFyReq = JSON.parseObject(difyRequest, DiFyReq.class);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("inputs", diFyReq.getInputs());
|
||||
map.put("response_mode", "blocking");
|
||||
map.put("user", diFyReq.getUser());
|
||||
log.info("intelligentCustomer4in1MobileFailTask execDifyFlow dify request data:{}", map);
|
||||
JSONObject difyResult = diFyFeign.runWorkflows("Bearer " + diFyReq.getFlowId(), map);
|
||||
JSONObject data = difyResult.getJSONObject("data");
|
||||
log.info("intelligentCustomer4in1MobileFailTask execDifyFlow dify response aiID:{} , data:{}", aiAnalysisRequestId, data);
|
||||
data.put("aiAnalysisRequestId", aiAnalysisRequestId);
|
||||
|
||||
if (data.get("status").equals("succeeded")) {
|
||||
JSONObject outputsJson = data.getJSONObject("outputs");
|
||||
String message = JSONObject.toJSONString(outputsJson);
|
||||
log.info("intelligentCustomer4in1MobileFailTask send 4IN1mq {}", message);
|
||||
rocketMqTemplate.asyncSend(intelligentCustomerProducerTopic, MessageBuilder.withPayload(message).build(), new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info(" intelligentCustomer4in1MobileFailTask 失败补偿 发送MQ成功 消息体:{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable e) {
|
||||
log.error("intelligentCustomer4in1MobileFailTask 失败补偿 送MQ异常 消息体:{}, 异常:", message, e);
|
||||
}
|
||||
}, 10000);
|
||||
AiAnalysisErrors aiAnalysisErrors1 = new AiAnalysisErrors();
|
||||
aiAnalysisErrors1.setAiAnalysisRequestId(aiAnalysisRequestId);
|
||||
aiAnalysisErrors1.setAiAnalysisErrorHandlingStatus("1");
|
||||
aiAnalysisErrorsService.updateAiAnalysisErrors(aiAnalysisErrors1);
|
||||
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder()
|
||||
.aiAnalysisRequestId(data.getString("aiAnalysisRequestId"))
|
||||
.businessResponse(message)
|
||||
.difyResponse(data.toJSONString())
|
||||
.build());
|
||||
} else {
|
||||
log.info("intelligentCustomer4in1MobileFailTask execDifyFlow failed, aiAnalysisRequestId:{} , data:{}", aiAnalysisRequestId,
|
||||
data);
|
||||
String errorMsg = data.getString("error");
|
||||
aiAnalysisErrors.setRetryCount(aiAnalysisErrors.getRetryCount() + 1);
|
||||
aiAnalysisErrors.setUpdateBy("xxlJob");
|
||||
aiAnalysisErrors.setUpdateTime(new Date());
|
||||
aiAnalysisErrors.setAiAnalysisErrorMessage(errorMsg.length() > 1000 ? errorMsg.substring(0, 1000) : errorMsg);
|
||||
LambdaUpdateWrapper<AiAnalysisErrors> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisRequestId);
|
||||
aiAnalysisErrorsService.update(aiAnalysisErrors,updateWrapper);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("intelligentCustomer4in1MobileFailTask 语料解析失败补偿异常:{}", e);
|
||||
aiAnalysisErrors.setAiAnalysisErrorHandlingStatus("0");
|
||||
aiAnalysisErrors.setRetryCount(aiAnalysisErrors.getRetryCount() + 1);
|
||||
updateAiAnalysisErrors(aiAnalysisErrors, aiAnalysisErrors.getAiAnalysisRequestId());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
|
||||
package com.volvo.ai.analytic.center.mq;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.volvo.ai.analytic.center.constant.Constant;
|
||||
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
||||
import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService;
|
||||
import com.volvo.ai.analytic.center.service.TmTelephoneCorpusService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.common.message.MessageExt;
|
||||
@@ -15,8 +16,10 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @ClassName CorpusProcessKafkaConsumer
|
||||
* @ClassName 湖仓发送过来的kafka消息自己发MQ自己消费 DCC通话记录 (目前接入的需求:4IN1的智能工单-电话场景,LTO跟进记录AI总结)
|
||||
* @Description
|
||||
* @Author renzhen
|
||||
* @Date 2025-03-04 10:18
|
||||
@@ -37,9 +40,6 @@ public class CorpusDccMqConsumer implements RocketMQListener<MessageExt> {
|
||||
@Autowired
|
||||
private TmTelephoneCorpusService tmTelephoneCorpusService;
|
||||
|
||||
@Autowired
|
||||
private AiAnalysisRequestLogsService aiAnalysisRequestLogsService;
|
||||
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
@Override
|
||||
@@ -50,7 +50,15 @@ public class CorpusDccMqConsumer implements RocketMQListener<MessageExt> {
|
||||
String message = new String(messageExt.getBody());
|
||||
log.info("dcc_mq message: " + message);
|
||||
AicorpusTelephoneDTO aicorpusTelephone = objectMapper.readValue(message, AicorpusTelephoneDTO.class);
|
||||
tmTelephoneCorpusService.runTelephoneCorpusDify(aicorpusTelephone);
|
||||
//DCC场景
|
||||
if(Objects.equals(aicorpusTelephone.getCategoryCode(), Constant.CHANNEL_DCC)){
|
||||
tmTelephoneCorpusService.runTelephoneCorpusDify(aicorpusTelephone);
|
||||
}
|
||||
//channel_4in1场景
|
||||
if(Objects.equals(aicorpusTelephone.getCategoryCode(), Constant.CHANNEL_4IN1)){
|
||||
log.info("channel_4in1 message: " + JSON.toJSONString(aicorpusTelephone));
|
||||
tmTelephoneCorpusService.runTelephoneCorpusDify4in1(aicorpusTelephone);
|
||||
}
|
||||
log.info("corpusDccMqProducer mq 处理完成: {}", aicorpusTelephone.getSourceId());
|
||||
log.info("dcc_mq 处理完成,耗时:{}", System.currentTimeMillis() - startTime);
|
||||
} catch (JsonProcessingException e) {
|
||||
|
||||
@@ -30,7 +30,7 @@ import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* @ClassName CorpusProcessKafkaConsumer
|
||||
* @Description
|
||||
* @Description 消费湖仓同步的DCC通话记录kafka消息
|
||||
* @Author renzhen
|
||||
* @Date 2025-03-04 10:18
|
||||
* @Version 1.0
|
||||
@@ -99,7 +99,7 @@ public class CorpusProcessKafkaProducer {
|
||||
tmTelephoneCorpus.setCreateTime(LocalDateTime.now());
|
||||
// 条件:只处理dcc的 10s通话时间以上
|
||||
log.info("CorpusProcessKafkaProducer getCategoryCode: {},audioFileId:{},sourceId:{}", tmTelephoneCorpus.getCategoryCode(), aicorpusTelephone.getAudioFileId(), aicorpusTelephone.getSourceId());
|
||||
if (Constant.CHANNEL_DCC.equals(tmTelephoneCorpus.getCategoryCode())) {
|
||||
if (Constant.CHANNEL_DCC.equals(tmTelephoneCorpus.getCategoryCode())||Constant.CHANNEL_4IN1.equals(tmTelephoneCorpus.getCategoryCode())) {
|
||||
log.info(" dcc 语料开始处理");
|
||||
tmTelephoneCorpusService.saveTelephoneCorpus(tmTelephoneCorpus);
|
||||
long startTimeDify = System.currentTimeMillis();
|
||||
|
||||
@@ -17,6 +17,9 @@ public interface TmTelephoneCorpusService extends IService<TmTelephoneCorpus> {
|
||||
|
||||
void runTelephoneCorpusDify(AicorpusTelephoneDTO aicorpusTelephone);
|
||||
|
||||
void runTelephoneCorpusDify4in1(AicorpusTelephoneDTO aicorpusTelephone);
|
||||
|
||||
|
||||
String getCarModelList();
|
||||
|
||||
void sendMq(String tag, String message);
|
||||
|
||||
@@ -73,10 +73,13 @@ public class DiFyServiceImpl implements DiFyService{
|
||||
public JSONObject executeDifyFlow(DiFyReq diFyReq, String businessType, String businessData, String oldAiAnalysisRequestId) {
|
||||
String aiAnalysisRequestId = StringUtils.isEmpty(oldAiAnalysisRequestId)? AiAnalysisUtils.getAiAnalysisRequestId(businessType):oldAiAnalysisRequestId;
|
||||
try {
|
||||
Map<String, String> inputMap = JSON.parseObject(JSONObject.toJSONString(diFyReq.getInputs()),Map.class);
|
||||
inputMap.put("aiAnalysisRequestId",aiAnalysisRequestId);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("inputs",diFyReq.getInputs());
|
||||
map.put("inputs", inputMap);
|
||||
map.put("response_mode","blocking");
|
||||
map.put("user",diFyReq.getUser());
|
||||
diFyReq.setInputs(inputMap);
|
||||
|
||||
// 保存请求日志
|
||||
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder()
|
||||
@@ -93,6 +96,17 @@ public class DiFyServiceImpl implements DiFyService{
|
||||
log.debug("execDifyFlow dify response aiID:{} , data:{}",aiAnalysisRequestId,data);
|
||||
data.put("aiAnalysisRequestId",aiAnalysisRequestId);
|
||||
|
||||
if (data.get("status").equals("failed")) {
|
||||
log.info("execDifyFlow failed, aiAnalysisRequestId:{} , data:{}",aiAnalysisRequestId,data);
|
||||
String errorMsg = data.getString("error");
|
||||
aiAnalysisErrorsService.saveAiAnalysisErrors(AiAnalysisErrors.builder()
|
||||
.aiAnalysisRequestId(aiAnalysisRequestId)
|
||||
.aiAnalysisRequestType(businessType)
|
||||
.aiAnalysisErrorHandlingStatus("0")
|
||||
.aiAnalysisErrorMessage(errorMsg.length()>1000?errorMsg.substring(0,1000):errorMsg)
|
||||
.build());
|
||||
}
|
||||
|
||||
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder()
|
||||
.aiAnalysisRequestId(aiAnalysisRequestId)
|
||||
.difyResponse(data.toJSONString())
|
||||
|
||||
@@ -54,8 +54,6 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic
|
||||
private String topic;
|
||||
@Value("${dify.intelligentCustomer.fourInOneToken}")
|
||||
private String fourInOneToken;
|
||||
@Autowired
|
||||
private RemoteCarModelClient remoteCarModelClient;
|
||||
|
||||
@Autowired
|
||||
private DataMaskingRuleService dataMaskingRuleService;
|
||||
@@ -66,13 +64,6 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic
|
||||
@Autowired
|
||||
private AiAnalysisErrorsService aiAnalysisErrorsService;
|
||||
|
||||
@Autowired
|
||||
private AiAnalysisErrorsMapper aiAnalysisErrorsMapper;
|
||||
|
||||
@Autowired
|
||||
private TcIntelligentCustomerMapper tcIntelligentCustomerMapper;
|
||||
|
||||
private Map<String, List<String>> tcIntelligentCustomer = Collections.EMPTY_MAP;
|
||||
|
||||
@Override
|
||||
public void fourInOneMqService(FourInOneRequestDTO fourInOneRequestDTO) {
|
||||
@@ -148,39 +139,4 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
// 咨询类【201】/投诉类【202】/投诉类型【203】 过滤
|
||||
/** private String fourInOneMqServiceFilter(String customerType,String customerValue){
|
||||
if(tcIntelligentCustomer.isEmpty()){
|
||||
queryTcIntelligentCustomer();
|
||||
}
|
||||
List<String> typeValues = tcIntelligentCustomer.get(customerType);
|
||||
if(!typeValues.contains(customerValue)){
|
||||
return "";
|
||||
}
|
||||
return customerValue;
|
||||
}
|
||||
|
||||
|
||||
public Map<String, List<String>> queryTcIntelligentCustomer() {
|
||||
LambdaQueryWrapper<TcIntelligentCustomer> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(TcIntelligentCustomer::getIsDeleted, "0");
|
||||
List<TcIntelligentCustomer> tcIntelligentCustomerList =tcIntelligentCustomerMapper.selectList(queryWrapper);
|
||||
tcIntelligentCustomer = tcIntelligentCustomerList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
TcIntelligentCustomer::getIntelligentCustomerType, // 按照 IntelligentCustomerType 分组
|
||||
Collectors.mapping(
|
||||
customer -> {
|
||||
if (customer.getIntelligentCustomerType().equals(IntelligentCustomerTypeEnum.CONSULT_TYPE.getCode())) {
|
||||
return customer.getTypeOne(); // 如果是咨询类型,返回 TypeOne
|
||||
} else {
|
||||
return customer.getTypeOne().concat("#").concat(customer.getTypeTwo()).concat("#").concat(customer.getTypeThree()); // 其他类型,拼接 TypeOne、TypeTwo、TypeThree
|
||||
}
|
||||
},
|
||||
Collectors.toList()
|
||||
)
|
||||
));
|
||||
return tcIntelligentCustomer;
|
||||
}
|
||||
**/
|
||||
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import com.volvo.ai.analytic.center.feign.RemoteCarModelClient;
|
||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper;
|
||||
import com.volvo.ai.analytic.center.mapper.TmTelephoneCorpusMapper;
|
||||
import com.volvo.ai.analytic.center.service.*;
|
||||
import com.volvo.ai.analytic.center.utils.AiAnalysisUtils;
|
||||
import com.volvo.ai.analytic.center.utils.ConstantStr;
|
||||
import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -66,6 +67,9 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
|
||||
private String topic;
|
||||
@Value("${dify.corpus.telephoneToken}")
|
||||
private String telephoneToken;
|
||||
|
||||
@Value("${dify.intelligentCustomer.channel4In1Token}")
|
||||
private String channel4In1Token;
|
||||
@Autowired
|
||||
private RemoteCarModelClient remoteCarModelClient;
|
||||
|
||||
@@ -79,8 +83,7 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
|
||||
private AiAnalysisErrorsService aiAnalysisErrorsService;
|
||||
|
||||
@Autowired
|
||||
private AiAnalysisErrorsMapper aiAnalysisErrorsMapper;
|
||||
|
||||
public IntelligentCustomerService intelligentCustomerService;
|
||||
@Override
|
||||
@Transactional
|
||||
public void saveTelephoneCorpus(TmTelephoneCorpus tmTelephoneCorpus) {
|
||||
@@ -188,6 +191,97 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 4in1语料处理
|
||||
* @param aicorpusTelephone
|
||||
*/
|
||||
@Override
|
||||
public void runTelephoneCorpusDify4in1(AicorpusTelephoneDTO aicorpusTelephone) {
|
||||
|
||||
if(null != aicorpusTelephone){
|
||||
|
||||
List<DataMaskingRule> maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode());
|
||||
|
||||
RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput();
|
||||
runMaskingRuleInput.setDataMaskingRules(maskingRuleItems);
|
||||
|
||||
Map<String, Object> inputMap = new HashMap();
|
||||
DiFyReq diFyImageReq = new DiFyReq();
|
||||
diFyImageReq.setUser(ConstantStr.corpus_user);
|
||||
diFyImageReq.setFlowId(channel4In1Token);
|
||||
|
||||
|
||||
JSONObject jsonObject = JSONObject.parseObject( aicorpusTelephone.getDisplay());
|
||||
JSONArray segments = jsonObject.getJSONArray("segments");
|
||||
// Long audioDuration = jsonObject.getLong("audio_duration"); // 毫秒
|
||||
// if(audioDuration/1000 <=10){
|
||||
// log.info("电话语料时长小于10秒,不进行dify处理");
|
||||
// return;
|
||||
// }
|
||||
if (segments == null || segments.isEmpty()) {
|
||||
log.info("电话语料内容segments为空,不进行dify处理");
|
||||
return;
|
||||
}
|
||||
// 遍历 segments
|
||||
StringBuffer chatList = new StringBuffer();
|
||||
segments.stream()
|
||||
.map(segment -> (JSONObject) segment)
|
||||
.forEach(segment -> {
|
||||
JSONObject result = segment.getJSONObject("result");
|
||||
String text = result.getString("text");
|
||||
JSONObject analysisInfo = result.getJSONObject("analysis_info");
|
||||
String role = analysisInfo.getString("role");
|
||||
String title="";
|
||||
if(role.equals("AGENT")){
|
||||
title="顾问";
|
||||
}else{
|
||||
title="客户";
|
||||
}
|
||||
// 拼接 role 和 text
|
||||
String chat = title + ": " + text;
|
||||
runMaskingRuleInput.setOldStr(chat);
|
||||
String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput);
|
||||
chatList.append(corpusChat).append("\n");
|
||||
|
||||
});
|
||||
inputMap.put("workOrderContent", chatList.toString());
|
||||
inputMap.put("workOrderId",aicorpusTelephone.getSourceId());
|
||||
|
||||
String oldAiAnalysisRequestId = aicorpusTelephone.getAiAnalysisRequestId();
|
||||
String newAiAnalysisRequestId = StringUtils.isEmpty(oldAiAnalysisRequestId)? AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()):
|
||||
oldAiAnalysisRequestId;
|
||||
|
||||
inputMap.put("aiAnalysisRequestId",newAiAnalysisRequestId);
|
||||
diFyImageReq.setInputs(inputMap);
|
||||
CorpusReportDTO corpusReportDTO = new CorpusReportDTO();
|
||||
corpusReportDTO.setRecordId(aicorpusTelephone.getSourceId());
|
||||
|
||||
log.info("开始处理智能客服4IN1工作流,{}",diFyImageReq);
|
||||
|
||||
// 获取配置
|
||||
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode(), JSONObject.toJSONString(corpusReportDTO),newAiAnalysisRequestId );
|
||||
log.info("runDify智能客服4IN1 {}",execDifyFlow);
|
||||
String aiAnalysisRequestId = execDifyFlow.getString("aiAnalysisRequestId");
|
||||
if(null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")){
|
||||
JSONObject outputsJson = execDifyFlow.getJSONObject("outputs");
|
||||
String message = JSONObject.toJSONString(outputsJson);
|
||||
log.info("send 4IN1mq {}",message);
|
||||
intelligentCustomerService.sendMq(message);
|
||||
if(StringUtils.isNotEmpty(aicorpusTelephone.getAiAnalysisRequestId())){
|
||||
AiAnalysisErrors aiAnalysisErrors = new AiAnalysisErrors();
|
||||
aiAnalysisErrors.setAiAnalysisRequestId(aiAnalysisRequestId);
|
||||
aiAnalysisErrors.setAiAnalysisErrorHandlingStatus("1");
|
||||
aiAnalysisErrorsService.updateAiAnalysisErrors(aiAnalysisErrors);
|
||||
}
|
||||
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder().aiAnalysisRequestId(execDifyFlow.getString("aiAnalysisRequestId")).businessResponse(message).build());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public String getCarModelList(){
|
||||
try {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
@@ -16,7 +16,11 @@ public class ConstantStr {
|
||||
|
||||
public static final String INTELLIGENT_CUSTOMER_4IN1 = "INTELLIGENT_CUSTOMER_4IN1";
|
||||
|
||||
public static final String statTime = "statTime";
|
||||
public static final String endTime = "endTime";
|
||||
|
||||
public static final String customerFlowIds = "customerFlowIds";
|
||||
public static final String aiAnalysisRequestId = "aiAnalysisRequestId";
|
||||
|
||||
public static final String DIFY_COUNTERRATELIMIT = "DIFY_COUNTERRATELIMIT";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user