新聞中心
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

“無所不能”的GPT-3,現(xiàn)在又來解放程序員們的雙手了。
像這樣,只需用簡(jiǎn)單的英文問下GPT-3“上個(gè)月注冊(cè)了多少個(gè)用戶”。
GPT-3便會(huì)迅速作答,給出對(duì)應(yīng)的SQL語(yǔ)句:
SELECT COUNT(*) FROM users
WHERE signup_time > now() - interval ‘1 month’
更神奇的是,GPT-3是在不知道“數(shù)據(jù)庫(kù)模式”的情況下,默認(rèn)存在“users”這個(gè)表;以及在用戶注冊(cè)過程中,存在“signup_time”這樣的字段。
相當(dāng)?shù)闹悄芰耍?/p>
就連開發(fā)者本人都連連驚嘆道:妙啊!
更復(fù)雜的SQL語(yǔ)句,GPT-3 hold得住嗎?
當(dāng)然,剛才提到的提到的例子,只是非常簡(jiǎn)單的提問。
那當(dāng)GPT-3面對(duì)更加復(fù)雜的SQL查詢時(shí),還能如此智能嗎?
為此,作者給它“投喂”了更多的上下文,以及與“數(shù)據(jù)庫(kù)模式”相關(guān)的信息:
輸入一個(gè)問題,GPT-3需要回答正確的PostgreSQL。
數(shù)據(jù)庫(kù)包含2個(gè)表,分別是“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,信息“投喂”完畢,現(xiàn)在來看下GPT-3的表現(xiàn)。
輸入:
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天的費(fèi)用。
看來GPT-3已經(jīng)掌握了基本的SQL語(yǔ)法。
但作者也表示,GPT-3有的時(shí)候喜歡自己“發(fā)明”一些字段,所以現(xiàn)在就用“例子引發(fā)”的方式,讓它變得更加智能。
先讓GPT-3做些簡(jiǎn)單的例子實(shí)驗(yàn),例如讓它從“users”和“charges”2個(gè)表中,提取所有可用的字段。
基于這樣的引導(dǎo)之后,再向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’
這個(gè)小實(shí)驗(yàn)的結(jié)果看著還是挺不錯(cuò)的,但當(dāng)作者加大難度后,問題還是出現(xiàn)了。
作者提出了更加復(fù)雜的問題:
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”表中。
也就是說,對(duì)于SQL經(jīng)常用到的聯(lián)合查詢,GPT-3還沒有g(shù)et到。
讓GPT-3一步步學(xué)會(huì)“聯(lián)合查詢”
于是,作者還是通過“例子”的方式,一步一步讓它“學(xué)”會(huì)聯(lián)合查詢。
輸入: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
在經(jīng)過這樣一番“學(xué)習(xí)”之后,回過頭來,再去問GPT-3剛剛出錯(cuò)的問題:
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學(xué)會(huì)“內(nèi)聯(lián)”了,很酷有木有!
當(dāng)然,除了用“例子”的方式讓GPT-3變得更加聰明外,作者表示還可以通過調(diào)參的方式。
同時(shí)作者還強(qiáng)調(diào)了一點(diǎn),他發(fā)現(xiàn),起碼在“讓GPT-3寫SQL語(yǔ)句”這件事上,GPT-3 Instruct 要比泛化(generalized)的GPT-3引擎好用得多。
為什么要搞這個(gè)項(xiàng)目?
這個(gè)項(xiàng)目的作者是一位分析師,目前就職于一家叫做SeekWell的公司。
他每天日常的工作,就是編寫大量的SQL語(yǔ)句,來回答與業(yè)務(wù)相關(guān)的問題。
這就讓他萌生了“自動(dòng)化”的想法。
與此同時(shí),他也注意網(wǎng)友們用大火的GPT-3,做了各種各樣有創(chuàng)意的項(xiàng)目。
例如自動(dòng)生成HTML、CSS代碼等等,于是他便操刀開始訓(xùn)練GPT-3生成SQL語(yǔ)句。
當(dāng)然,效果也是讓他震驚不已,在博客中也是連連發(fā)出“Cool”的聲音。
……
最后,作者將這個(gè)項(xiàng)目的代碼在GitHub中開源了,感興趣的讀者可戳下方鏈接。
網(wǎng)站題目:解放程序員雙手!GPT-3自動(dòng)生成SQL語(yǔ)句|代碼開源
本文網(wǎng)址:http://www.dlmjj.cn/article/ccssjgg.html


咨詢
建站咨詢
