解放程序员双手!GPT-3自动生成SQL语句 | 代码开源
金磊 发自 凹非寺
量子位 报道 | 公众号 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
— 完 —
本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。
加入AI社群,拓展你的AI行业人脉
量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展:
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见~
解放程序员双手!GPT-3自动生成SQL语句 | 代码开源相关推荐
- NO2:自动生成sql语句
SQL语句自动生成工具 大哉乾元 2016/2/26 作者原创转载请注明出处 前言 这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入 ...
- 用excel自动生成sql语句
在空白列插入函数 =CONCATENATE("insert into user(code, name) values('",A1, "','", B1, &qu ...
- java自动生成sql语句
java自动生成sql语句 艳学网强势来袭http://47.98.237.162/index,首次发布艳辉工具,第一个工具我们发布sql语句自动生成. 以前首次接触sql是在大学期间,刚开始是手写s ...
- 使用Excel自动生成sql语句
在近一段日子里,进入了新的项目组,由于项目需要,经常要将一些Excel表中的数据导入数据库中,以前并没有过多的接触过数据导入与数据处理,对于我来说比较痛苦,今天下午花了几个小时处理数据,但是同事给我提 ...
- 解放程序员双手之Supervisor
前言 对于大部分程序员来说,主要工作都是进行编码以及一些简单的中间件安装,这就导致了很多人对于"运维"相关的工作会比较生疏.例如当我们拥有一台自己的服务器以后,可能会在上面跑一 ...
- mysql逆向工程封装_MyBatis高级应用之逆向工程自动生成SQL语句
本文以Spring整合MyBatis环境下,介绍MyBatis逆向工程自动生成pojo,mapper,dao的Java类.MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话 ...
- 遍历当前目录下的所有子目录例子(自动生成SQl语句工具)
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...
- android studio 自动生成sql语句,Android Studio Plugin 插件开发教程(三) —— 制作一个自动生成数据库代码的插件...
项目源码 系列教程 插件介绍 本篇实战撸个自动生成安卓Sqlite数据库代码的插件,先演示下最终效果 db文件夹下的都是插件自动生成的,而MainActivity里面的代码是我提前写好的,用于实验插件 ...
- 自动生成SQL查询、删除、更新、插入语句
自动生成sql语句 select 'update ' || t.table_name || ' a set ' || (select wm_concat('a.' || a.colu ...
最新文章
- 解决Jsp运行org.apache.jasper.JasperException: Unable to compile class for JSP:问题
- 摘要提取算法——本质上就是pagerank,选择rank最高的句子作为摘要,如果结合word2vec应该有非常好的效果...
- 修改ECSHOP,支持图片云存储化(分离到专用图片服务器)
- 递归和分治思想及其应用
- 川大计算机文化基础在线作业,川大1309《计算机文化基础0008》在线作业2答案.docx...
- 2019-03-18-算法-进化(字符串中的第一个唯一字符)
- 汇编中call printf参数压栈时错误理解
- 导出excel数字前面的0消失_Excel操作中常见的3大坑你遇到过吗?遇到应该这么解决...
- 双重差分模型能做固定效应吗_互助问答第53期:控制时间效应、交互项等问题...
- ❤️《大前端—了解与使用NodesJS》
- 大数据挑战与NoSQL数据库技术pdf
- paip.软件版本完善计划VC421
- 在线ai伪原创文章生成助手
- 中英文自动翻译(有道翻译、彩云小译)
- 学python就业好吗_Python就业行情怎么样?Python好学吗?
- 如何修改图片的dpi?图片的dpi怎么调?
- 小红书电商入驻全流程指南
- MySQL数据库课程设计_什么是数据库?如何学习数据库?
- collections.abc与abc模块是同一个东西吗?
- john the ripper跑多核多cpu