Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
event
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
陈世强
event
Commits
f398883f
提交
f398883f
authored
8月 25, 2025
作者:
925993793@qq.com
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
定制专题-逻辑优化、bug修改
上级
e3a41619
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
53 行增加
和
16 行删除
+53
-16
LlmProperties.java
.../java/com/zzsn/event/config/properties/LlmProperties.java
+2
-0
ExternalController.java
...om/zzsn/event/external/controller/ExternalController.java
+36
-16
LlmService.java
src/main/java/com/zzsn/event/llm/LlmService.java
+12
-0
LlmServiceImpl.java
src/main/java/com/zzsn/event/llm/LlmServiceImpl.java
+3
-0
没有找到文件。
src/main/java/com/zzsn/event/config/properties/LlmProperties.java
浏览文件 @
f398883f
...
@@ -33,6 +33,8 @@ public class LlmProperties {
...
@@ -33,6 +33,8 @@ public class LlmProperties {
private
String
defaultModel
;
private
String
defaultModel
;
//是否开启网络搜索
//是否开启网络搜索
private
Boolean
webSearch
;
private
Boolean
webSearch
;
//温度
private
Float
temperature
;
}
}
/**
/**
...
...
src/main/java/com/zzsn/event/external/controller/ExternalController.java
浏览文件 @
f398883f
...
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
...
@@ -10,6 +10,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.config.properties.LlmProperties
;
import
com.zzsn.event.constant.Result
;
import
com.zzsn.event.constant.Result
;
import
com.zzsn.event.entity.Subject
;
import
com.zzsn.event.entity.Subject
;
import
com.zzsn.event.external.entity.ExternalSubjectInfoSourceMap
;
import
com.zzsn.event.external.entity.ExternalSubjectInfoSourceMap
;
...
@@ -35,6 +36,7 @@ import com.zzsn.event.xxljob.service.IXxlJobInfoService;
...
@@ -35,6 +36,7 @@ import com.zzsn.event.xxljob.service.IXxlJobInfoService;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.jsoup.Jsoup
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
...
@@ -82,6 +84,8 @@ public class ExternalController {
...
@@ -82,6 +84,8 @@ public class ExternalController {
private
CaiJiCenterHttpService
caiJiCenterHttpService
;
private
CaiJiCenterHttpService
caiJiCenterHttpService
;
@Autowired
@Autowired
private
ConfigurationMessageService
configurationMessageService
;
private
ConfigurationMessageService
configurationMessageService
;
@Resource
private
LlmProperties
llmProperties
;
@Value
(
"${caiji.keywordCrawler.url:}"
)
@Value
(
"${caiji.keywordCrawler.url:}"
)
private
String
keywordCrawlerUrl
;
private
String
keywordCrawlerUrl
;
...
@@ -114,9 +118,9 @@ public class ExternalController {
...
@@ -114,9 +118,9 @@ public class ExternalController {
Date
timeDisable
=
record
.
getTimeDisable
();
Date
timeDisable
=
record
.
getTimeDisable
();
if
(
timeDisable
!=
null
)
{
if
(
timeDisable
!=
null
)
{
if
(
timeDisable
.
before
(
now
))
{
if
(
timeDisable
.
before
(
now
))
{
record
.
setCollectStatus
(
"采集中"
);
}
else
{
record
.
setCollectStatus
(
"已完成"
);
record
.
setCollectStatus
(
"已完成"
);
}
else
{
record
.
setCollectStatus
(
"采集中"
);
}
}
}
else
{
}
else
{
record
.
setCollectStatus
(
"采集中"
);
record
.
setCollectStatus
(
"采集中"
);
...
@@ -209,7 +213,15 @@ public class ExternalController {
...
@@ -209,7 +213,15 @@ public class ExternalController {
* @date 2025/8/25
* @date 2025/8/25
*/
*/
@GetMapping
(
"/optimizeDescription"
)
@GetMapping
(
"/optimizeDescription"
)
public
Result
<?>
optimizeDescription
(
@RequestParam
String
remark
)
{
public
Result
<?>
optimizeDescription
(
@RequestParam
String
remark
,
@RequestParam
String
language
)
{
String
languageCN
=
"中文简体"
;
if
(
"zh-CN"
.
equals
(
language
))
{
languageCN
=
"中文,且为中文简体"
;
}
else
if
(
"en"
.
equals
(
language
))
{
languageCN
=
"英文"
;
}
else
if
(
"ja"
.
equals
(
language
))
{
languageCN
=
"日文"
;
}
String
prompt
=
"【角色】 你是一名资深【行业分析师】和【技术文档撰写者】。你的任务是将一个简短的主题转化为一段定义清晰、内容充实、客观中立的专题概述。\n"
+
String
prompt
=
"【角色】 你是一名资深【行业分析师】和【技术文档撰写者】。你的任务是将一个简短的主题转化为一段定义清晰、内容充实、客观中立的专题概述。\n"
+
"【核心任务】 根据用户提供的一个简短主题名称或初步想法,将其扩展成一段约150字的、详尽且准确的专题描述。这段描述需要全面覆盖该主题的核心定义、背景、关键组成部分、重要影响或相关应用场景,语言需保持专业、精炼和高信息密度,避免主观评价和浮夸修辞。\n"
+
"【核心任务】 根据用户提供的一个简短主题名称或初步想法,将其扩展成一段约150字的、详尽且准确的专题描述。这段描述需要全面覆盖该主题的核心定义、背景、关键组成部分、重要影响或相关应用场景,语言需保持专业、精炼和高信息密度,避免主观评价和浮夸修辞。\n"
+
"【要求】\n"
+
"【要求】\n"
+
...
@@ -218,14 +230,17 @@ public class ExternalController {
...
@@ -218,14 +230,17 @@ public class ExternalController {
"信息密集:优先使用名词和专业术语,尽量保留用户输入的关键词,确保段落内含大量关键实体和概念,为后续关键词提取提供丰富素材。\n"
+
"信息密集:优先使用名词和专业术语,尽量保留用户输入的关键词,确保段落内含大量关键实体和概念,为后续关键词提取提供丰富素材。\n"
+
"逻辑连贯:语句之间逻辑顺畅,形成一段完整的概述,而非关键词罗列。\n"
+
"逻辑连贯:语句之间逻辑顺畅,形成一段完整的概述,而非关键词罗列。\n"
+
"精准简洁:严格控制字数在150字左右,直达核心,避免冗长。\n"
+
"精准简洁:严格控制字数在150字左右,直达核心,避免冗长。\n"
+
"
语种识别:识别用户输入的语种,例如中文、日文、英文,输出也要用对应的语种输出
\n"
+
"
输出语种:输出的文字必须是"
+
languageCN
+
"
\n"
+
"最终输出:请直接生成一段约150字的专题描述,无需任何前置说明、标题或分点。\n"
+
"最终输出:请直接生成一段约150字的专题描述,无需任何前置说明、标题或分点。\n"
+
"【输入输出示例】\n"
+
"【输入输出示例】\n"
+
"示例:\n"
+
"示例:\n"
+
"输入: 特斯拉刹车失灵\n"
+
"输入: 特斯拉刹车失灵\n"
+
"输出: 该专题聚焦于特斯拉电动汽车系列车型涉及的刹车系统性能与安全问题。近年来,全球多地车主报告在驾驶过程中遭遇疑似刹车失灵或制动距离异常延长的案例,引发了消费者对车辆安全性的广泛担忧。事件导致了多起交通事故,并促使美国国家公路交通安全管理局等权威机构启动缺陷调查。专题将涵盖相关事故报告、技术分析、监管机构的调查进展、特斯拉官方的回应及后续软件更新措施,旨在全面审视此类事件的真实性与潜在技术根源。"
;
"输出: 该专题聚焦于特斯拉电动汽车系列车型涉及的刹车系统性能与安全问题。近年来,全球多地车主报告在驾驶过程中遭遇疑似刹车失灵或制动距离异常延长的案例,引发了消费者对车辆安全性的广泛担忧。事件导致了多起交通事故,并促使美国国家公路交通安全管理局等权威机构启动缺陷调查。专题将涵盖相关事故报告、技术分析、监管机构的调查进展、特斯拉官方的回应及后续软件更新措施,旨在全面审视此类事件的真实性与潜在技术根源。"
;
String
crawlerWord
=
llmService
.
model
(
"qwen"
,
"qwen-max-latest"
,
prompt
,
remark
);
String
description
=
llmService
.
model
(
"qwen"
,
"qwen-max-latest"
,
prompt
,
remark
);
return
Result
.
OK
(
crawlerWord
);
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"language"
,
language
);
resultMap
.
put
(
"model"
,
description
);
return
Result
.
OK
(
resultMap
);
}
}
...
@@ -241,16 +256,20 @@ public class ExternalController {
...
@@ -241,16 +256,20 @@ public class ExternalController {
String
prompt
=
"你是一个专业信息采集助手,根据用户专题描述生成关键词表达式:\n"
+
String
prompt
=
"你是一个专业信息采集助手,根据用户专题描述生成关键词表达式:\n"
+
"1. 用 + 表示与关系(必须同现),| 表示或关系(任一出现),用()分组\n"
+
"1. 用 + 表示与关系(必须同现),| 表示或关系(任一出现),用()分组\n"
+
"2. 执行三步操作:\n"
+
"2. 执行三步操作:\n"
+
" (1)
提取核心实体(如企业/产品名)
\n"
+
" (1)
理解语意,识别用户需求,提取核心实体(如企业/产品名),实体词语必须完整不能有歧义
\n"
+
" (2) 将抽象词拆解为3-5个具体场景词(如\"动向\"→\"上升|下降|波动|结构调整\")\n"
+
" (2) 将抽象词拆解为3-5个具体场景词(如\"动向\"→\"上升|下降|波动|结构调整\")\n"
+
" (3) 扩展同义词/行业关联词\n"
+
" (3) 扩展同义词/行业关联词\n"
+
"3. 排除时间词,+号不超过2个,单组|内词不超过5个\n"
+
"3. 排除时间词,|两边只能是单个词语,不能是括号词组,\n"
+
"4. 输出仅含表达式\n"
+
"4.+号不超过2个,尽量使用两组词表达,最多使用三组词\n"
+
"5. 输出仅含表达式\n"
+
"\n"
+
"\n"
+
"示例: \n"
+
"示例: \n"
+
"描述:苹果新款iPhone发布引发市场反响\n"
+
"描述:苹果新款iPhone发布引发市场反响\n"
+
"输出:(苹果|iPhone)+(発売|価格|予約状況|市場シェア|消費者反応)"
;
"输出:(苹果|iPhone)+(発売|価格|予約状況|市場シェア|消費者反応)"
;
String
crawlerWord
=
llmService
.
model
(
"qwen"
,
"qwen-max-latest"
,
prompt
,
remark
);
LlmProperties
.
ModelConfig
modelConfig
=
llmProperties
.
getModelConfig
(
"qwen"
);
modelConfig
.
setDefaultModel
(
"qwen-max-latest"
);
modelConfig
.
setTemperature
(
0.1f
);
String
crawlerWord
=
llmService
.
qwenModel
(
modelConfig
,
prompt
,
remark
);
return
Result
.
OK
(
crawlerWord
);
return
Result
.
OK
(
crawlerWord
);
}
}
...
@@ -416,7 +435,6 @@ public class ExternalController {
...
@@ -416,7 +435,6 @@ public class ExternalController {
String
key
=
"GATHER_SUMMARY::"
+
subjectId
;
String
key
=
"GATHER_SUMMARY::"
+
subjectId
;
if
(
redisUtil
.
hasKey
(
key
))
{
if
(
redisUtil
.
hasKey
(
key
))
{
Object
data
=
redisUtil
.
get
(
key
);
Object
data
=
redisUtil
.
get
(
key
);
if
(
data
instanceof
Map
)
{
Map
<
String
,
Object
>
map
=
(
Map
<
String
,
Object
>)
data
;
Map
<
String
,
Object
>
map
=
(
Map
<
String
,
Object
>)
data
;
List
<
String
>
idList
=
JSON
.
parseArray
(
map
.
get
(
"idList"
).
toString
(),
String
.
class
);
List
<
String
>
idList
=
JSON
.
parseArray
(
map
.
get
(
"idList"
).
toString
(),
String
.
class
);
InfoDataSearchCondition
searchCondition
=
new
InfoDataSearchCondition
();
InfoDataSearchCondition
searchCondition
=
new
InfoDataSearchCondition
();
...
@@ -434,8 +452,7 @@ public class ExternalController {
...
@@ -434,8 +452,7 @@ public class ExternalController {
return
Result
.
OK
(
resultMap
);
return
Result
.
OK
(
resultMap
);
}
}
}
}
}
return
Result
.
OK
(
map
);
return
Result
.
OK
((
Map
<
String
,
Object
>)
data
);
}
else
{
}
else
{
List
<
DisplayInfo
>
dataList
=
getDataList
(
subjectId
);
List
<
DisplayInfo
>
dataList
=
getDataList
(
subjectId
);
return
Result
.
OK
(
generateSummary
(
subjectId
,
dataList
,
language
));
return
Result
.
OK
(
generateSummary
(
subjectId
,
dataList
,
language
));
...
@@ -471,14 +488,15 @@ public class ExternalController {
...
@@ -471,14 +488,15 @@ public class ExternalController {
List
<
String
>
content
=
new
ArrayList
<>();
List
<
String
>
content
=
new
ArrayList
<>();
content
.
add
(
summary
);
content
.
add
(
summary
);
translateVO
.
setContent
(
content
);
translateVO
.
setContent
(
content
);
List
<
String
>
data
=
new
ArrayList
<>()
;
String
result
=
null
;
try
{
try
{
String
s
=
HttpUtil
.
doPost
(
TRANSLATE_URL
,
ObjectUtil
.
objectToJSONObject
(
translateVO
),
10000
);
String
s
=
HttpUtil
.
doPost
(
TRANSLATE_URL
,
ObjectUtil
.
objectToJSONObject
(
translateVO
),
10000
);
data
=
JSONArray
.
parseArray
(
s
,
String
.
class
);
List
<
String
>
data
=
JSONArray
.
parseArray
(
s
,
String
.
class
);
result
=
Jsoup
.
parse
(
data
.
get
(
0
)).
text
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
return
Result
.
OK
(
data
);
return
Result
.
OK
(
result
);
}
}
...
@@ -533,12 +551,14 @@ public class ExternalController {
...
@@ -533,12 +551,14 @@ public class ExternalController {
"输出(示例段落):\n"
+
"输出(示例段落):\n"
+
"多篇关于机器学习可解释性(XAI)的研究聚焦于提升复杂模型透明度。核心共识在于有效解释技术(如梯度解释法、LIME、SHAP)能增强用户信任并提升决策准确率。然而,在方法实用性上存在分歧,部分研究指出主流技术存在显著计算效率缺陷,尤其在资源受限场景;同时,医疗领域应用突显透明度不足是阻碍临床采纳的关键瓶颈。研究趋势显示从开发基础解释方法(如早期梯度法)转向评估实际场景效能及效率优化。当前主要知识缺口在于缺乏统一标准评估解释的可靠性与临床相关性,亟需开发兼顾高效性和领域适配性的XAI解决方案。"
;
"多篇关于机器学习可解释性(XAI)的研究聚焦于提升复杂模型透明度。核心共识在于有效解释技术(如梯度解释法、LIME、SHAP)能增强用户信任并提升决策准确率。然而,在方法实用性上存在分歧,部分研究指出主流技术存在显著计算效率缺陷,尤其在资源受限场景;同时,医疗领域应用突显透明度不足是阻碍临床采纳的关键瓶颈。研究趋势显示从开发基础解释方法(如早期梯度法)转向评估实际场景效能及效率优化。当前主要知识缺口在于缺乏统一标准评估解释的可靠性与临床相关性,亟需开发兼顾高效性和领域适配性的XAI解决方案。"
;
String
model
=
llmService
.
model
(
"qwen"
,
"qwen-max-latest"
,
prompt
,
JSONObject
.
toJSONString
(
params
));
String
model
=
llmService
.
model
(
"qwen"
,
"qwen-max-latest"
,
prompt
,
JSONObject
.
toJSONString
(
params
));
if
(
StringUtils
.
isNotBlank
(
model
))
{
resultMap
=
new
HashMap
<>();
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"idList"
,
idList
);
resultMap
.
put
(
"idList"
,
idList
);
resultMap
.
put
(
"language"
,
language
);
resultMap
.
put
(
"language"
,
language
);
resultMap
.
put
(
"model"
,
model
);
resultMap
.
put
(
"model"
,
model
);
redisUtil
.
set
(
"GATHER_SUMMARY::"
+
subjectId
,
resultMap
);
redisUtil
.
set
(
"GATHER_SUMMARY::"
+
subjectId
,
resultMap
);
}
}
}
return
resultMap
;
return
resultMap
;
}
}
}
}
src/main/java/com/zzsn/event/llm/LlmService.java
浏览文件 @
f398883f
package
com
.
zzsn
.
event
.
llm
;
package
com
.
zzsn
.
event
.
llm
;
import
com.zzsn.event.config.properties.LlmProperties
;
/**
/**
* 模型调用
* 模型调用
*/
*/
...
@@ -15,4 +17,14 @@ public interface LlmService {
...
@@ -15,4 +17,14 @@ public interface LlmService {
* @return 大模型响应结果
* @return 大模型响应结果
*/
*/
String
model
(
String
modelType
,
String
modelName
,
String
system
,
String
content
);
String
model
(
String
modelType
,
String
modelName
,
String
system
,
String
content
);
/**
* 千问模型调用
*
* @param modelConfig 模型配置信息
* @param system 提示词
* @param content 引用内容
* @return 大模型响应结果
*/
String
qwenModel
(
LlmProperties
.
ModelConfig
modelConfig
,
String
system
,
String
content
);
}
}
src/main/java/com/zzsn/event/llm/LlmServiceImpl.java
浏览文件 @
f398883f
...
@@ -136,6 +136,9 @@ public class LlmServiceImpl implements LlmService {
...
@@ -136,6 +136,9 @@ public class LlmServiceImpl implements LlmService {
.
messages
(
Arrays
.
asList
(
systemMsg
,
userMsg
))
.
messages
(
Arrays
.
asList
(
systemMsg
,
userMsg
))
.
resultFormat
(
GenerationParam
.
ResultFormat
.
MESSAGE
)
.
resultFormat
(
GenerationParam
.
ResultFormat
.
MESSAGE
)
.
build
();
.
build
();
if
(
modelConfig
.
getTemperature
()
!=
null
)
{
param
.
setTemperature
(
modelConfig
.
getTemperature
());
}
GenerationResult
call
=
gen
.
call
(
param
);
GenerationResult
call
=
gen
.
call
(
param
);
return
call
.
getOutput
().
getChoices
().
get
(
0
).
getMessage
().
getContent
();
return
call
.
getOutput
().
getChoices
().
get
(
0
).
getMessage
().
getContent
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论