cover_image

使用自然语言生成SQL

空山雪林 Sumslack团队 2025年01月22日 10:26

概述

在我们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,正常情况下足够了
  • 微调大模型提示语,让SQL生成更精准
  • 配置RAG流程,并整合到SDP

可使用ragflow建立如下流程:

图片
图片
图片

调优思路:

  • 促进用户反馈:可在界面实现针对用户自然语言输入后,用户调优后的SQL存入QA问答库,从而减少手动维护的需求,在界面可加入比如点赞功能;
  • 管理特定领域同义词;
  • 尽可能给DDL语句表述完整:如字段,表的注释,主键,唯一键等;

即可体验自然语言生成SQL。


欢迎关注我的公众号“Sumslack团队”,原创技术文章第一时间推送。

继续滑动看下一个
Sumslack团队
向上滑动看下一个