百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

解放程序员双手!GPT-3自动生成SQL语句 | 代码开源

yuyutoo 2025-01-11 18:30 1 浏览 0 评论

金磊 发自 凹非寺
量子位 报道 | 公众号 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() - interval7 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() - INTERVAL30 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() - interval30 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() - interval7 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() - interval6 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() - interval1 monththen 1 else 0 end) as signups_this_month,
sum(case when signup_dt>= now() - interval2 monthsand signup_dt < now() - interval1 monththen 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 · 头条号签约

关注我们,第一时间获知前沿科技动态

相关推荐

了解 SQL 语言特点、分类及规则

SQL语言概述SQL全称是结构化查询语言(structuredQueryLanguage),它是一种在关系型数据库中定义和操纵数据的标准语言。最早是由IBM的圣约瑟(Sanjose)研究...

SQL的语言规范及分类详解

SQL:StructureQueryLanguage结构化查询语言,它是使用关系模型的数据库应用语言,由IBM上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有S...

2分钟,快速认识什么是SQL

结构化查询语言,简称SQL,它是与关系数据库管理系统通信的黄金标准语言。今天就来一起快速认识一下什么是SQL,您可以通过以下的文字内容学习,也可以通过文末的视频学习,希望本文对您有所帮助。...

SQL语言书写与规则详解

SQL语言SQL语言主要包含6个部分,什么是SQL语言?SQL语言被称之为结构化查询语言(StructuredQueryLanguage),它是关系型数据库的**标准语言[所有数据库厂商都要遵守S...

SQL知识大全(一):数据库的语言分类你都知道吗?

点击上方蓝字关注我们今天是数据库语言分类的第一讲,主要会介绍数据库的四类语言,以及其语法,课程大纲详见脑图。...

数据查询语言SQL基本语法

SQL(StructuredQueryLanguage)即结构化查询语言,是用来管理和处理关系型数据库的标准计算机语言。其语法非常丰富,允许用户执行各种操作,包括但不限于查询、插入、更新和删除数据...

SQL(structured query language)语言

SQL(structuredquerylanguage)关系数据库标准语言-SQL数据库是表的汇集,它用一个或多个SQL模型定义-基本表是实际存储在数据库中的表,视图是由若干个基本表或其他视图导出...

SQL查询逻辑执行顺序:从FROM到LIMIT,步步解析

SQL(StructuredQueryLanguage)作为关系型数据库的标准语言,被广泛应用于数据查询和管理。虽然我们通常按照...

SQL大宝剑-已燃尽所有SQL的理解

作者:京东物流向往一、背景从事数据开发将近四年,过程中有大量任务交接或阅读同事代码的场景。在这些场景中发现有些SQL读起来赏心悦目,可以一目了然地了解业务逻辑,一些复杂的业务需求实现方法也可以做到简...

《图解SQL:数据库语言轻松入门》

《图解SQL:数据库语言轻松入门》当初入手这本书的时候,我还是蛮有勇气的。毕竟我是一个除了数据库三个汉字会写之外,对数据库一无所知的人。当时我是想到了一个故事,才决定入手这本书的。这个故事你小时候应该...

【数据管理】数据库通用概念和常用SQL讲解

数据库是计算机领域的专业词汇,大部分人也许觉得和数据库没有交集。但其实每天,甚至连你自己都没有意识到,我们一直在使用数据库。淘宝购物挑选的商品信息,手机通讯录里面的联系人,微信发送的聊天记录等,数据都...

慢 SQL 分析与优化

背景介绍从系统设计角度看,一个系统从设计搭建到数据逐步增长,SQL执行效率可能会出现劣化,为继续支撑业务发展,我们需要对慢SQL进行分析和优化,严峻的情况下甚至需要对整个系统进行重构。所以我们往...

SQL学习:实例讲解SQL必会的12个高频语句

在数据库查询中,总结了12个高频常用SQL语句,供大家参考学习:1、复制表结构,不包括数据(用于建立同一个表结构)...

SQL语言包括哪几部分?每部分都有哪些操作关键字?

【死记硬背】SQL即StructuredQueryLanguage结构化查询语言,包括数据定义(DDL)、数据操纵(DML)、数据查询(DQL)、数据控制(DCL)、事物控制(TCL)和指针控制(...

数据库中sql语句大全

结构化查询语言(StructuredQueryLanguage)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;...

取消回复欢迎 发表评论: