diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java index 2f3b50f..62039ff 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java @@ -23,7 +23,11 @@ public enum BusinessTypeEnum { CASE("case", "舆情事件"), - SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌") + SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌"), + + CORPUS_PORTRAIT_DCC("SMART_ASSISTANT_DCC", "智能助手-画像-DCC"), + CORPUS_PORTRAIT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-画像-企微"), + CORPUS_PORTRAIT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-画像-铭牌"), ; private String code; diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/CorpusPortraitService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/CorpusPortraitService.java index f285758..e714276 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/CorpusPortraitService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/CorpusPortraitService.java @@ -3,6 +3,7 @@ package com.volvo.ai.analytic.center.service; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; +import com.volvo.ai.analytic.center.dto.corpus.OdsVdqwMessageOTD; import com.volvo.ai.analytic.center.entity.TmNameplateCorpus; import com.volvo.common.core.util.ResultMsg; @@ -17,9 +18,9 @@ public interface CorpusPortraitService { void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone); - void portraitQiWei(TmNameplateCorpus item); + void portraitQiWei(OdsVdqwMessageOTD item, String statTime, String endTime); - void portraitNameplate(JSONObject execDifyFlow,String aiAnalysisRequestId, TmNameplateCorpus tmNameplateCorpus); + void portraitNameplate(TmNameplateCorpus item); } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmOdsVdqwMessagearchivingService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmOdsVdqwMessagearchivingService.java index 0080f54..bdf3c8b 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmOdsVdqwMessagearchivingService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmOdsVdqwMessagearchivingService.java @@ -1,7 +1,12 @@ package com.volvo.ai.analytic.center.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.volvo.ai.analytic.center.entity.TmOdsVdqwExternalcontact; import com.volvo.ai.analytic.center.entity.TmOdsVdqwMessagearchiving; +import com.volvo.ai.analytic.center.entity.TmOdsVdqwWorkuserinfo; + +import java.util.List; + /** * @description 电话语料表-同步表 * @author BEJSON @@ -11,5 +16,8 @@ public interface TmOdsVdqwMessagearchivingService extends IService userIds); + + TmOdsVdqwExternalcontact getUnionId(List userIds); } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java index 256518f..3babda0 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java @@ -2,8 +2,11 @@ package com.volvo.ai.analytic.center.service; import com.baomidou.mybatisplus.extension.service.IService; import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; +import com.volvo.ai.analytic.center.entity.DataMaskingRule; import com.volvo.ai.analytic.center.entity.TmTelephoneCorpus; +import java.util.List; + /** * @description 电话语料表-同步表 * @author BEJSON @@ -20,4 +23,7 @@ public interface TmTelephoneCorpusService extends IService { String getCarModelList(); void sendMq(String tag, String message); + + + public String processChatSegments(String display, List maskingRuleItems); } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/CorpusPortraitServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/CorpusPortraitServiceImpl.java index 6832d12..7d6f770 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/CorpusPortraitServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/CorpusPortraitServiceImpl.java @@ -1,38 +1,29 @@ package com.volvo.ai.analytic.center.service.impl; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -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; +import com.volvo.ai.analytic.center.dto.corpus.OdsVdqwMessageOTD; import com.volvo.ai.analytic.center.dto.req.DiFyReq; import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput; import com.volvo.ai.analytic.center.entity.*; import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; -import com.volvo.ai.analytic.center.enums.CategoryEnum; -import com.volvo.ai.analytic.center.feign.RemoteCarModelClient; -import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; -import com.volvo.ai.analytic.center.mapper.TmNameplateCorpusMapper; import com.volvo.ai.analytic.center.mapper.TmOdsVdqwMessagearchivingMapper; -import com.volvo.ai.analytic.center.mapper.TtNameplateRecordMapper; import com.volvo.ai.analytic.center.service.*; import com.volvo.ai.analytic.center.utils.ConstantStr; -import com.volvo.common.core.util.ResultMsg; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -46,54 +37,206 @@ import java.util.concurrent.CompletableFuture; public class CorpusPortraitServiceImpl implements CorpusPortraitService { @Autowired - private TmOdsVdqwMessagearchivingMapper tmOdsVdqwMessagearchivingMapper; + TmTelephoneCorpusService tmTelephoneCorpusService; - @Autowired - private TmNameplateCorpusMapper tmNameplateCorpusMapper; + @Value("${dify.corpus.portrait.dccToken}") + private String dccToken; - @Autowired - private TtNameplateRecordMapper ttNameplateRecordMapper; - @Autowired - private TmTelephoneCorpusService tmTelephoneCorpusService; + @Value("${dify.corpus.portrait.qiweiToken}") + private String qiweiToken; + @Value("${dify.corpus.portrait.nameplateToken}") + private String nameplateAppKey; @Autowired - private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; - - @Autowired - private AiAnalysisErrorsMapper aiAnalysisErrorsMapper; + private DataMaskingRuleService dataMaskingRuleService; @Autowired private DiFyService diFyService; - @Resource - private RocketMQTemplate rocketMqTemplate; - @Value("${dify.corpus.nameplate.appkey}") - private String nameplateAppKey; - - @Value("${batch.size}") - public int pageSize = 100; @Autowired - private RemoteCarModelClient remoteCarModelClient; + private AiAnalysisErrorsService aiAnalysisErrorsService; @Autowired - private DataMaskingRuleService dataMaskingRuleService; + private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; + @Autowired + TmOdsVdqwMessagearchivingService tmOdsVdqwMessagearchivingService; @Autowired - @Resource(name = "threadPoolTaskExecutor") - private ThreadPoolTaskExecutor executor; - + private TmOdsVdqwMessagearchivingMapper tmOdsVdqwMessagearchivingMapper; @Override public void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone) { + if (null != aicorpusTelephone) { + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.CORPUS_PORTRAIT_DCC.getCode()); + + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + Map inputMap = new HashMap(); + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser(ConstantStr.corpus_user); + diFyImageReq.setFlowId(dccToken); + + + String chatContent = tmTelephoneCorpusService.processChatSegments(aicorpusTelephone.getDisplay(), maskingRuleItems); + if (chatContent == null) { + return; + } + + ZonedDateTime zonedDateTime = ZonedDateTime.parse(JSONObject.parseObject(aicorpusTelephone.getDisplay()).getString("start_time")); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedDateStartTime = zonedDateTime.format(formatter); + inputMap.put("chat", chatContent); + inputMap.put("analysisScene", "2"); + inputMap.put("recordId", aicorpusTelephone.getSourceId()); + inputMap.put("communicateDate", formattedDateStartTime); + inputMap.put("version", 2); + diFyImageReq.setInputs(inputMap); + CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); + corpusReportDTO.setCorpusTime(formattedDateStartTime); + corpusReportDTO.setRecordId(aicorpusTelephone.getSourceId()); + corpusReportDTO.setAnalysisScene(2l); + // 获取配置 + JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.CORPUS_PORTRAIT_DCC.getCode(), JSONObject.toJSONString(corpusReportDTO), aicorpusTelephone.getAiAnalysisRequestId()); + log.info("runDify execDifyFlow {}", execDifyFlow); + String aiAnalysisRequestId = execDifyFlow.getString("aiAnalysisRequestId"); + if (null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")) { + + // 发送消息 + } + + try { + 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("").build()); + + } catch (Exception e) { + log.info(" 电话语料处理保存报告异常processItem:{} ", e); + } + + } } @Override - public void portraitQiWei(TmNameplateCorpus item) { + public void portraitQiWei(OdsVdqwMessageOTD item, String statTime, String endTime) { + log.info("画像-企微语料内容:FromUserId:{}, AcceptUserId:{}", item.getFromUserId(), item.getAcceptUserId()); + // 1,vdqw_workuserinfo 这个表对应是 B端认证中心userId + // 2,vdqw_externalcontact 这个表对应是 企微客户unionId + TmOdsVdqwExternalcontact tmOdsVdqwExternalcontact = tmOdsVdqwMessagearchivingService.getUnionId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); + TmOdsVdqwWorkuserinfo tmOdsVdqwWorkuserinfo = tmOdsVdqwMessagearchivingService.getUserId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); + if (null == tmOdsVdqwExternalcontact || null == tmOdsVdqwWorkuserinfo) { + log.info("企微查询信息为空 "); + return; + } + String unionId = tmOdsVdqwExternalcontact.getUnionId(); + String userId = tmOdsVdqwWorkuserinfo.getMiddleUserId().toString(); + log.info("企微查询信息:unionId:{}, userId:{}", unionId, userId); + if (StringUtils.isNotBlank(item.getFromUserId()) && StringUtils.isNotBlank(item.getAcceptUserId())) { + List contetnList = tmOdsVdqwMessagearchivingMapper.queryOdsVdqwMessageByFromUserIdAndAcceptUserId(statTime, endTime, Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); + OdsVdqwMessageOTD maxMsgTimeItem = contetnList.stream() + .max((o1, o2) -> o1.getMsgTime().compareTo(o2.getMsgTime())) + .orElse(null); + Map inputMap = new HashMap<>(); + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser(ConstantStr.corpus_user); + diFyImageReq.setFlowId(qiweiToken); + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.CORPUS_PORTRAIT_QIWEI.getCode()); + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + StringBuffer chatList = new StringBuffer(); + AtomicInteger externalcontactCount = new AtomicInteger(); + contetnList.forEach(contentItem -> { + String title = ""; + if (tmOdsVdqwExternalcontact.getExternalUserId().equals(contentItem.getFromUserId())) { + title = "客户:"; + externalcontactCount.addAndGet(1); + } else { + title = "顾问:"; + } + JSONObject contentJson = JSONObject.parseObject(contentItem.getContent()); + String content = contentJson.getString("content"); + // 拼接 role 和 text + String chat = title.concat(content); + runMaskingRuleInput.setOldStr(chat); + String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + chatList.append(corpusChat).append("\n"); + }); + if (externalcontactCount.get() < 1) { + log.info("没有客户回复的语料,无需解析"); + return; + } + inputMap.put("chat", chatList.toString()); + inputMap.put("analysisScene", "1"); + inputMap.put("unionId", unionId); + inputMap.put("consultantId", userId); + inputMap.put("communicateDate", DateUtil.format(maxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN)); + inputMap.put("version", 2); + diFyImageReq.setInputs(inputMap); + + CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); + corpusReportDTO.setCorpusTime(DateUtil.format(maxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN)); + corpusReportDTO.setUnionId(unionId); + corpusReportDTO.setUserId(userId); + corpusReportDTO.setAnalysisScene(1l); + // 获取配置 + JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode(), JSONObject.toJSONString(corpusReportDTO), null); + log.info("runDify execDifyFlow {}", execDifyFlow); + if (null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")) { + } + + try { + aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder().aiAnalysisRequestId(execDifyFlow.getString("aiAnalysisRequestId")).businessResponse("").build()); + } catch (Exception e) { + log.info(" 企业语料处理保存报告异常processItem:{} ", e); + } + } } @Override - public void portraitNameplate(JSONObject execDifyFlow, String aiAnalysisRequestId, TmNameplateCorpus tmNameplateCorpus) { + public void portraitNameplate(TmNameplateCorpus item) { + + try { + Optional.ofNullable(item).filter(tmNameplateCorpus -> tmNameplateCorpus.getCustomerFlowId()!=null && tmNameplateCorpus.getNameplateContent()!=null).orElseThrow(()->new RuntimeException("铭牌语料为空")); + + String customerFlowId = item.getCustomerFlowId(); + String nameplateContent = item.getNameplateContent(); + log.info("铭牌数据处理:customerFlowId:{}", customerFlowId); + + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser(ConstantStr.corpus_user); + diFyImageReq.setFlowId(nameplateAppKey); + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_NAMEPLATE.getCode()); + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + runMaskingRuleInput.setOldStr(nameplateContent); + String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + Map inputMap = new HashMap<>(); + String carModel = tmTelephoneCorpusService.getCarModelList(); + inputMap.put("dialogue", corpusChat); + inputMap.put("model", carModel); + inputMap.put("customerFlowId", item.getCustomerFlowId()); + inputMap.put("analysisScene", "3"); + inputMap.put("version",2); + diFyImageReq.setInputs(inputMap); + + CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); + corpusReportDTO.setCustomerFlowId(customerFlowId); + corpusReportDTO.setAnalysisScene(3l); + corpusReportDTO.setCarModel(carModel); + // 获取配置 + JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_NAMEPLATE.getCode(), JSONObject.toJSONString(corpusReportDTO),null); + log.info("runDify execDifyFlow {}", execDifyFlow); + } catch (Exception e) { + log.error("nameplate processItem error {}", e.getMessage()); + } + + } } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java index ee6880d..a899bcb 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java @@ -226,7 +226,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl userIds){ + public TmOdsVdqwExternalcontact getUnionId(List userIds){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(TmOdsVdqwExternalcontact::getExternalUserId, userIds); queryWrapper.eq(TmOdsVdqwExternalcontact::getIsDeleted, 0); @@ -237,7 +237,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl userIds){ + public TmOdsVdqwWorkuserinfo getUserId(List userIds){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(TmOdsVdqwWorkuserinfo::getUserId, userIds); queryWrapper.eq(TmOdsVdqwWorkuserinfo::getIsDeleted, 0); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java index 5ab97fc..b0a4d34 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java @@ -102,45 +102,16 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl (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"); - }); - - ZonedDateTime zonedDateTime = ZonedDateTime.parse(jsonObject.getString("start_time")); + ZonedDateTime zonedDateTime = ZonedDateTime.parse(JSONObject.parseObject(aicorpusTelephone.getDisplay()).getString("start_time")); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateStartTime = zonedDateTime.format(formatter); String carModel = getCarModelList(); - inputMap.put("chat",chatList.toString()); + inputMap.put("chat",chatContent); inputMap.put("model",carModel); inputMap.put("analysisScene", "2"); inputMap.put("recordId", aicorpusTelephone.getSourceId()); @@ -178,6 +149,54 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl maskingRuleItems) { + JSONObject jsonObject = JSONObject.parseObject(display); + JSONArray segments = jsonObject.getJSONArray("segments"); + Long audioDuration = jsonObject.getLong("audio_duration"); // 单位:毫秒 + + // 时长小于10秒不处理 + if (audioDuration / 1000 <= 10) { + log.info("电话语料时长小于10秒,不进行dify处理"); + return null; + } + + // segments 为空不处理 + if (segments == null || segments.isEmpty()) { + log.info("电话语料内容segments为空,不进行dify处理"); + return null; + } + + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + StringBuffer chatList = new StringBuffer(); + + // 遍历 segments 并拼接内容 + 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 ("AGENT".equals(role)) { + title = "顾问"; + } + + String chat = title + ": " + text; + + // 应用脱敏规则 + runMaskingRuleInput.setOldStr(chat); + String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + + chatList.append(corpusChat).append("\n"); + }); + + return chatList.toString(); + } + public String getCarModelList(){ try { long startTime = System.currentTimeMillis();