本文介绍如何用 XXL-JOB + Deepseek 搭建定时数据分析系统,变身智能金融理财助手,实现数据洞察和投资建议。
原文标题:如何利用DeepSeek帮我做金融理财?
原文作者:阿里云开发者
冷月清谈:
怜星夜思:
2、文章中提到可以使用XXL-JOB的任务编排能力,构建一个AI数据分析流程。除了文章中提到的“拉取金融数据-数据分析-生成报告”流程,你还能想到哪些更复杂的、更有趣的AI金融分析流程?
3、文章提到通过钉钉推送分析总结,除了钉钉,你觉得还有哪些更适合推送金融分析结果的渠道?为什么?
原文内容
阿里妹导读
本篇文章将介绍如何搭建一套基于 XXL-JOB + Deepseek 的定时数据分析系统,帮你做一个智能的金融理财助手。
概述
-
内容创作:比如通过你的名字给你作一首诗。比如给你生成吸引人的广告文案。
-
聊天机器人:比如客服答疑,比如英语口语陪练。
-
逻辑推理:比如辅助医生分析病例、生成诊断建议。比如帮你做一道数学题目。
-
风险监控:定时监控系统指标,由大模型进行智能分析,发现潜在的风险。
-
数据分析:定时采集在线金融数据,由大模型进行智能分析,给出投资者建议。
如何搭建系统
搭建Deepseek
-
Deepseek以推理能力出圈,适合做数据分析。并且Deepseek的母公司幻方量化就是做量化交易的,我们相信Deepseek在金融分析上有着显著的优势。
-
Deepseek开源并且很轻量,可以很方便部署起来。
-
安装ollama:https://ollama.com/download
-
安装Deepseek r1模型:r1模型专注于复杂逻辑推理,更适合做金融数据分析

模型名称
|
模型大小
|
显存
|
内存
|
deepseek-r1:1.5b
|
1.1GB
|
4GB+
|
8GB+
|
deepseek-r1:7b
|
4.7GB
|
8GB+
|
16GB+
|
deepseek-r1:8b
|
4.9GB
|
10GB+
|
18GB+
|
deepseek-r1:14b
|
9.0GB
|
16GB+
|
32GB+
|
deepseek-r1:32b
|
20GB
|
24GB+
|
64GB+
|
-
部署完成后,我们通过api进行测试(使用兼容openai的api,端口默认是11434),方便后续写代码。
搭建XXL-JOB
-
可以定时发起AI任务请求。
-
可以把prompt和返回格式放在任务参数上,动态修改。
-
可以使用广播分片任务,把大任务拆分成多个小任务,加快AI任务运行速度。
-
可以使用任务依赖编排,构建一个AI数据分析的流程。
方案一:本地部署
-
准备一个数据库并初始化数据库表结构
-
把代码导入到IDEA中,配置xxl-job-admin的配置文件
-
运行XxlJobAdminApplication这个类,然后浏览器输入 http://127.0.0.1:8080/xxl-job-admin 就可以登录了(密码默认是 admin/123456)
定时推送财经新闻
-
XXLJOB-Admin 通过定时调度或者手动触发,配置好对应任务的prompt信息,运行某个任务执行。
-
先去互联网拉取财经新闻,可以简单的做一下过滤。
-
把网页内容丢给Deepseek,让他提炼最热门的N个新闻。
@Component public class AIJob {
@Value(“${dashscope.api.key}”)
private String apiKey;@XxlJob(value = “sinaNews”)
public ReturnT<String> sinaNews() throws Exception {
String url = “热门新闻排行_新浪财经_新浪网”;
String model = “deepseek-r1”;
// prompt
String jobParam = XxlJobContext.getXxlJobContext().getJobParam();
ReturnT<String> rtn = ReturnT.SUCCESS;
Document document = Jsoup.connect(url).get();
// 定位到“汇总榜”部分
Element summaryBlock = document.selectFirst(“div.lbti:has(h2:containsOwn(汇总榜))”);
if (summaryBlock != null) {
// 找到该块中的<script>标签
Element scriptTag = summaryBlock.parent().selectFirst(“script[src]”);
if (scriptTag != null) {
// 提取src属性值
String srcValue = scriptTag.attr(“src”);
HttpResponse<String> httpResponse = Unirest.get(srcValue).asString();
String news = httpResponse.getBody();
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put(“model”, model);
List<Map<String, String>> messagesList = new ArrayList<>();
Map<String, String> message = new HashMap<>();
message.put(“role”, “system”);
message.put(“content”, jobParam);
messagesList.add(message);
message = new HashMap<>();
message.put(“role”, “user”);
message.put(“content”, “这是今天的财经新闻,帮我按规则解析:” + news );
messagesList.add(message);
bodyMap.put(“messages”, messagesList);
String bodyJson = new Gson().toJson(bodyMap);
Unirest.setTimeouts(120000, 120000); //加大timeout,防止超时退出
HttpResponse<JsonNode> jsonHttpResponse =
Unirest.post(“https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions”)
.header(“Authorization”, "Bearer " + apiKey)
.header(“Content-Type”, “application/json”)
.body(bodyJson)
.asJson();
OpenAIResponse openAIResponse =
new Gson().fromJson(jsonHttpResponse.getBody().getObject().toString(), OpenAIResponse.class);
rtn.setContent(openAIResponse.getChoices().get(0).getMessage().getContent());
XxlJobHelper.log(openAIResponse.getChoices().get(0).getMessage().getContent());
//TODO 通过钉钉发送分析总结
sendMessage(openAIResponse);
} else {
rtn.setCode(ReturnT.FAIL_CODE);
rtn.setMsg(“未找到汇总榜的<script>标签”);
}
} else {
rtn.setCode(ReturnT.FAIL_CODE);
rtn.setMsg(“未找到汇总榜部分”);
}
return rtn;
}
private void sendMessage(OpenAIResponse message){
//TODO
}
}
定时做金融数据分析
-
在XXL-JOB上新建3个任务,并建立依赖关系,拉取金融数据->数据分析->生成报告。其中拉取金融数据任务的路由策略是广播分片。
-
拉取金融数据任务开始执行的时候,通过广播分片派发多个子任务给不同的执行器,去获取各大国内外财经新闻和金融数据,把结果存储起来(比如数据库、Redis或者对象存储)。
-
数据分析任务开始执行的时候,去获取当前的金融数据,再调用Deepseek进行分析,将结果存储起来。
-
数据分析完,再通过报告生成任务,将分析完的数据生成一个报告或者报表,通过钉钉或者邮件推送给用户,进行投资建议。
总结
[1]https://www.xuxueli.com/xxl-job/
[2]https://bailian.console.aliyun.com/
[3]https://www.xuxueli.com/xxl-job/index.html#二、快速入门
[4]https://mse.console.aliyun.com/schedulerx-xxljob#/schedulerx-xxljob?region=cn-hangzhou
[5]https://free.aliyun.com/?spm=5176.mse-prod.0.0.7429142fhgTdVa&product=1371&crowd=personal