使用大模型辅助处理和分析数据-ezdata开源ai数据助手

384 阅读6分钟

效果预览

ezdata.gif

前言

基于vue3前端,python后端和llm大模型开发的数据处理分析和任务调度系统。 支持数据源管理,数据模型管理,数据集成,数据查询API接口,低代码自定义数据处理任务模版,单任务及dag任务工作流调度等功能。集成了llm模块实现rag知识库问答,链接各数据源数据进行数据对话问答,交互式数据分析功能。

背景

经常需要做一些数据抓取,存储到不同数据源(文件,关系型数据库,nosql数据库,时序数据库,图数据库等),以及一些数据查询和分析工作,发现以下问题:
1,不同数据源查询时需要使用不同工具查看,对于简单的查询和分析需频繁切换可视化工具。
2, python脚本部署杂乱,定时任务动态更新时间策略较麻烦,难以管理和监控执行状态。调研了部分任务调度系统(DolphinScheduler/airflow等),大都是java生态或需要部署较重的服务才可运行。
3,同一脚本任务需根据不同参数部署多份,想要通过固化成任务模版,表单化配置任务模版参数,稍作修改即可运行一个新的同类型的任务。

便决定自己折腾一套系统,方便进行数据的简单查询处理和脚本任务的动态配置,定时调度运行和监控。

技术选型

因为是个人开发,精力有限,所以遵循以下原则:

1,尽量沿用现有的开源成熟框架和库,直接搬运相关模块代码到项目中或做少量修改。
2,尽量轻量级和可拓展,可以单机部署在自己的小服务器上,后期也可以动态扩容到多台机器或k8s集群上分布式运行。
3,前端找成熟低代码平台进行开发,减少页面方面的开发时间,暂时忽略ui优化方面,能实现功能即可,后续再考虑迭代优化。

  • 中间件部分,使用mysql作为业务数据库,redis提供任务队列和缓存相关的功能,文件存储可选择性使用本地存储或对接minio,阿里云oss等第三方服务。 为方便分析任务日志和提供基础的大数据量查询和检索,引入elasticsearch作日志中间件和大量数据时的数据存储,检索,对外服务的中间件。

  • 后端部分,使用flask作api服务框架,引入了flask-apscheduler做任务调度框架,开放api接口方便前端做任务的动态配置和启停,定时触发等功能。 使用celery做分布式任务分发执行模块,借助celery flower模块开放的api接口实现任务队列管理,执行中任务监控等功能。

  • 前端部分,使用了基于vue3,antd 的jeecg低代码系统,省去了开发各种前端组件和rbac权限菜单模块的工作,搭建出基础的系统前端页面。

数据模块

创建一个数据模型的概念,将各数据源类型(文件,api,数据库表,数据库查询sql,binlog数据流,kafka数据流,nosql文档记录等)抽象为统一数据模型。
在统一数据模型上支持创建,删除,字段管理,查询取数,封装数据查询api接口等各种功能,不同数据模型具有不同的功能类型,并使用前端低代码系统快速拓展实现数据源的管理和创建新的数据模型类型和相关拓展功能。
查询数据时,根据系统配置的相关连接参数,实例化对应的数据模型reader对象,并根据前端配置的过滤条件,原生查询等表单参数对数据源进行查询和数据组装返回,实现数据对象的即时查询。 针对数据读取对象,通过内部配置的固定数据处理逻辑或编写自定义代码,即可将查询的原始数据转换为目标数据源所需的数据结构,并实例化目标数据模型writer对象,实现etl数据集成管道功能。

与ai结合

随着chatgpt等llm应用的火爆,开始思考如何与现有数据查询模块结合实现自然语言到数据结果的转化,在调研了较多相关项目(chatdb,nl2sql,chatBI相关开源项目)和结合现有数据查询模块后,决定实现一套基于代码生成的ai数据分析工具
主要参考了pandas-ai的相关prompt及代码实现,并结合现有系统数据模型进行了适配开发,大致实现逻辑如下:
1,首先,对实例化的数据模型reader实现一个生成模型使用介绍prompt的函数,生成了该数据源相关数据样貌,表结构,前几条数据示例以及该reader对象读取数据的python代码示例等详细信息,供llm学习。
2,针对比如mysql中有大量表或elasticsearch中有大量索引,无法一次性给出所有表结构信息提示的情况。使用了rag相关技术,将每个数据表结构或索引mappping,分割为一个个知识块,加入向量数据库。然后使用rag检索增强功能,根据问题检索出相关所需知识段,作为提示词的一部分。
3,根据用户问题,rag检索相关知识库,加上reader对象的使用提示,组合成代码生成目标结果的提示词,llm生成对应代码后,使用代码执行器获取对应数据结论,数据dataframe,统计报表html等各类型数据结果,传送给前端实现回答问题,导出数据表格,绘制数据报表等功能。
4,若llm生成代码执行错误,将错误信息反馈给llm,让其反思修复此代码,并使用新生成的代码重新生成数据结果。

效果优化及后续计划

经过开发,基本实现了针对各种数据源的自然语言查询数据和对话问答功能,并使用了rag技术将正确的回答进行了手动标记生成问答对知识段加入知识库,下次问到类似问题时,能更好更精准的实现对应的数据分析需求。
并开发了llm对话的rag知识库问答,agent工具调用等ai对话场景,将数据对话封装成为了其中的数据分析工具,拓展了对话系统的应用丰富度,后续将着重开发以下模块:
1,将ai对话应用优化,使基础的ai对话具备对指定数据源的数据查询分析功能。
2,ai应用封装成服务,支持使用开放对话页面或api接口访问对应对话应用。
3,将ai应用到数据集成模块中,实现ai自动化的etl数据管道搭建。
4,更多数据和ai结合的应用案例。。。