使用自然语言生成SQL
来源:互联网
时间:2026-06-16 14:26:05
在SDP软件内部,我们一直在探索如何让数据查询变得更智能、更高效。这次要聊的,是一个相当有意思的尝试——用自然语言直接生成SQL。先抛几个核心判断:这个功能不仅可行,而且已经能在多表关联的场景下稳定工作。关键在于,SDP提供了哪些基础支撑。

概述
SDP内置了一个异构数据浏览器工具,能查询MySQL、ClickHouse、Doris等各类数据源的数据,常规操作是通过编写SQL语句来实现。但在AGI技术快速发展的当下,我们已经可以让自然语言直接生成SQL,并且对多表关联的支持也相当到位。这背后,依赖的是SDP提供的几项基础信息:
- 完备的数据字典:包含字段说明、表说明、字段关联信息配置(类似外键信息)、索引信息等
- 业务常见SQL的收藏库:让AI能更好地理解和生成SQL
- 同义词库:比如表名的同义词等
这项能力主要瞄准了两类用户:一是非技术人员,他们可以用自然语言直接获取数据;二是开发人员,不用再记忆那些繁杂的字段名和表名,拿自然语言生成SQL后再微调一下即可,开发效率提升明显。使用效果可以参考下图:
实现思路
本质上,这属于结构化RAG的范畴。和传统RAG从文档中抽取结构化数据相比,整体逻辑大同小异,但具体工作侧重点有所不同。核心工作包括以下几块:
- 准备数据集,通过程序对数据做预处理
- DDL:根据数据字典信息生成,用来告诉AI所有字段的类型、长度等
- DB描述信息:详细描述字段和表的信息,比如字段的外键、索引等
- 问答集:常见知识库,例如曾经根据业务查询过的问题和生成SQL的键值对,帮助AI更好地理解需求
- 同义词库:建立表名的同义词,便于更准确地命中表名或特定领域术语
- 部署本地大模型:目前使用QWen 2.5搭配4090GPU显卡,支持上下文约9K。对于个别表特别多、字段超限的情况,可能无法生成SQL,但正常使用场景下完全够用
- 微调大模型提示语,让SQL生成更精准
- 配置RAG流程,并整合到SDP中
具体流程可以用ragflow搭建,操作起来并不复杂。需要注意的是调优环节,这里有三个值得关注的调优方向:
- 促进用户反馈:在界面中,用户对自然语言输入后生成的SQL进行调优,调优结果可以存入QA问答库,减少手动维护需求;界面中可以加入点赞功能等互动设计
- 管理特定领域同义词:不断扩充和完善同义词库
- 尽可能让DDL语句表述完整:包括字段和表的注释、主键、唯一键等信息,越完整越好
这样一来,用户就能在SDP中直接体验自然语言生成SQL的便捷了。这才是拉近人和数据距离的正确姿势。