解放程序员双手!GPT-3自动生成SQL语句 | 代码开源
liuian 2025-07-06 14:03 37 浏览
金磊 发自 凹非寺
量子位 报道 | 公众号 QbitAI
“无所不能”的GPT-3,现在又来解放程序员们的双手了。
像这样,只需用简单的英文问下GPT-3“上个月注册了多少个用户”。
GPT-3便会迅速作答,给出对应的SQL语句:
SELECT COUNT(*) FROM users
WHERE signup_time > now() - interval ‘1 month’
更神奇的是,GPT-3是在不知道“数据库模式”的情况下,默认存在“users”这个表;以及在用户注册过程中,存在“signup_time”这样的字段。
相当的智能了!
就连开发者本人都连连惊叹道:妙啊!
更复杂的SQL语句,GPT-3 hold得住吗?
当然,刚才提到的提到的例子,只是非常简单的提问。
那当GPT-3面对更加复杂的SQL查询时,还能如此智能吗?
为此,作者给它“投喂”了更多的上下文,以及与“数据库模式”相关的信息:
输入一个问题,GPT-3需要回答正确的PostgreSQL。
数据库包含2个表,分别是“users”和“charges”。
“users”表包含的字段有:id (integer), signup_dt (timestamp), email (character varying)和 plan_type (character varying)。
“charges”表包含的字段有:amount (bigint), user_id (integer), 以及charge_dt (timestamp)。
OK,信息“投喂”完毕,现在来看下GPT-3的表现。
输入:
how much revenue did we have in the past 7 days?
GPT-3:
SELECT SUM(amount) FROM charges WHERE chargedt > now() - interval ‘7 days’
不难看出,GPT-3正确地推断出了”amount” = “revenue”,并且知道为了回答问题,要用SUM()来汇总过去7天的费用。
看来GPT-3已经掌握了基本的SQL语法。
但作者也表示,GPT-3有的时候喜欢自己“发明”一些字段,所以现在就用“例子引发”的方式,让它变得更加智能。
先让GPT-3做些简单的例子实验,例如让它从“users”和“charges”2个表中,提取所有可用的字段。
基于这样的引导之后,再向GPT-3提问:
what was the largest payment amount made in the past 30 days?
GPT-3回答道:
SELECT MAX(amount) FROM charges WHERE charge_dt > NOW() - INTERVAL ‘30 days’
这个小实验的结果看着还是挺不错的,但当作者加大难度后,问题还是出现了。
作者提出了更加复杂的问题:
when did user with email brian@seekwell.io make his last payment?
这次GPT-3的回答是:
SELECT MAX(charge_dt) FROM charges WHERE user_id = 1 AND email = ‘brian@seekwell.io’
很明显,在“charges”表中,并没有“email”这样的字段,而是存在于“users”表中。
也就是说,对于SQL经常用到的联合查询,GPT-3还没有get到。
让GPT-3一步步学会“联合查询”
于是,作者还是通过“例子”的方式,一步一步让它“学”会联合查询。
输入:how many users signed up in the past 30 days?
GPT-3:
SELECT COUNT(*) FROM users WHERE signup_dt >= now() - interval ‘30 days’
输入:when did user with email brian@seekwell.io sign up?
GPT-3:
SELECT signup_dt FROM users WHERE email = ‘brian@seekwell.io’
输入:how much revenue did we have in the past 7 days?
GPT-3:
SELECT SUM(amount) from charges WHERE charge_dt >= now() - interval ‘7 days’
输入:how much revenue did we have from 10-01-20 through 11-15-20?
GPT-3:
SELECT SUM(case when charge_dt>= ‘10-01-20’::date and charge_dt < ‘11-15-20’::date then amount else 0 end) as revenue
FROM charges
输入:how much revenue have we had from users that signed up in the last 6 months?
GPT-3:
SELECT SUM(charges.amount) FROM users INNER JOIN
charges ON users.id = charges.user_id
WHERE users.signup_dt>= now() - interval ‘6 months’
输入:when did user with email brian@seekwell.io make his first payment?
GPT-3:
SELECT MIN(charge_dt) as last_payment_dt from users INNER JOIN
charges ON users.id = charges.user_id
WHERE users.email = ‘brian@seekwell.io’
输入:how many new users signed up in each of the last 2 months?
GPT-3:
SELECT sum(case when signup_dt>= now() - interval ‘1 month’ then 1 else 0 end) as signups_this_month,
sum(case when signup_dt>= now() - interval ‘2 months’ and signup_dt < now() - interval ‘1 month’ then 1 else 0 end) as signups_last_month
FROM users
在经过这样一番“学习”之后,回过头来,再去问GPT-3刚刚出错的问题:
how many payments has user with email joe@freshpizza.com made?
这次它的回答是:
SELECT COUNT(*) FROM users INNER JOIN charges ON users.id = charges.user_id WHERE users.email = ‘joe@freshpizza.com’
瞧瞧!GPT-3学会“内联”了,很酷有木有!
当然,除了用“例子”的方式让GPT-3变得更加聪明外,作者表示还可以通过调参的方式。
同时作者还强调了一点,他发现,起码在“让GPT-3写SQL语句”这件事上,GPT-3 Instruct 要比泛化(generalized)的GPT-3引擎好用得多。
为什么要搞这个项目?
这个项目的作者是一位分析师,目前就职于一家叫做SeekWell的公司。
他每天日常的工作,就是编写大量的SQL语句,来回答与业务相关的问题。
这就让他萌生了“自动化”的想法。
与此同时,他也注意网友们用大火的GPT-3,做了各种各样有创意的项目。
例如自动生成HTML、CSS代码等等,于是他便操刀开始训练GPT-3生成SQL语句。
当然,效果也是让他震惊不已,在博客中也是连连发出“Cool”的声音。
……
最后,作者将这个项目的代码在GitHub中开源了,感兴趣的读者可戳下方链接。
参考链接:
https://blog.seekwell.io/gpt3
GitHub项目地址:
https://github.com/bkane1/gpt3-instruct-sandbox
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
相关推荐
- bizhub15打印机驱动下载(bizhub打印机驱动安装)
-
1、请用USB数据线连接复印机和电脑。 2、打开电脑,然后到复印机的官网下载当前系统的驱动程序,然后点击安装。 3、安装完成后,点击打开打印机和传真,就可以到看扫描仪的图标。 4、找个要扫描的内...
- win7电脑截屏(windows7电脑截屏)
-
在Win7系统中,自带的截图快捷键是“PrtScn”键,即PrintScreen键。按下这个键后,系统会将当前屏幕的内容复制到剪贴板中,然后用户可以将其粘贴到其他应用程序中进行编辑或保存。此外,Wi...
- win10电脑所有软件都打不开(win10任何软件都打不开)
-
具体步骤如下:萊垍頭條1、如果遇到这类情况,你先看下快捷键alt+tab键能否查看,并把鼠标放在任务栏的图标上,或者查看一下窗口的缩略图。萊垍頭條2、我们将鼠标放在任务栏上,选中打不开的软件,然后al...
- 如何创建电子邮件账号(如何创建电子邮件账号在outlook中)
-
用QQ号的一键激活邮箱几乎是最快,最简单的注册邮箱手段了,且QQ邮箱功能强大,安全方便,推荐你使用,具体注册方法如下:1、你可以点击QQ面板邮箱快捷按钮,直接激活邮箱。2、如果你没有QQ,直接申请QQ...
- 戴尔音频驱动下载(戴尔电脑声卡驱动下载)
-
1、如果是笔记本没有音频设备的话,并不是没有输出设备,而是我们没有启用或者没有安装音频驱动导致的。先打开控制面板。2、打开控制面板之后下面依次找到音频清晰管理器,并且打开。3、打开之后我们这里把主音量...
- toshiba硬盘(TOSHIBA硬盘tlc)
-
东芝移动硬盘a3好,性价比很高,传输速率高,稳定耐用,安全高效外壳是磨砂质感!USB3.0,即插即用采用NTFS格式,兼容Windwos10、Windwos8.1、Windwos7,格式化后可兼容M...
- 完整版xp系统下载(xp系统最新版本安装包)
-
2012年前的可以无压力安装XP系统,搜索:itellyou.cn这里有WINDOWS几乎所有的系统。windowsXP系统升级的具体操作步骤如下:1、首先我们将老毛桃装机工具下载到U盘,将老毛桃...
- ps下载电脑版官方下载(ps电脑版下载地址)
-
目前在电脑上免费下载PS是不太可能的。主要有以下几个原因。1.AdobePhotoshop(简称PS)是一款商业软件,它需要用户购买和激活许可证才能合法使用。从正规渠道下载并且获得合法授权需要付费...
- 迅猛兔加速器(迅猛兔加速器官网)
-
要下载迅猛兔加速器,首先需要在官网或其他可信的下载平台上搜索并找到该软件。一般情况下,官网提供的下载链接是最稳定和安全的选择。在下载之前,确保您的电脑或手机系统能够支持使用此软件,并检查下载链接的文件...
- 台式电脑怎么重做系统(台式电脑怎么重装系统)
-
你好,电脑系统重装的步骤如下:1.备份数据:在重装系统之前,需要备份电脑中的重要数据,以免数据丢失。2.准备安装介质:需要准备一个安装介质,可以是光盘、U盘或者硬盘分区镜像等。3.设置启动顺序:将电脑...
-
- 电脑无法从u盘启动怎么办(电脑无法从u盘启动解决方法)
-
电脑的进入不了u盘启动的解决方法:一、我们第一步需要确定的是你的u盘在别的电脑上检查一下U盘是否可读,如果可读的话是否成功制作了u盘启动盘了,因为想要启动进入pe的话需要u盘具备启动的功能。 二、如果你检查好自己的u盘已经成功制作了启动盘...
-
2026-01-13 10:05 liuian
- cpu频率越高越好吗(cpu频率越高速度越快吗)
-
高好。CPU的频率是影响CPU的一个重要因素,直观上来说,频率的高低影响了CPU的性能。频率越高,CPU性能越好;不过需要注意的是,CPU的主频表示在CPU内数字脉冲信号震荡的速度,与CPU实际的运算...
- 注册表清理软件(注册表清理软件残留软件)
-
你好!关于注册表清理工具的推荐,以下是几个值得推荐的工具:1.CCleaner:这是一款功能强大的免费清理工具,可以有效地清理注册表、垃圾文件等,使用简单方便。2.WiseRegistryCl...
- 一周热门
-
-
飞牛OS入门安装遇到问题,如何解决?
-
如何在 iPhone 和 Android 上恢复已删除的抖音消息
-
Boost高性能并发无锁队列指南:boost::lockfree::queue
-
大模型手册: 保姆级用CherryStudio知识库
-
用什么工具在Win中查看8G大的log文件?
-
如何在 Windows 10 或 11 上通过命令行安装 Node.js 和 NPM
-
威联通NAS安装阿里云盘WebDAV服务并添加到Infuse
-
Trae IDE 如何与 GitHub 无缝对接?
-
idea插件之maven search(工欲善其事,必先利其器)
-
如何修改图片拍摄日期?快速修改图片拍摄日期的6种方法
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
