|
@@ -2,6 +2,8 @@ package com.tzld.supply.job;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.tzld.supply.api.DeepSeekApiService;
|
|
import com.tzld.supply.api.DeepSeekApiService;
|
|
|
|
|
+import com.tzld.supply.common.enums.SpiderContentScreenStatusEnum;
|
|
|
|
|
+import com.tzld.supply.common.enums.SpiderContentStatusEnum;
|
|
|
import com.tzld.supply.dao.mapper.supply.spider.SpiderContentMapper;
|
|
import com.tzld.supply.dao.mapper.supply.spider.SpiderContentMapper;
|
|
|
import com.tzld.supply.dao.mapper.supply.spider.ext.SpiderMapperExt;
|
|
import com.tzld.supply.dao.mapper.supply.spider.ext.SpiderMapperExt;
|
|
|
import com.tzld.supply.model.entity.DeepSeekResult;
|
|
import com.tzld.supply.model.entity.DeepSeekResult;
|
|
@@ -50,11 +52,11 @@ public class ContentScreenJob {
|
|
|
if (Objects.nonNull(obj)) {
|
|
if (Objects.nonNull(obj)) {
|
|
|
Integer aiRoughStatus = checkRoughScreenStatus(obj);
|
|
Integer aiRoughStatus = checkRoughScreenStatus(obj);
|
|
|
content.setAiRoughStatus(aiRoughStatus);
|
|
content.setAiRoughStatus(aiRoughStatus);
|
|
|
- if (aiRoughStatus == 1) {
|
|
|
|
|
- content.setStatus(1);
|
|
|
|
|
|
|
+ if (aiRoughStatus == SpiderContentScreenStatusEnum.PASSED.getCode()) {
|
|
|
|
|
+ content.setStatus(SpiderContentStatusEnum.FILTERING.getCode());
|
|
|
content.setAiRoughResult(JSONObject.toJSONString(obj));
|
|
content.setAiRoughResult(JSONObject.toJSONString(obj));
|
|
|
} else {
|
|
} else {
|
|
|
- content.setStatus(3);
|
|
|
|
|
|
|
+ content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
|
|
|
}
|
|
}
|
|
|
content.setUpdateTime(System.currentTimeMillis());
|
|
content.setUpdateTime(System.currentTimeMillis());
|
|
|
spiderContentMapper.updateByPrimaryKeySelective(content);
|
|
spiderContentMapper.updateByPrimaryKeySelective(content);
|
|
@@ -66,32 +68,44 @@ public class ContentScreenJob {
|
|
|
|
|
|
|
|
private Integer checkRoughScreenStatus(RoughScreenEntity obj) {
|
|
private Integer checkRoughScreenStatus(RoughScreenEntity obj) {
|
|
|
if (Objects.isNull(obj.getIsElderlySuitable()) || !obj.getIsElderlySuitable()) {
|
|
if (Objects.isNull(obj.getIsElderlySuitable()) || !obj.getIsElderlySuitable()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsSensitive()) && obj.getIsSensitive()) {
|
|
if (Objects.nonNull(obj.getIsSensitive()) && obj.getIsSensitive()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsNegative()) && obj.getIsNegative()) {
|
|
if (Objects.nonNull(obj.getIsNegative()) && obj.getIsNegative()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsAdvertisement()) && obj.getIsAdvertisement()) {
|
|
if (Objects.nonNull(obj.getIsAdvertisement()) && obj.getIsAdvertisement()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
- return 1;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.PASSED.getCode();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private String roughScreenPrompt = "你是一名新闻智能审核系统的快速过滤模型,负责判断新闻标题是否适合老年群体内容推荐。\n" +
|
|
|
|
|
- "\n" +
|
|
|
|
|
- "【任务目标】\n" +
|
|
|
|
|
- "根据输入的标题、来源,对新闻进行初步筛选。你的目标是判断内容是否:\n" +
|
|
|
|
|
- "1. 涉及政治、暴力、色情、负面或争议;\n" +
|
|
|
|
|
- "2. 属于广告或营销;\n" +
|
|
|
|
|
- "3. 适合老年群体;\n" +
|
|
|
|
|
- "4. 有一定正能量或实用性;\n" +
|
|
|
|
|
- "5. 标题是否可进行正向优化(例如“更吸引但不夸大”)。\n" +
|
|
|
|
|
- "\n" +
|
|
|
|
|
- "【请严格按以下 JSON 结构输出,不要输出其他说明】:\n" +
|
|
|
|
|
|
|
+ private String roughScreenPrompt = "你是一名新闻智能审核系统的快速过滤模型,负责判断新闻标题是否适合老年群体内容推荐。请根据输入的标题和来源,对新闻进行初步筛选,并输出结构化结果。\n" +
|
|
|
|
|
+ "任务目标:\n" +
|
|
|
|
|
+ "判断是否涉及政治、暴力、色情、负面或争议:\n" +
|
|
|
|
|
+ " 政治类包括政府决策、领导人言论、外交、政策宣传等;\n" +
|
|
|
|
|
+ " 暴力类包括打斗、战争、犯罪、事故、血腥场景等;\n" +
|
|
|
|
|
+ " 色情类包括涉及性暗示、低俗内容、娱乐绯闻等;\n" +
|
|
|
|
|
+ " 负面类包括疾病、灾难、焦虑、冲突、悲剧等;\n" +
|
|
|
|
|
+ " 争议类包括社会矛盾、热点舆论事件、群体对立等。\n" +
|
|
|
|
|
+ "判断是否属于广告或营销:\n" +
|
|
|
|
|
+ " 包含品牌名、产品、促销、购买引导、价格描述、联系方式、二维码等;\n" +
|
|
|
|
|
+ " 内容带有明显推广意图或商业导向。\n" +
|
|
|
|
|
+ "判断是否适合老年群体:\n" +
|
|
|
|
|
+ " 内容主题应偏向健康、养生、生活常识、家庭关系、历史文化、节日习俗等;\n" +
|
|
|
|
|
+ " 避免复杂科技、游戏、金融、投资、网络用语等老年人不易理解的内容;\n" +
|
|
|
|
|
+ " 表达方式应平实简洁,信息有实用价值或积极意义。\n" +
|
|
|
|
|
+ "判断是否具有正能量或实用性:\n" +
|
|
|
|
|
+ " 正能量内容包括积极向上、健康生活、社会关怀、家庭和谐等主题;\n" +
|
|
|
|
|
+ " 实用内容包括健康建议、生活窍门、养生技巧、节气知识、天气预报、历史科普等;\n" +
|
|
|
|
|
+ " 对老年人有帮助的内容应优先保留。\n" +
|
|
|
|
|
+ "判断标题是否可进行正向优化(更吸引但不夸大):\n" +
|
|
|
|
|
+ " 若标题内容平淡,但可通过增加情感词汇或轻度修饰(如“实用技巧”、“医生建议”、“家家都该知道”等)提升吸引力,则可标记为可优化;\n" +
|
|
|
|
|
+ " 不得改变原文事实或引导误解,不得使用虚假或夸张性描述。\n" +
|
|
|
"\n" +
|
|
"\n" +
|
|
|
|
|
+ "请严格按以下 JSON 格式输出,不要输出任何说明或注释:\n" +
|
|
|
"{\n" +
|
|
"{\n" +
|
|
|
" \"is_elderly_suitable\": true/false,\n" +
|
|
" \"is_elderly_suitable\": true/false,\n" +
|
|
|
" \"is_sensitive\": true/false,\n" +
|
|
" \"is_sensitive\": true/false,\n" +
|
|
@@ -134,13 +148,13 @@ public class ContentScreenJob {
|
|
|
if (Objects.nonNull(obj)) {
|
|
if (Objects.nonNull(obj)) {
|
|
|
Integer aiPrecisionStatus = checkPrecisionScreenStatus(obj);
|
|
Integer aiPrecisionStatus = checkPrecisionScreenStatus(obj);
|
|
|
content.setAiPrecisionStatus(aiPrecisionStatus);
|
|
content.setAiPrecisionStatus(aiPrecisionStatus);
|
|
|
- if (aiPrecisionStatus == 1
|
|
|
|
|
|
|
+ if (aiPrecisionStatus == SpiderContentScreenStatusEnum.PASSED.getCode()
|
|
|
&& obj.getPropagationScore() >= 0.8
|
|
&& obj.getPropagationScore() >= 0.8
|
|
|
&& obj.getSuitabilityScore() >= 0.8) {
|
|
&& obj.getSuitabilityScore() >= 0.8) {
|
|
|
- content.setStatus(2);
|
|
|
|
|
|
|
+ content.setStatus(SpiderContentStatusEnum.PASSED.getCode());
|
|
|
content.setAiPrecisionResult(JSONObject.toJSONString(obj));
|
|
content.setAiPrecisionResult(JSONObject.toJSONString(obj));
|
|
|
} else {
|
|
} else {
|
|
|
- content.setStatus(3);
|
|
|
|
|
|
|
+ content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
|
|
|
}
|
|
}
|
|
|
content.setUpdateTime(System.currentTimeMillis());
|
|
content.setUpdateTime(System.currentTimeMillis());
|
|
|
spiderContentMapper.updateByPrimaryKeySelective(content);
|
|
spiderContentMapper.updateByPrimaryKeySelective(content);
|
|
@@ -151,34 +165,47 @@ public class ContentScreenJob {
|
|
|
|
|
|
|
|
private Integer checkPrecisionScreenStatus(PrecisionScreenEntity obj) {
|
|
private Integer checkPrecisionScreenStatus(PrecisionScreenEntity obj) {
|
|
|
if (Objects.isNull(obj.getIsElderlySuitable()) || !obj.getIsElderlySuitable()) {
|
|
if (Objects.isNull(obj.getIsElderlySuitable()) || !obj.getIsElderlySuitable()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsSensitive()) && obj.getIsSensitive()) {
|
|
if (Objects.nonNull(obj.getIsSensitive()) && obj.getIsSensitive()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsNegative()) && obj.getIsNegative()) {
|
|
if (Objects.nonNull(obj.getIsNegative()) && obj.getIsNegative()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
if (Objects.nonNull(obj.getIsAdvertisement()) && obj.getIsAdvertisement()) {
|
|
if (Objects.nonNull(obj.getIsAdvertisement()) && obj.getIsAdvertisement()) {
|
|
|
- return 2;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.ABANDONED.getCode();
|
|
|
}
|
|
}
|
|
|
- return 1;
|
|
|
|
|
|
|
+ return SpiderContentScreenStatusEnum.PASSED.getCode();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private String precisionScreenPrompt = "你是一名内容智能分析与编辑顾问,负责对新闻或视频进行全面分析。\n" +
|
|
|
|
|
- "请根据以下内容,判断其是否适合老年群体推荐,并输出结构化结果。\n" +
|
|
|
|
|
- "\n" +
|
|
|
|
|
- "【分析目标】\n" +
|
|
|
|
|
- "1. 判断是否适合老年人阅读;\n" +
|
|
|
|
|
- "2. 判断是否包含政治、敏感、广告或负面内容;\n" +
|
|
|
|
|
- "3. 判断内容主题、地域、关键词;\n" +
|
|
|
|
|
- "4. 判断是否可以在不误导、不造假的前提下适度夸大或优化标题;\n" +
|
|
|
|
|
- "5. 提取内容亮点与传播潜力;\n" +
|
|
|
|
|
- "6. 给出传播评分和推荐评分;\n" +
|
|
|
|
|
- "7. 若适合改写,请输出更吸引人的标题。\n" +
|
|
|
|
|
|
|
+ private String precisionScreenPrompt = "你是一名内容智能分析与编辑顾问,负责对新闻或视频进行全面分析。请根据以下内容,判断其是否适合老年群体推荐,并输出结构化结果。\n" +
|
|
|
"\n" +
|
|
"\n" +
|
|
|
- "【请严格按以下 JSON 格式输出】:\n" +
|
|
|
|
|
|
|
+ "分析目标:\n" +
|
|
|
|
|
+ "1. 判断是否适合老年人阅读:\n" +
|
|
|
|
|
+ " 内容应具备健康、生活、历史、天气、节假日、社会正能量等特征;避免涉及复杂科技、互联网、游戏、金融投机等难以理解或风险性内容。\n" +
|
|
|
|
|
+ " 语言表达应平实易懂,不含网络黑话、缩写或复杂术语。\n" +
|
|
|
|
|
+ "2. 判断是否包含政治、敏感、广告或负面内容:\n" +
|
|
|
|
|
+ " 政治:涉及国家政策、领导人、外交等信息;\n" +
|
|
|
|
|
+ " 敏感:涉及宗教、种族、灾难、社会冲突等;\n" +
|
|
|
|
|
+ " 负面:传播焦虑、恐慌、暴力、疾病死亡等信息;\n" +
|
|
|
|
|
+ " 广告:带有明显推广目的,如品牌、价格、产品功能描述等。\n" +
|
|
|
|
|
+ "3. 判断内容主题、地域、关键词:\n" +
|
|
|
|
|
+ " 主题:健康、生活、历史、天气、节假日、军事、社会、其他;\n" +
|
|
|
|
|
+ " 地域:提取与城市、省份或国家相关的地域信息;\n" +
|
|
|
|
|
+ " 关键词:提取3~5个能代表内容核心的热词。\n" +
|
|
|
|
|
+ "4. 判断是否可以在不误导、不造假的前提下适度夸大或优化标题:\n" +
|
|
|
|
|
+ " 夸大标准包括:是否能使用更具吸引力的词汇(如“意想不到”、“太实用了”、“医生都建议”、“家家都能用上”等),但不能改变事实或造成误导。\n" +
|
|
|
|
|
+ "5. 提取内容亮点与传播潜力:\n" +
|
|
|
|
|
+ " 内容亮点:是否包含实用技巧、经验分享、生活智慧或积极故事;\n" +
|
|
|
|
|
+ " 传播潜力:判断是否具备高关注度话题、共鸣性或视觉吸引力(如图片、视频内容)。\n" +
|
|
|
|
|
+ "6. 给出传播评分和推荐评分:\n" +
|
|
|
|
|
+ " 传播评分(0.0~1.0):根据内容话题性、情绪感染力、关键词热度等评估;\n" +
|
|
|
|
|
+ " 推荐评分(0.0~1.0):根据内容积极性、老年适配度、价值导向评估。\n" +
|
|
|
|
|
+ "7. 若适合改写,请输出更吸引人的标题:\n" +
|
|
|
|
|
+ " 若标题平淡但内容有亮点,可提出优化建议或改写方案,使其更具吸引力和传播性。\n" +
|
|
|
"\n" +
|
|
"\n" +
|
|
|
|
|
+ "请严格按以下 JSON 格式输出,不要输出任何解释说明:\n" +
|
|
|
"{\n" +
|
|
"{\n" +
|
|
|
" \"is_elderly_suitable\": true/false,\n" +
|
|
" \"is_elderly_suitable\": true/false,\n" +
|
|
|
" \"is_sensitive\": true/false,\n" +
|
|
" \"is_sensitive\": true/false,\n" +
|