作者:JL
利用大语言模型分析图表数据并自动生成图表分析结论及图表数据可视化图。快速高效处理复杂的数据分析过程。
- Spring Boot 2.7.2
- Spring MVC
- MyBatis + MyBatis Plus 数据访问
- Openai API
- Spring Scheduler 定时任务
- Guava 重试机制
- RabbitMQ 消息队列持久化任务
- Redission 的 RateLimiter 限流及图表查询缓存
- WebSocket 任务消息实时发送
- Ant design pro(React)
- Echarts 图表展示
- MySQL 数据库
- 用户可输入分析目标、图表类型、图表名称后上传文件进行分析,支持仅上传文件
- 分析模式支持两种模型(同步和异步分析)提高用户体验
- 我的图表支持用户查看图表原始数据
- 支持根据图表名称、图表类型、图表分析目标查看和检索图表
- 支持用户对失败的图表进行手动重试
- 支持图表管理页面手动刷新,保证获取到图表的最新状态
- 加入积分系统,每次调用分析消耗积分,可通过签到获取积分
- 任务执行成功或失败,弹出实时消息通知
- 精心设计大语言模型 Prompt 提高 AI 生成的准确性并提升冗余度
- 为节约计算成本,使用 Easy Excel 解析用户上传的 XLSX 表格数据文件并压缩为 CSV,同时实测提高了 20% 的单次输入数据量
- 为防止某用户恶意占用系统资源,基于 Redisson 的 RateLimiter 买现分布式限流,控制单用户访问的频率
- 由于 AI 分析时间较长,基于自定义IO密集型线程池+任务队列实现了 AIGC 的并发执行和异步化,提高用户体验
- 由于本地任务队列重启丢失数据,使用 RabbitMQ (分布式消息队列)来接受并持久化任务消息,通过 Direct 交换机转发给解耦的 Al 生成模块消费并处理任务,提高了系统的可靠性
- 使用死信队列处理异步分析异常情况,同时将图表状态设为失败
- 若任务未提交到队列中(或队列满时),通过定时任务将失败状态图表放入队列中
- 给任务的执行增加 guava Retrying 重试机制,保证同步分析系统可靠性和稳定性。
- 任务成功或失败通过Websocket实时反馈给用户,并更新图表页面,同时可对失败任务手动重试
- 每个用户注册可获得10个积分,每次进行分析需消耗一个积分,可通过每日签到增加积分数
- 使用 Redission 进行用户静态的图表数据缓存,用于提高加载速度