提交 25b0bb27 作者: 925993793@qq.com

模型逻辑优化、增加驱动因素和相关指标接口

上级 3880a65a
package com.zzsn.event.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 大模型配置参数
* @author wangFeng
* @date 2025/1/9 17:57
*/
@Data
@Component
@ConfigurationProperties(prefix = "model")
public class LlmProperties {
private String defaultModelType;
private List<ModelConfig> configs;
@Data
public static class ModelConfig{
//模型类型
private String modelType;
//模型类型中文名称
private String modelTypeName;
//模型url
private String url;
//模型apiKey
private String apiKey;
//默认模型
private String defaultModel;
//是否开启网络搜索
private Boolean webSearch;
}
/**
* 根据模型类型获取模型配置
*
* @param modelType 模型类型
* @author lkg
* @date 2025/8/6
*/
public ModelConfig getModelConfig(String modelType){
for (ModelConfig config : configs) {
if (config.getModelType().equals(modelType)){
return config;
}
}
return null;
}
}
...@@ -454,6 +454,56 @@ public class EventAnalysisController { ...@@ -454,6 +454,56 @@ public class EventAnalysisController {
} }
/** /**
* 驱动因素
*
* @param eventId 事件id
* @param startTime 开始时间
* @param endTime 结束时间
* @author lkg
* @date 2024/4/12
*/
@GetMapping("/drivingFactors")
public Result<?> drivingFactors(@RequestParam String eventId,
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId);
if (eventAnalysisVersion != null) {
versionId = eventAnalysisVersion.getId();
}
}
String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.DRIVING_FACTORS.getCode());
//String result = analysisService.llmResult(eventId, startTime, endTime, AnalysisColumnEnum.DRIVING_FACTORS.getCode());
return Result.OK(versionData);
}
/**
* 相关指标
*
* @param eventId 事件id
* @param startTime 开始时间
* @param endTime 结束时间
* @author lkg
* @date 2024/4/12
*/
@GetMapping("/relatedIndicator")
public Result<?> relatedIndicator(@RequestParam String eventId,
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId);
if (eventAnalysisVersion != null) {
versionId = eventAnalysisVersion.getId();
}
}
String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.RELATED_INDICATOR.getCode());
//String result = analysisService.llmResult(eventId, startTime, endTime, AnalysisColumnEnum.RELATED_INDICATOR.getCode());
return Result.OK(versionData);
}
/**
* 举措建议 * 举措建议
* *
* @param eventId 事件id * @param eventId 事件id
......
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.event.constant.Constants;
import com.zzsn.event.constant.Result; import com.zzsn.event.constant.Result;
import com.zzsn.event.entity.*; import com.zzsn.event.entity.*;
import com.zzsn.event.enums.AnalysisColumnEnum; import com.zzsn.event.enums.AnalysisColumnEnum;
...@@ -181,7 +182,8 @@ public class EventManageController { ...@@ -181,7 +182,8 @@ public class EventManageController {
//事件分析 //事件分析
log.info("新增事件,事件分析,事件id:{}", event.getId()); log.info("新增事件,事件分析,事件id:{}", event.getId());
kafkaTemplate.send(EVENT_MODEL_KAFKA_CHANNEL, event.getEventCode()); kafkaTemplate.send(EVENT_MODEL_KAFKA_CHANNEL, event.getEventCode());
});
CompletableFuture.runAsync(() -> {
//立马执行一次事件分析 //立马执行一次事件分析
analysisService.regenerate(event.getId()); analysisService.regenerate(event.getId());
}); });
......
...@@ -5,11 +5,9 @@ import com.zzsn.event.entity.EventAnalysisVersion; ...@@ -5,11 +5,9 @@ import com.zzsn.event.entity.EventAnalysisVersion;
import com.zzsn.event.entity.EventAnalysisVersionRecord; import com.zzsn.event.entity.EventAnalysisVersionRecord;
import com.zzsn.event.entity.EventLlmConfig; import com.zzsn.event.entity.EventLlmConfig;
import com.zzsn.event.enums.AnalysisColumnEnum; import com.zzsn.event.enums.AnalysisColumnEnum;
import com.zzsn.event.service.AnalysisService; import com.zzsn.event.service.*;
import com.zzsn.event.service.EventAnalysisVersionRecordService;
import com.zzsn.event.service.EventAnalysisVersionService;
import com.zzsn.event.service.EventLlmConfigService;
import com.zzsn.event.util.DateUtil; import com.zzsn.event.util.DateUtil;
import com.zzsn.event.vo.EventVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -35,6 +33,8 @@ public class LLmConfigController { ...@@ -35,6 +33,8 @@ public class LLmConfigController {
private EventAnalysisVersionService eventAnalysisVersionService; private EventAnalysisVersionService eventAnalysisVersionService;
@Autowired @Autowired
private EventAnalysisVersionRecordService eventAnalysisVersionRecordService; private EventAnalysisVersionRecordService eventAnalysisVersionRecordService;
@Autowired
private IEventService eventService;
/** /**
* 事件下大模型配置信息 * 事件下大模型配置信息
...@@ -73,8 +73,11 @@ public class LLmConfigController { ...@@ -73,8 +73,11 @@ public class LLmConfigController {
llmConfigService.modifySingle(eventLlmConfig); llmConfigService.modifySingle(eventLlmConfig);
CompletableFuture.runAsync(() ->{ CompletableFuture.runAsync(() ->{
String eventId = eventLlmConfig.getEventId(); String eventId = eventLlmConfig.getEventId();
EventVO event = eventService.queryInfo(eventId);
String eventName = event.getEventName();
String content = "事件标题;" + eventName + "\n采集关键词:" + event.getKeywordsVO().getKeyword();
//调用大模型更细结果 //调用大模型更细结果
String llmResult = analysisService.llmResult(eventId, null, null, eventLlmConfig.getColumnCode()); String llmResult = analysisService.llmResult(eventId,content, null, null, eventLlmConfig.getColumnCode());
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId); EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId);
String versionId; String versionId;
if (eventAnalysisVersion == null) { if (eventAnalysisVersion == null) {
......
...@@ -31,7 +31,12 @@ public enum AnalysisColumnEnum { ...@@ -31,7 +31,12 @@ public enum AnalysisColumnEnum {
DOMESTIC_SIMILAR_EVENT(10, "中国类似事件", "array", 1), DOMESTIC_SIMILAR_EVENT(10, "中国类似事件", "array", 1),
FOREIGN_SIMILAR_EVENT(11, "各国类似事件", "array", 1); FOREIGN_SIMILAR_EVENT(11, "各国类似事件", "array", 1),
DRIVING_FACTORS(12, "事件核心驱动因素", "string", 1),
RELATED_INDICATOR(13, "事件相关指标", "string", 1)
;
//栏目编码 //栏目编码
private final Integer code; private final Integer code;
......
...@@ -92,8 +92,8 @@ public interface AnalysisService { ...@@ -92,8 +92,8 @@ public interface AnalysisService {
* @author lkg * @author lkg
* @date 2025/7/17 * @date 2025/7/17
*/ */
String llmResult(String eventName, String startTime, String endTime, EventLlmConfig llmConfig); String llmResult(String eventName,String content, String startTime, String endTime, EventLlmConfig llmConfig);
String llmResult(String eventId, String startTime, String endTime, Integer columnCode); String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode);
/** /**
* 重新生成 * 重新生成
......
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.obs.services.model.PutObjectResult; import com.obs.services.model.PutObjectResult;
...@@ -302,11 +303,11 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -302,11 +303,11 @@ public class AnalysisServiceImpl implements AnalysisService {
} }
@Override @Override
public String llmResult(String eventName, String startTime, String endTime, EventLlmConfig llmConfig) { public String llmResult(String eventName,String content, String startTime, String endTime, EventLlmConfig llmConfig) {
if (llmConfig == null) { if (llmConfig == null) {
return null; return null;
} }
String result = llmService.model(llmConfig.getLlmName(), llmConfig.getLlmPrompt(), eventName); String result = llmService.model(llmConfig.getLlmName(), llmConfig.getLlmPrompt(), content);
AnalysisColumnEnum analysisColumnEnum = AnalysisColumnEnum.getByCode(llmConfig.getColumnCode()); AnalysisColumnEnum analysisColumnEnum = AnalysisColumnEnum.getByCode(llmConfig.getColumnCode());
String startHeader = null; String startHeader = null;
if (analysisColumnEnum != null) { if (analysisColumnEnum != null) {
...@@ -343,10 +344,10 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -343,10 +344,10 @@ public class AnalysisServiceImpl implements AnalysisService {
} }
@Override @Override
public String llmResult(String eventId, String startTime, String endTime, Integer columnCode) { public String llmResult(String eventId,String content, String startTime, String endTime, Integer columnCode) {
Event event = eventService.getById(eventId); Event event = eventService.getById(eventId);
EventLlmConfig llmConfig = eventLlmConfigService.getConfig(eventId, columnCode); EventLlmConfig llmConfig = eventLlmConfigService.getConfig(eventId, columnCode);
return llmResult(event.getEventName(), startTime, endTime, llmConfig); return llmResult(event.getEventName(),content, startTime, endTime, llmConfig);
} }
@Override @Override
...@@ -356,8 +357,9 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -356,8 +357,9 @@ public class AnalysisServiceImpl implements AnalysisService {
String today = DateUtil.dateToString(new Date()); String today = DateUtil.dateToString(new Date());
//保存版本信息 //保存版本信息
String versionId = saveVersion(eventId, today); String versionId = saveVersion(eventId, today);
Event event = eventService.getById(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();
//核心摘要 //核心摘要
...@@ -366,10 +368,12 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -366,10 +368,12 @@ 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, null, null, config); eventDescribe = this.llmResult(eventName,content, null, null, config);
if (empty) { if (empty) {
event.setEventDescribe(eventDescribe); event.setEventDescribe(eventDescribe);
eventService.updateById(event); LambdaUpdateWrapper<Event> update = Wrappers.lambdaUpdate();
update.set(Event::getEventDescribe, eventDescribe).eq(Event::getId, eventId);
eventService.update(update);
} }
} }
EventAnalysisVersionRecord coreSummaryRecord = EventAnalysisVersionRecord.of(versionId, AnalysisColumnEnum.CORE_SUMMARY, eventDescribe); EventAnalysisVersionRecord coreSummaryRecord = EventAnalysisVersionRecord.of(versionId, AnalysisColumnEnum.CORE_SUMMARY, eventDescribe);
...@@ -399,7 +403,7 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -399,7 +403,7 @@ 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())).collect(Collectors.toList());
for (EventLlmConfig config : collect) { for (EventLlmConfig config : collect) {
String llmResult = this.llmResult(eventName, null, null, config); String llmResult = this.llmResult(eventName,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);
records.add(record); records.add(record);
log.info("{}-事件分析【{}】重新生成逻辑完成。", eventName, config.getColumnName()); log.info("{}-事件分析【{}】重新生成逻辑完成。", eventName, config.getColumnName());
......
...@@ -180,18 +180,27 @@ infoSource: ...@@ -180,18 +180,27 @@ infoSource:
columnListByWait: http://1.95.79.85:8823/baseSourceInfo/api/infoSource/columnListByWait columnListByWait: http://1.95.79.85:8823/baseSourceInfo/api/infoSource/columnListByWait
columnDetail: http://1.95.79.85:8823/baseSourceInfo/api/infoSource/columnDetail columnDetail: http://1.95.79.85:8823/baseSourceInfo/api/infoSource/columnDetail
model: model:
aichain: default-modelType: zhipu
url: https://open.bigmodel.cn/api/paas/v4/chat/completions configs:
authorization: Bearer 3262d41a17a9490a8528eaf52a2be6a0.LNbHPCRmnzFgPHRp - modelType: zhipu
cookie: acw_tc=2760822c17247248406261468e6c541507ba9035f95078363549469047ee74 modelTypeName: 智谱
qwen: url: https://open.bigmodel.cn/api/paas/v4/chat/completions
apiKey: sk-01ee9a6efa394178993a950b768e3753 api-key: c5a53bd5f95a4e37a8997deb5d0c6031.orXyRRPNvZiqRaxF
deepseek: default-model: glm-4-flash #免费
url: https://api.deepseek.com/v1/chat/completions web-search: true
# api-key: sk-0e374c2ff9a147a2822c36d1c971fda1 - modelType: qwen
api-key: sk-656a8ec451dc47aaad3dacf24fe36f20 modelTypeName: 千问
doubao: url: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
url: https://ark.cn-beijing.volces.com/api/v3/chat/completions api-key: sk-01ee9a6efa394178993a950b768e3753
api-key: ab54c534-4f3c-41b9-9b27-132cb7954b6f default-model: qwen-plus #收费
default-model: doubao-1-5-pro-32k-250115 # Doubao-1.5-pro-32k # 收费 - 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论