概述
在我们SDP软件里,有一个异构数据浏览器工具,主要是可以查包括mysql,clickhouse,doris等各类数据源,通过SQL语句查询数据,在AGI发展的今天,我们已经可以使用自然语言生成SQL了,而且能较好的支持多表关联,这主要取决于我们SDP可以提供如下基础信息:
- 完备的数据字典:包括字段说明,表说明,字段关联信息配置(类似外键信息),索引信息等
- 业务常见SQL的收藏库,可让AI更好的理解和生成SQL
做这件事的主要目的是:
- 开发人员可用自然语言生成SQL提高开发效率(避免记忆繁杂的字段名和表名),微调SQL即可
使用效果如下图:
实现思路
这个属于结构化RAG领域,相比一般RAG从文档中抽取结构化数据大同小异,我们主要做如下工作:
- DDL:根据数据字典信息生成,用于告知AI所有字段的类型,长度等
- DB描述信息:描述字段和表的详细信息,如字段的外键,索引信息等
- 问答集:常见知识库,如曾经根据业务查询过的问题和生成SQL的键值对,便于让AI做更好理解
- 同义词库:建立如表名的同义词,便于更准确命中表名,或者特定领域术语
- 部署本地大模型:我们使用的是QWen 2.5,4090GPU显卡,支持上下文月9K,所以针对个别表特别多的字段超限的情况下,无法生成SQL,正常情况下足够了
可使用ragflow建立如下流程:
调优思路:
- 促进用户反馈:可在界面实现针对用户自然语言输入后,用户调优后的SQL存入QA问答库,从而减少手动维护的需求,在界面可加入比如点赞功能;
- 尽可能给DDL语句表述完整:如字段,表的注释,主键,唯一键等;
即可体验自然语言生成SQL。
欢迎关注我的公众号“Sumslack团队”,原创技术文章第一时间推送。