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

大模型处理逻辑优化

上级 ef63c0a9
......@@ -33,9 +33,11 @@ public enum AnalysisColumnEnum {
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;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zzsn.event.entity.Event;
import com.zzsn.event.entity.EventLlmConfig;
import com.zzsn.event.entity.SubjectAnalysis;
import com.zzsn.event.vo.CoOccurrenceVO;
import com.zzsn.event.vo.CountVO;
import com.zzsn.event.vo.EventContextVO;
import com.zzsn.event.vo.PropagationPathVo;
import com.zzsn.event.vo.*;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.LinkedHashMap;
......@@ -85,15 +83,16 @@ public interface AnalysisService {
/**
* 利用大模型生成的结果
*
* @param eventName 事件名称
* @param event 事件信息
* @param startTime 开始时间
* @param endTime 结束时间
* @param llmConfig 模型配置信息
* @author lkg
* @date 2025/7/17
*/
String llmResult(String eventName,String content, String startTime, String endTime, EventLlmConfig llmConfig);
String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode);
String llmResult(EventVO event, String content, String startTime, String endTime, EventLlmConfig llmConfig);
String llmResult(String eventId, String content, String startTime, String endTime, Integer columnCode);
/**
* 重新生成
......
......@@ -253,58 +253,61 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override
public PropagationPathVo propagationPath(String eventId) {
PropagationPathVo top = null;
Event event = eventService.getById(eventId);
String subjectName = event.getEventName();
//获取专题数据
String startDate = null;
String endDate = null;
if (event.getStartTime() != null) {
startDate = DateUtil.dateToString(event.getStartTime(), "yyyy-MM-dd HH:mm:ss");
}
if (event.getEndTime() != null) {
endDate = DateUtil.dateToString(event.getEndTime(), "yyyy-MM-dd HH:mm:ss");
}
List<SubjectDataVo> specialDataList = esService.getDataBySubjectId(eventId, startDate, endDate, Constants.FETCH_FIELDS_STATISTIC);
if (CollectionUtils.isNotEmpty(specialDataList)) {
//用于来源去重
List<String> allOriginList = new ArrayList<>();
top = new PropagationPathVo();
top.setName(subjectName);
top.setTime(DateUtil.dateToString(event.getStartTime()));
//获取发布时间最早的前10的资讯(来源不重复)
List<PropagationPathVo> secondList = new ArrayList<>();
List<SubjectDataVo> earlyList = topN(specialDataList, Constants.FAKE_NUM);
earlyList.forEach(e -> allOriginList.add(Constants.getRealOrigin(e.getOrigin())));
for (SubjectDataVo subjectDataVo : earlyList) {
String origin = subjectDataVo.getOrigin();
String time = subjectDataVo.getPublishDate();
if (StringUtils.isNotEmpty(origin)) {
PropagationPathVo second = new PropagationPathVo();
second.setName(Constants.getRealOrigin(origin));
second.setTime(time);
secondList.add(second);
List<String> thirdList = esService.originList(subjectDataVo.getTitle(), subjectDataVo.getPublishDate());
thirdList.removeAll(allOriginList);
List<PropagationPathVo> lastList = new ArrayList<>();
if (thirdList.size() > 3) {
thirdList = thirdList.subList(0, 3);
}
for (String s : thirdList) {
PropagationPathVo third = new PropagationPathVo();
third.setName(s);
lastList.add(third);
int count = esService.count(eventId, null, null);
if (count > 0) {
Event event = eventService.getById(eventId);
String subjectName = event.getEventName();
//获取专题数据
String startDate = null;
String endDate = null;
if (event.getStartTime() != null) {
startDate = DateUtil.dateToString(event.getStartTime(), "yyyy-MM-dd HH:mm:ss");
}
if (event.getEndTime() != null) {
endDate = DateUtil.dateToString(event.getEndTime(), "yyyy-MM-dd HH:mm:ss");
}
List<SubjectDataVo> specialDataList = esService.getDataBySubjectId(eventId, startDate, endDate, Constants.FETCH_FIELDS_STATISTIC);
if (CollectionUtils.isNotEmpty(specialDataList)) {
//用于来源去重
List<String> allOriginList = new ArrayList<>();
top = new PropagationPathVo();
top.setName(subjectName);
top.setTime(DateUtil.dateToString(event.getStartTime()));
//获取发布时间最早的前10的资讯(来源不重复)
List<PropagationPathVo> secondList = new ArrayList<>();
List<SubjectDataVo> earlyList = topN(specialDataList, Constants.FAKE_NUM);
earlyList.forEach(e -> allOriginList.add(Constants.getRealOrigin(e.getOrigin())));
for (SubjectDataVo subjectDataVo : earlyList) {
String origin = subjectDataVo.getOrigin();
String time = subjectDataVo.getPublishDate();
if (StringUtils.isNotEmpty(origin)) {
PropagationPathVo second = new PropagationPathVo();
second.setName(Constants.getRealOrigin(origin));
second.setTime(time);
secondList.add(second);
List<String> thirdList = esService.originList(subjectDataVo.getTitle(), subjectDataVo.getPublishDate());
thirdList.removeAll(allOriginList);
List<PropagationPathVo> lastList = new ArrayList<>();
if (thirdList.size() > 3) {
thirdList = thirdList.subList(0, 3);
}
for (String s : thirdList) {
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;
}
@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) {
return null;
}
......@@ -329,14 +332,14 @@ public class AnalysisServiceImpl implements AnalysisService {
}
}
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);
for (JSONObject impact : impactList) {
String theme = impact.getString("theme");
JSONObject params = new JSONObject();
params.put("eventName", eventName);
params.put("eventName", event.getEventName());
params.put("eventSummary", event.getEventDescribe());
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);
}
result = JSON.toJSONString(impactList);
......@@ -346,9 +349,9 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override
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);
return llmResult(event.getEventName(),content, startTime, endTime, llmConfig);
return llmResult(event,content, startTime, endTime, llmConfig);
}
@Override
......@@ -359,7 +362,6 @@ public class AnalysisServiceImpl implements AnalysisService {
String versionId = saveVersion(eventId, today);
EventVO event = eventService.queryInfo(eventId);
String eventName = event.getEventName();
String content = "事件标题;" + eventName + "\n采集关键词:" + event.getKeywordsVO().getKeyword();
log.info("{}-事件分析重新生成逻辑开始。。。", eventName);
String eventDescribe = event.getEventDescribe();
//核心摘要
......@@ -368,7 +370,8 @@ public class AnalysisServiceImpl implements AnalysisService {
//历史核心摘要是否为空
boolean empty = StringUtils.isEmpty(eventDescribe);
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) {
event.setEventDescribe(eventDescribe);
LambdaUpdateWrapper<Event> update = Wrappers.lambdaUpdate();
......@@ -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) {
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);
eventAnalysisVersionRecordService.save(record);
log.info("{}-事件分析【{}】重新生成逻辑完成。", eventName, config.getColumnName());
......
......@@ -85,27 +85,24 @@ public class AnalysisTask {
for (Event event : eventList) {
CompletableFuture.runAsync(() -> {
String eventId = event.getId();
int count = esService.count(eventId, null, null);
if (count > 0) {
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 (cacheObject == null) {
PropagationPathVo pathVo = analysisService.propagationPath(eventId);
if (ObjectUtils.isNotEmpty(pathVo)) {
redisUtil.set(key, pathVo);
log.info("事件-{},传播路径数据【永久】缓存成功!", event.getEventName());
}
}
} else {//已经结束的事件专题,缓存有效期一天
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 (cacheObject == null) {
PropagationPathVo pathVo = analysisService.propagationPath(eventId);
if (ObjectUtils.isNotEmpty(pathVo)) {
redisUtil.set(key, pathVo, 3600 * 24);
log.info("事件-{},传播路径数据缓存成功!", event.getEventName());
redisUtil.set(key, pathVo);
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论