提交 88773e55 作者: 925993793@qq.com

事件分析优化

上级 f5510d77
......@@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -291,7 +292,7 @@ public class EventAnalysisController {
} else {
List<CoOccurrenceVO> coOccurrenceVOS = analysisService.coOccurrence(eventId, startTime, endTime);
if (CollectionUtils.isNotEmpty(coOccurrenceVOS)) {
redisUtil.set(key, coOccurrenceVOS,3600 * 24);
redisUtil.set(key, coOccurrenceVOS, 3600 * 24);
}
return Result.OK(coOccurrenceVOS);
}
......@@ -458,7 +459,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.IMPACT_ASSESSMENT.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.IMPACT_ASSESSMENT.getName());
}
return Result.OK(data);
}
......@@ -489,7 +490,7 @@ public class EventAnalysisController {
try {
data = JSON.parseObject(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DRIVING_FACTORS.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DRIVING_FACTORS.getName());
}
return Result.OK(data);
}
......@@ -520,7 +521,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.RELATED_INDICATOR.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.RELATED_INDICATOR.getName());
}
return Result.OK(data);
}
......@@ -551,7 +552,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.MEASURE_SUGGEST.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.MEASURE_SUGGEST.getName());
}
return Result.OK(data);
}
......@@ -582,7 +583,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.KNOWLEDGE_ENTRY.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.KNOWLEDGE_ENTRY.getName());
}
return Result.OK(data);
}
......@@ -613,7 +614,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.ENTERPRISE_CASE.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.ENTERPRISE_CASE.getName());
}
return Result.OK(data);
}
......@@ -663,26 +664,26 @@ public class EventAnalysisController {
versionId = eventAnalysisVersion.getId();
}
}
List<Map<String,Object>> dataList = new ArrayList<>();
Map<String,Object> domestic = new HashMap<>();
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> domestic = new HashMap<>();
String domesticSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getCode());
domestic.put("type",AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
domestic.put("type", AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
List<JSONObject> domesticSimilarEventList = new ArrayList<>();
try {
domesticSimilarEventList = JSON.parseArray(domesticSimilarEvent, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
}
domestic.put("data", domesticSimilarEventList);
dataList.add(domestic);
Map<String,Object> foreign = new HashMap<>();
Map<String, Object> foreign = new HashMap<>();
String foreignSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getCode());
foreign.put("type",AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
foreign.put("type", AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
List<JSONObject> foreignSimilarEventList = new ArrayList<>();
try {
foreignSimilarEventList = JSON.parseArray(foreignSimilarEvent, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
}
foreign.put("data", foreignSimilarEventList);
dataList.add(foreign);
......@@ -715,7 +716,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
}
return Result.OK(data);
}
......@@ -746,7 +747,7 @@ public class EventAnalysisController {
try {
data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
}
return Result.OK(data);
}
......@@ -791,27 +792,42 @@ public class EventAnalysisController {
* @date 2025/8/15
*/
@PostMapping("/exportPPT")
public void exportPPT(@RequestBody JSONObject params, HttpServletResponse response) throws IOException {
public Result<?> exportPPT(@RequestBody JSONObject params) {
String versionId = params.getString("versionId");
if (StringUtils.isEmpty(versionId)) {
return;
return Result.FAIL("请选择要导出的版本");
}
String pptPath;
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.getById(versionId);
if (eventAnalysisVersion != null && StringUtils.isNotEmpty(eventAnalysisVersion.getPptPath())) {
pptPath = eventAnalysisVersion.getPptPath();
} else {
CompletableFuture.runAsync(() -> {
String eventId = params.getString("eventId");
JSONArray content = params.getJSONArray("content");
String ppt = analysisService.exportPPT(eventId, versionId,content);
if (ppt == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "PPT文件生成失败");
return;
analysisService.exportPPT(eventId, versionId, content);
});
return Result.OK("PPT正在生成中。。。");
}
/**
* 下载ppt
*
* @param versionId 版本id
* @param response 响应
* @author lkg
* @date 2025/8/18
*/
@GetMapping("/downloadPPT")
public void downloadPPT(@RequestParam String versionId, HttpServletResponse response) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.getById(versionId);
if (eventAnalysisVersion != null && StringUtils.isNotEmpty(eventAnalysisVersion.getPptPath())) {
commonService.downloadTemplate(response, eventAnalysisVersion.getPptPath());
} else {
pptPath = ppt;
String json = JSON.toJSONString(Result.FAIL(201, "PPT还在生成中。。。"));
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
try (PrintWriter writer = response.getWriter()) {
writer.println(json);
} catch (Exception ignored) {
}
}
commonService.downloadTemplate(response, pptPath);
}
/**
......
......@@ -174,8 +174,19 @@ public class EventHomeController {
*/
@GetMapping("/hotWordRecommend")
public Result<?> hotWordRecommend(@RequestParam String networkName) {
String prompt = "请根据提供的百度/新浪热榜中的网络事件,再结合网络上资讯,推荐一些简短的关键词。以json格式输出:[\"关键词1\",\"关键词2\"]";
String result = llmService.model(null, prompt, networkName);
String prompt = "你是一个专业信息采集助手,根据用户专题描述生成关键词表达式:\n" +
"1. 用 + 表示与关系(必须同现),| 表示或关系(任一出现),用()分组\n" +
"2. 执行三步操作:\n" +
" (1) 提取核心实体(如企业/产品名)\n" +
" (2) 将抽象词拆解为3-5个具体场景词(如\"动向\"→\"上升|下降|波动|结构调整\")\n" +
" (3) 扩展同义词/行业关联词\n" +
"3. 排除时间词,+号不超过2个,单组|内词不超过5个\n" +
"4. 输出仅含表达式\n" +
"\n" +
"示例: \n" +
"描述:苹果新款iPhone发布引发市场反响\n" +
"输出:(苹果|iPhone)+(発売|価格|予約状況|市場シェア|消費者反応)";
String result = llmService.model(null,null, prompt, networkName);
if (result.startsWith("```json")) {
result = result.substring(7, result.length() - 3);
} else if (result.startsWith("```")) {
......
......@@ -8,21 +8,11 @@ public interface LlmService {
/**
* glm模型调用
*
* @param model 模型类型
* @param modelType 模型类型
* @param modelName 模型名称
* @param system 提示词
* @param content 引用内容
* @return 大模型响应结果
*/
String model(String model, String system, String content);
/**
* 采集词推荐(定制自定义专题)
*
* @param modelName 模型名称
* @param prompt 提示词
* @param content 输入的内容
* @author lkg
* @date 2025/8/16
*/
String crawlerWord(String modelName, String prompt, String content);
String model(String modelType, String modelName, String system, String content);
}
......@@ -45,11 +45,14 @@ public class LlmServiceImpl implements LlmService {
private LlmProperties llmProperties;
@Override
public String model(String modelType, String system, String content) {
public String model(String modelType,String modelName, String system, String content) {
if (StringUtils.isEmpty(modelType)) {
modelType = llmProperties.getDefaultModelType();
}
LlmProperties.ModelConfig modelConfig = llmProperties.getModelConfig(modelType);
if (StringUtils.isNotEmpty(modelName)) {
modelConfig.setDefaultModel(modelName);
}
if (modelType.equalsIgnoreCase("zhipu")) {
return glmModel(modelConfig, system, content);
} else if (modelType.equalsIgnoreCase("qwen")) {
......@@ -62,15 +65,6 @@ public class LlmServiceImpl implements LlmService {
return null;
}
@Override
public String crawlerWord(String modelName, String prompt, String content) {
LlmProperties.ModelConfig modelConfig = llmProperties.getModelConfig("qwen");
if (StringUtils.isNotEmpty(modelName)) {
modelConfig.setDefaultModel(modelName);
}
return qwenModel(modelConfig, prompt, content);
}
/**
* glm模型调用
*
......
......@@ -311,8 +311,27 @@ public class AnalysisServiceImpl implements AnalysisService {
if (llmConfig == null) {
return null;
}
String result = llmService.model(llmConfig.getLlmName(), llmConfig.getLlmPrompt(), content);
result = result.replaceAll("```json","").replaceAll("```","");
String result = llmService.model(llmConfig.getLlmName(),null, llmConfig.getLlmPrompt(), content);
AnalysisColumnEnum analysisColumnEnum = AnalysisColumnEnum.getByCode(llmConfig.getColumnCode());
String startHeader = null;
if (analysisColumnEnum != null) {
String resType = analysisColumnEnum.getResType();
if (resType.equals("array")) {
startHeader = "[";
} else if (resType.equals("object")) {
startHeader = "{";
}
}
if (startHeader != null && !result.startsWith(startHeader)) {
if (result.startsWith("```json")) {
result = result.substring(7, result.length() - 3);
} else if (result.startsWith("```")) {
result = result.substring(3, result.length() - 3);
} else if (result.contains(startHeader)){
result = result.substring(result.indexOf(startHeader));
}
}
result = result.replaceAll("```json", "").replaceAll("```","");
if (llmConfig.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT.getCode())) {
EventLlmConfig detailConfig = eventLlmConfigService.getConfig(event.getId(), AnalysisColumnEnum.IMPACT_ASSESSMENT_DETAIL.getCode());
List<JSONObject> impactList = JSON.parseArray(result, JSONObject.class);
......@@ -321,7 +340,7 @@ public class AnalysisServiceImpl implements AnalysisService {
params.put("eventName", event.getEventName());
params.put("eventSummary", event.getEventDescribe());
params.put("impactOutline", impact);
String impactDetail = llmService.model(detailConfig.getLlmName(), detailConfig.getLlmPrompt(), params.toJSONString());
String impactDetail = llmService.model(detailConfig.getLlmName(),null, detailConfig.getLlmPrompt(), params.toJSONString());
impact.put("impactDetail", impactDetail);
}
result = JSON.toJSONString(impactList);
......
......@@ -71,7 +71,7 @@ public class NetWorkEventTask {
public void test(Integer type) {
List<EventNetwork> networkList = getNetWordEventList(type);
String response = llmService.model(null, PROMPT, JSONObject.toJSONString(networkList));
String response = llmService.model(null,null, PROMPT, JSONObject.toJSONString(networkList));
if (response.contains("```json")) {
response = response.substring(response.indexOf("```json") + 7, response.lastIndexOf("```"));
}
......@@ -109,7 +109,7 @@ public class NetWorkEventTask {
}
if (CollectionUtils.isNotEmpty(finalList)) {
finalList.forEach(network -> network.setLatest(1));
String response = llmService.model(null, PROMPT, JSONObject.toJSONString(finalList));
String response = llmService.model(null,null, PROMPT, JSONObject.toJSONString(finalList));
if (StringUtils.isNotEmpty(response)) {
try {
if (response.contains("```json")) {
......
......@@ -183,3 +183,28 @@ caiji:
data-permit:
dataPermitGetQueryEntityTest: http://1.95.77.159:10089/permission/
dataPermitGetQueryEntityProd: http://1.95.14.24:8060/
model:
default-modelType: zhipu
configs:
- modelType: zhipu
modelTypeName: 智谱
url: https://open.bigmodel.cn/api/paas/v4/chat/completions
api-key: c5a53bd5f95a4e37a8997deb5d0c6031.orXyRRPNvZiqRaxF
default-model: glm-4-flash #免费
web-search: true
- modelType: qwen
modelTypeName: 千问
url: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
api-key: sk-01ee9a6efa394178993a950b768e3753
default-model: qwen-plus #收费
- modelType: deepseek
modelTypeName: deepseek
url: https://api.deepseek.com/v1/chat/completions
api-key: sk-656a8ec451dc47aaad3dacf24fe36f20
default-model: deepseek-chat #收费
- modelType: doubao
modelTypeName: 豆包
url: https://ark.cn-beijing.volces.com/api/v3/chat/completions
api-key: ab54c534-4f3c-41b9-9b27-132cb7954b6f
default-model: doubao-1-5-pro-32k-250115 # Doubao-1.5-pro-32k #收费
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论