Text2SQL 实战:当大模型遇见 MySQL 关系型数据库

48 阅读2分钟

我们平时想查数据库,要么是打开 Navicat 写复杂的连表 SQL 语句,要么是麻烦后端去新写一个查询接口。

如果能有一个对话框,运营人员只要打字说:“帮我查下上个月上海地区销量最好的前五条产品”,AI 就能自己写 SQL 并去查好把结果喂给你看,那该多酷?

mysql_query_demo.py 中演示的就是行业内炙手可热的技术:Text2SQL (文本转查询语句)

Text2SQL 的核心链路流转

很多同学以为是直接连着数据库和模型。其实数据库非常需要保护,通常有三个严谨的步骤:

1. 让 AI 认路(表结构理解)

AI 再聪明,它也不知道你家公司的库叫什么表名。

所以第一步,我们用 Python 连接 MySQL 后,获取到相关表的表结构(DDL语句,比如包含哪些字段,是否为主键,各自什么含义注释),然后发送给大模型。

告诉它:“你看,这是我们的表。现在我问一个问题,请你只根据这些表结构,给我写出一句纯正的 SELECT SQL出来。”

2. 人工或程序审查 (执行防御)

大模型很快返回了类似 SELECT * FROM sales ... 这样的语句。

请一定要注意:绝对不要在生产环境直接无脑执行这句 SQL!

因为如果有幻觉,它可能写出极其拖累性能的全表扫描,或者是被恶意引导产生的破坏性语句。通常我们会在这里使用只读账号去执行这句代码,并限制 LIMIT 保护资源。

3. 数据总结汇报

程序根据大模型给的 SQL 去本地数据库里真正查询出了 Array 数据(比如搜到了五条记录)。最后,把这干巴巴的生冷数据丢给大模型说:“嘿,这是按照你的要求查到的数据结果,请把它翻译给一个不懂代码的业务人员听。” 

AI 瞬间润色:“老板为您查到了,排在首位的是型号xxx的产品,数量高达 xxxx 个...” 一个贴心的赛博数据专员就此诞生。


本文是个人学习大模型方向时的实战小记,希望对准备入门 AI 开发的大家有所启发。

感谢关注,我会持续更新,欢迎查看相关源码实现与学习记录:  

github.com/start007-sm…