提交 0c06ffd4 作者: 925993793@qq.com

大模型处理逻辑优化

上级 ef63c0a9
...@@ -33,9 +33,11 @@ public enum AnalysisColumnEnum { ...@@ -33,9 +33,11 @@ public enum AnalysisColumnEnum {
FOREIGN_SIMILAR_EVENT(11, "各国类似事件", "array", 1), FOREIGN_SIMILAR_EVENT(11, "各国类似事件", "array", 1),
DRIVING_FACTORS(12, "事件核心驱动因素", "string", 1), DRIVING_FACTORS(12, "事件核心驱动因素", "object", 1),
RELATED_INDICATOR(13, "事件相关指标", "string", 1) RELATED_INDICATOR(13, "事件相关指标", "array", 1),
IMPACT_ASSESSMENT_DETAIL(14, "影响评估详情", "string", 1),
; ;
//栏目编码 //栏目编码
......
...@@ -3,12 +3,10 @@ package com.zzsn.event.service; ...@@ -3,12 +3,10 @@ package com.zzsn.event.service;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.zzsn.event.entity.Event;
import com.zzsn.event.entity.EventLlmConfig; import com.zzsn.event.entity.EventLlmConfig;
import com.zzsn.event.entity.SubjectAnalysis; import com.zzsn.event.entity.SubjectAnalysis;
import com.zzsn.event.vo.CoOccurrenceVO; import com.zzsn.event.vo.*;
import com.zzsn.event.vo.CountVO;
import com.zzsn.event.vo.EventContextVO;
import com.zzsn.event.vo.PropagationPathVo;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
...@@ -85,15 +83,16 @@ public interface AnalysisService { ...@@ -85,15 +83,16 @@ public interface AnalysisService {
/** /**
* 利用大模型生成的结果 * 利用大模型生成的结果
* *
* @param eventName 事件名称 * @param event 事件信息
* @param startTime 开始时间 * @param startTime 开始时间
* @param endTime 结束时间 * @param endTime 结束时间
* @param llmConfig 模型配置信息 * @param llmConfig 模型配置信息
* @author lkg * @author lkg
* @date 2025/7/17 * @date 2025/7/17
*/ */
String llmResult(String eventName,String content, String startTime, String endTime, EventLlmConfig llmConfig); String llmResult(EventVO event, String content, String startTime, String endTime, EventLlmConfig llmConfig);
String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode);
String llmResult(String eventId, String content, String startTime, String endTime, Integer columnCode);
/** /**
* 重新生成 * 重新生成
......
...@@ -253,58 +253,61 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -253,58 +253,61 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override @Override
public PropagationPathVo propagationPath(String eventId) { public PropagationPathVo propagationPath(String eventId) {
PropagationPathVo top = null; PropagationPathVo top = null;
Event event = eventService.getById(eventId); int count = esService.count(eventId, null, null);
String subjectName = event.getEventName(); if (count > 0) {
//获取专题数据 Event event = eventService.getById(eventId);
String startDate = null; String subjectName = event.getEventName();
String endDate = null; //获取专题数据
if (event.getStartTime() != null) { String startDate = null;
startDate = DateUtil.dateToString(event.getStartTime(), "yyyy-MM-dd HH:mm:ss"); String endDate = null;
} if (event.getStartTime() != null) {
if (event.getEndTime() != null) { startDate = DateUtil.dateToString(event.getStartTime(), "yyyy-MM-dd HH:mm:ss");
endDate = DateUtil.dateToString(event.getEndTime(), "yyyy-MM-dd HH:mm:ss"); }
} if (event.getEndTime() != null) {
List<SubjectDataVo> specialDataList = esService.getDataBySubjectId(eventId, startDate, endDate, Constants.FETCH_FIELDS_STATISTIC); endDate = DateUtil.dateToString(event.getEndTime(), "yyyy-MM-dd HH:mm:ss");
if (CollectionUtils.isNotEmpty(specialDataList)) { }
//用于来源去重 List<SubjectDataVo> specialDataList = esService.getDataBySubjectId(eventId, startDate, endDate, Constants.FETCH_FIELDS_STATISTIC);
List<String> allOriginList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(specialDataList)) {
top = new PropagationPathVo(); //用于来源去重
top.setName(subjectName); List<String> allOriginList = new ArrayList<>();
top.setTime(DateUtil.dateToString(event.getStartTime())); top = new PropagationPathVo();
//获取发布时间最早的前10的资讯(来源不重复) top.setName(subjectName);
List<PropagationPathVo> secondList = new ArrayList<>(); top.setTime(DateUtil.dateToString(event.getStartTime()));
List<SubjectDataVo> earlyList = topN(specialDataList, Constants.FAKE_NUM); //获取发布时间最早的前10的资讯(来源不重复)
earlyList.forEach(e -> allOriginList.add(Constants.getRealOrigin(e.getOrigin()))); List<PropagationPathVo> secondList = new ArrayList<>();
for (SubjectDataVo subjectDataVo : earlyList) { List<SubjectDataVo> earlyList = topN(specialDataList, Constants.FAKE_NUM);
String origin = subjectDataVo.getOrigin(); earlyList.forEach(e -> allOriginList.add(Constants.getRealOrigin(e.getOrigin())));
String time = subjectDataVo.getPublishDate(); for (SubjectDataVo subjectDataVo : earlyList) {
if (StringUtils.isNotEmpty(origin)) { String origin = subjectDataVo.getOrigin();
PropagationPathVo second = new PropagationPathVo(); String time = subjectDataVo.getPublishDate();
second.setName(Constants.getRealOrigin(origin)); if (StringUtils.isNotEmpty(origin)) {
second.setTime(time); PropagationPathVo second = new PropagationPathVo();
secondList.add(second); second.setName(Constants.getRealOrigin(origin));
List<String> thirdList = esService.originList(subjectDataVo.getTitle(), subjectDataVo.getPublishDate()); second.setTime(time);
thirdList.removeAll(allOriginList); secondList.add(second);
List<PropagationPathVo> lastList = new ArrayList<>(); List<String> thirdList = esService.originList(subjectDataVo.getTitle(), subjectDataVo.getPublishDate());
if (thirdList.size() > 3) { thirdList.removeAll(allOriginList);
thirdList = thirdList.subList(0, 3); List<PropagationPathVo> lastList = new ArrayList<>();
} if (thirdList.size() > 3) {
for (String s : thirdList) { thirdList = thirdList.subList(0, 3);
PropagationPathVo third = new PropagationPathVo(); }
third.setName(s); for (String s : thirdList) {
lastList.add(third); PropagationPathVo third = new PropagationPathVo();
third.setName(s);
lastList.add(third);
}
second.setChildren(lastList);
allOriginList.addAll(thirdList);
} }
second.setChildren(lastList);
allOriginList.addAll(thirdList);
} }
top.setChildren(secondList);
} }
top.setChildren(secondList);
} }
return top; return top;
} }
@Override @Override
public String llmResult(String eventName,String content, String startTime, String endTime, EventLlmConfig llmConfig) { public String llmResult(EventVO event,String content, String startTime, String endTime, EventLlmConfig llmConfig) {
if (llmConfig == null) { if (llmConfig == null) {
return null; return null;
} }
...@@ -329,14 +332,14 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -329,14 +332,14 @@ public class AnalysisServiceImpl implements AnalysisService {
} }
} }
if (llmConfig.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT.getCode())) { if (llmConfig.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT.getCode())) {
String prompt = "根据提供的事件名称,以及其%s的概述,详细的描述下该事件的%s"; EventLlmConfig detailConfig = eventLlmConfigService.getConfig(event.getId(), AnalysisColumnEnum.IMPACT_ASSESSMENT_DETAIL.getCode());
List<JSONObject> impactList = JSON.parseArray(result, JSONObject.class); List<JSONObject> impactList = JSON.parseArray(result, JSONObject.class);
for (JSONObject impact : impactList) { for (JSONObject impact : impactList) {
String theme = impact.getString("theme");
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("eventName", eventName); params.put("eventName", event.getEventName());
params.put("eventSummary", event.getEventDescribe());
params.put("impactOutline", impact); params.put("impactOutline", impact);
String impactDetail = llmService.model(llmConfig.getLlmName(), String.format(prompt, theme, theme), params.toJSONString()); String impactDetail = llmService.model(llmConfig.getLlmName(), detailConfig.getLlmPrompt(), params.toJSONString());
impact.put("impactDetail", impactDetail); impact.put("impactDetail", impactDetail);
} }
result = JSON.toJSONString(impactList); result = JSON.toJSONString(impactList);
...@@ -346,9 +349,9 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -346,9 +349,9 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override @Override
public String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode) { public String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode) {
Event event = eventService.getById(eventId); EventVO event = eventService.queryInfo(eventId);
EventLlmConfig llmConfig = eventLlmConfigService.getConfig(eventId, columnCode); EventLlmConfig llmConfig = eventLlmConfigService.getConfig(eventId, columnCode);
return llmResult(event.getEventName(),content, startTime, endTime, llmConfig); return llmResult(event,content, startTime, endTime, llmConfig);
} }
@Override @Override
...@@ -359,7 +362,6 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -359,7 +362,6 @@ public class AnalysisServiceImpl implements AnalysisService {
String versionId = saveVersion(eventId, today); String versionId = saveVersion(eventId, today);
EventVO event = eventService.queryInfo(eventId); EventVO event = eventService.queryInfo(eventId);
String eventName = event.getEventName(); String eventName = event.getEventName();
String content = "事件标题;" + eventName + "\n采集关键词:" + event.getKeywordsVO().getKeyword();
log.info("{}-事件分析重新生成逻辑开始。。。", eventName); log.info("{}-事件分析重新生成逻辑开始。。。", eventName);
String eventDescribe = event.getEventDescribe(); String eventDescribe = event.getEventDescribe();
//核心摘要 //核心摘要
...@@ -368,7 +370,8 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -368,7 +370,8 @@ public class AnalysisServiceImpl implements AnalysisService {
//历史核心摘要是否为空 //历史核心摘要是否为空
boolean empty = StringUtils.isEmpty(eventDescribe); boolean empty = StringUtils.isEmpty(eventDescribe);
EventLlmConfig config = configList.stream().filter(e -> e.getColumnCode().equals(AnalysisColumnEnum.CORE_SUMMARY.getCode())).findFirst().orElse(new EventLlmConfig()); EventLlmConfig config = configList.stream().filter(e -> e.getColumnCode().equals(AnalysisColumnEnum.CORE_SUMMARY.getCode())).findFirst().orElse(new EventLlmConfig());
eventDescribe = this.llmResult(eventName,content, null, null, config); String content = "事件标题;" + eventName + "\n采集关键词:" + event.getKeywordsVO().getKeyword();
eventDescribe = this.llmResult(event,content, null, null, config);
if (empty) { if (empty) {
event.setEventDescribe(eventDescribe); event.setEventDescribe(eventDescribe);
LambdaUpdateWrapper<Event> update = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<Event> update = Wrappers.lambdaUpdate();
...@@ -404,10 +407,14 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -404,10 +407,14 @@ public class AnalysisServiceImpl implements AnalysisService {
} }
} }
//大模型相关逻辑生成的结果(影响评估,举措建议等) //大模型相关逻辑生成的结果(影响评估,举措建议等)
List<EventLlmConfig> collect = configList.stream().filter(e -> !e.getColumnCode().equals(AnalysisColumnEnum.CORE_SUMMARY.getCode())).collect(Collectors.toList()); List<EventLlmConfig> collect = configList.stream()
.filter(e -> !e.getColumnCode().equals(AnalysisColumnEnum.CORE_SUMMARY.getCode())
&& !e.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT_DETAIL.getCode()))
.collect(Collectors.toList());
String content = "事件标题;" + eventName + "\n事件摘要:" + event.getEventDescribe();
for (EventLlmConfig config : collect) { for (EventLlmConfig config : collect) {
try { try {
String llmResult = this.llmResult(eventName,content, null, null, config); String llmResult = this.llmResult(event,content, null, null, config);
EventAnalysisVersionRecord record = EventAnalysisVersionRecord.of(versionId, Objects.requireNonNull(AnalysisColumnEnum.getByCode(config.getColumnCode())), llmResult); EventAnalysisVersionRecord record = EventAnalysisVersionRecord.of(versionId, Objects.requireNonNull(AnalysisColumnEnum.getByCode(config.getColumnCode())), llmResult);
eventAnalysisVersionRecordService.save(record); eventAnalysisVersionRecordService.save(record);
log.info("{}-事件分析【{}】重新生成逻辑完成。", eventName, config.getColumnName()); log.info("{}-事件分析【{}】重新生成逻辑完成。", eventName, config.getColumnName());
......
...@@ -85,27 +85,24 @@ public class AnalysisTask { ...@@ -85,27 +85,24 @@ public class AnalysisTask {
for (Event event : eventList) { for (Event event : eventList) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
String eventId = event.getId(); String eventId = event.getId();
int count = esService.count(eventId, null, null); String key = Constants.SUBJECT_ANALYSIS_PRE + Constants.PROPAGATION_KEY + eventId;
if (count > 0) { Date timeDisable = event.getEndTime();
String key = Constants.SUBJECT_ANALYSIS_PRE + Constants.PROPAGATION_KEY + eventId; //已经结束的事件专题,永久缓存
Date timeDisable = event.getEndTime(); if (timeDisable != null && deadlineDate.compareTo(timeDisable) > 0) {
//已经结束的事件专题,永久缓存 Object cacheObject = redisUtil.get(key);
if (timeDisable != null && deadlineDate.compareTo(timeDisable) > 0) { if (cacheObject == null) {
Object cacheObject = redisUtil.get(key);
if (cacheObject == null) {
PropagationPathVo pathVo = analysisService.propagationPath(eventId);
if (ObjectUtils.isNotEmpty(pathVo)) {
redisUtil.set(key, pathVo);
log.info("事件-{},传播路径数据【永久】缓存成功!", event.getEventName());
}
}
} else {//已经结束的事件专题,缓存有效期一天
PropagationPathVo pathVo = analysisService.propagationPath(eventId); PropagationPathVo pathVo = analysisService.propagationPath(eventId);
if (ObjectUtils.isNotEmpty(pathVo)) { if (ObjectUtils.isNotEmpty(pathVo)) {
redisUtil.set(key, pathVo, 3600 * 24); redisUtil.set(key, pathVo);
log.info("事件-{},传播路径数据缓存成功!", event.getEventName()); log.info("事件-{},传播路径数据【永久】缓存成功!", event.getEventName());
} }
} }
} else {//已经结束的事件专题,缓存有效期一天
PropagationPathVo pathVo = analysisService.propagationPath(eventId);
if (ObjectUtils.isNotEmpty(pathVo)) {
redisUtil.set(key, pathVo, 3600 * 24);
log.info("事件-{},传播路径数据缓存成功!", event.getEventName());
}
} }
}); });
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论