提交 cefb3b6b 作者: 925993793@qq.com

定制专题逻辑优化、总结摘要抽取接口

上级 88773e55
......@@ -2,8 +2,10 @@ package com.zzsn.event.external.controller;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.event.constant.Result;
......@@ -14,11 +16,17 @@ import com.zzsn.event.external.vo.SubjectInfoVO;
import com.zzsn.event.external.vo.SubjectVO;
import com.zzsn.event.llm.LlmService;
import com.zzsn.event.service.CommonService;
import com.zzsn.event.service.InformationService;
import com.zzsn.event.service.SubjectService;
import com.zzsn.event.service.SubjectSimpleService;
import com.zzsn.event.util.HttpUtil;
import com.zzsn.event.util.RedisUtil;
import com.zzsn.event.vo.InfoDataSearchCondition;
import com.zzsn.event.vo.SubjectDetailVO;
import com.zzsn.event.vo.SubjectSimpleVO;
import com.zzsn.event.vo.es.DisplayInfo;
import com.zzsn.event.xxljob.service.IXxlJobInfoService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -55,6 +63,12 @@ public class ExternalController {
private CommonService commonService;
@Autowired
private LlmService llmService;
@Autowired
private InformationService informationService;
@Autowired
private RedisUtil redisUtil;
@Autowired
SubjectService subjectService;
@Value("${caiji.keywordCrawler.url:}")
private String keywordCrawlerUrl;
......@@ -104,21 +118,19 @@ public class ExternalController {
*/
@GetMapping("/crawlerWordRecommend")
public Result<?> crawlerWordRecommend(@RequestParam String remark) {
String prompt = "你是一个专业信息采集助手,根据用户提供的专题描述,精准提取核心实体和主题,生成符合以下规则的关键词表达式:\n" +
"1. 用 `+` 表示 **与** 关系(必须同时出现)\n" +
"2. 用 `|` 表示 **或** 关系(任一出现即可)\n" +
"3. +两端的关键词组用 `()` 框选\n" +
"4. 关键词必须直接来自描述或合理扩展的同义/关联词\n" +
"5. 输出仅含表达式,无额外解释\n" +
"6.+号使用不超过2个\n" +
"7.不要把时间提取进表达式\n" +
"8.输入输出为日语时,检查拼写是否有误,不要包含特殊字符,输出书面表达\n" +
String prompt = "你是一个专业信息采集助手,根据用户专题描述生成关键词表达式:\n" +
"1. 用 + 表示与关系(必须同现),| 表示或关系(任一出现),用()分组\n" +
"2. 执行三步操作:\n" +
" (1) 提取核心实体(如企业/产品名)\n" +
" (2) 将抽象词拆解为3-5个具体场景词(如\"动向\"→\"上升|下降|波动|结构调整\")\n" +
" (3) 扩展同义词/行业关联词\n" +
"3. 排除时间词,+号不超过2个,单组|内词不超过5个\n" +
"4. 输出仅含表达式\n" +
"\n" +
"\n" +
"### 示例\n" +
"专题描述:\"星动纪元、云深处科技分别完成近5亿元融资,用于人形机器人研发与量产\" \n" +
"输出:(星动纪元|云深处科技)+(融资|量产)";
String crawlerWord = llmService.crawlerWord("qwen-max-latest", prompt, remark);
"示例: \n" +
"描述:苹果新款iPhone发布引发市场反响\n" +
"输出:(苹果|iPhone)+(発売|価格|予約状況|市場シェア|消費者反応)";
String crawlerWord = llmService.model("qwen", "qwen-max-latest", prompt, remark);
return Result.OK(crawlerWord);
}
......@@ -269,4 +281,67 @@ public class ExternalController {
}
return Result.OK();
}
/**
* 汇总摘要
*
* @param subjectId 专题id
* @author lkg
* @date 2025/8/16
*/
@GetMapping("/gatherSummary")
public Result<?> gatherSummary(@RequestParam String subjectId) {
InfoDataSearchCondition searchCondition = new InfoDataSearchCondition();
searchCondition.setSubjectId(subjectId);
searchCondition.setCategory(2);
searchCondition.setColumn("score");
searchCondition.setPageSize(20);
IPage<DisplayInfo> pageList = informationService.subjectPageList(searchCondition);
List<DisplayInfo> records = pageList.getRecords();
if (CollectionUtils.isNotEmpty(records)) {
JSONObject params = new JSONObject();
List<JSONObject> summaryList = new ArrayList<>();
records.forEach(record -> {
JSONObject summary = new JSONObject();
summary.put("summary", record.getSummary());
summaryList.add(summary);
});
Subject subject = subjectService.getById(subjectId);
params.put("subject", subject.getSubjectName());
params.put("summaryList", summaryList);
System.out.println(JSON.toJSONString(params));
String prompt = "将用户上传的多篇资讯摘要文本和主题整合为一段连贯、精炼的综合摘要(约500字)。要求:\n" +
"1)提炼核心主题与高度共识的关键发现;\n" +
"2)客观指出存在的分歧点及其原因;\n" +
"3)简述观点或技术的演进趋势;\n" +
"4)语言需严谨中性,直接输出整合后的段落,无需分节或小标题。\n" +
"5)识别输入的摘要语种,生成的摘要和输入一样。如果输入的语种有多个,采用资讯最多的那个语言\n" +
"使用示例:\n" +
"输入:\n" +
"[主题] 机器学习可解释性\n" +
"[摘要1] 提出梯度解释法...验证准确率提升15%\n" +
"[摘要2] 对比LIME与SHAP...指出计算效率缺陷\n" +
"[摘要3] 医疗领域应用研究...模型透明度不足影响临床采纳\n" +
"输出(示例段落):\n" +
"多篇关于机器学习可解释性(XAI)的研究聚焦于提升复杂模型透明度。核心共识在于有效解释技术(如梯度解释法、LIME、SHAP)能增强用户信任并提升决策准确率。然而,在方法实用性上存在分歧,部分研究指出主流技术存在显著计算效率缺陷,尤其在资源受限场景;同时,医疗领域应用突显透明度不足是阻碍临床采纳的关键瓶颈。研究趋势显示从开发基础解释方法(如早期梯度法)转向评估实际场景效能及效率优化。当前主要知识缺口在于缺乏统一标准评估解释的可靠性与临床相关性,亟需开发兼顾高效性和领域适配性的XAI解决方案。";
String model = llmService.model("qwen", "qwen-max-latest", prompt, JSONObject.toJSONString(params));
redisUtil.set("GATHER_SUMMARY::" + subjectId, model);
return Result.OK(model);
} else {
return Result.FAIL("没有资讯信息");
}
}
/**
* 获取汇总摘要
*
* @param subjectId 专题id
* @author lkg
* @date 2025/8/16
*/
@GetMapping("/getGatherSummary")
public Result<?> getGatherSummary(@RequestParam String subjectId) {
return Result.OK(redisUtil.get("GATHER_SUMMARY::" + subjectId));
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论