ChatGPT賦能低代碼開發(fā):打造智能應(yīng)用的雙重引擎
ChatGPT的functions函數(shù)使用方法
自從OPENAI發(fā)布了最新的GPT引擎gpt-3.5-turbo-0613之后,我就對它的functions參數(shù)很感興趣,利用GPT超強(qiáng)的語言理解能力,如果加上函數(shù)執(zhí)行,我們就可以讓AI不再是聊聊天、回答問題了,甚至能夠直接幫我們完成工作任務(wù)。剛好今天周末,不如就動手試試,看能否達(dá)到我所想的效果。
開始之前,我們先要看一下官方文檔,看看這個functions,是個什么神奇的參數(shù),只有搞清楚了它的作用和原理,我們才知道如何利用它。

這是官方對Function calling的介紹,我們可以看到,目前支持gpt-3.5-turbo-0613和gpt-4-0613兩種引擎。
?
再看看functions參數(shù)的格式和屬性,我們可以看到,這里我們向GPT定義了一個名為"get_current_weather"的函數(shù),并且在description中描述了這個函數(shù)的用途,在properties中,我們定義了兩個參數(shù),location和unit,這是向GPT表明,你如果調(diào)用這個函數(shù),需要向函數(shù)提供兩個參數(shù),并且對兩個參數(shù)都進(jìn)行了描述。

看懂了functions參數(shù),我們大概知道了原理,其實(shí)并不復(fù)雜,我們通過定義一系列函數(shù),告訴GPT函數(shù)是什么時候用,做什么用,需要什么參數(shù)才能用等,GPT會根據(jù)與用戶的聊天信息自行判斷是否要“執(zhí)行函數(shù)”。
????? 為什么要給執(zhí)行函數(shù)打上雙引號呢?事實(shí)上GPT肯定是不能直接執(zhí)行函數(shù)的,因?yàn)檫@只是個普通的HTTP請求,GPT也只是返回一個JSON格式的響應(yīng)信息,那該如何實(shí)現(xiàn)執(zhí)行函數(shù)的呢?
?
如何讓ChatGPT調(diào)用函數(shù)
要搞懂這個,我們還得看看GPT給我們返回的數(shù)據(jù)長什么樣子。

上面是一個正常的聊天回復(fù)信息,我們看到,message里面只有role和content兩個屬性,另外還新增了一個屬性 finish_reason ,當(dāng)它的值為“stop”,說明此次的對話無需執(zhí)行函數(shù),也說明GPT并沒有調(diào)用函數(shù)的打算,接下來我們看看GPT打算調(diào)用函數(shù)時,會返回什么?
我們發(fā)送“請問北京現(xiàn)在天氣怎么樣”給GPT,看它的回答。

?
這里可以明顯看到,finish_reason的值變成了“function_call”,開發(fā)人員通過判斷finish_reason的值,就可以知道GPT是否要調(diào)用函數(shù)。
這下豁然開朗了,我們通過回復(fù)的內(nèi)容,弄清楚GPT要調(diào)用什么函數(shù),然后拿到GPT幫我們獲取的參數(shù),直接執(zhí)行函數(shù)就可以了。
?
?
?
友情提示:下面的部分內(nèi)容會牽扯到本公司的低代碼產(chǎn)品活字格,為了減少各位的閱讀障礙,建議各位閱讀前可以先了解一下活字格:
https://www.grapecity.com.cn/solutions/huozige
使用ChatGPT嵌入活字格
數(shù)據(jù)庫表和前端設(shè)計(jì)
下面我們來給活字格裝上AI的翅膀,我們先打開活字格9.0的版本,新建一個“訂單數(shù)據(jù)表”,并填充模擬數(shù)據(jù),另外再建一張消息記錄表。


然后新建一個頁面,制作一個簡單類似搜索的頁面,運(yùn)行看看效果。


這個頁面用來與用戶進(jìn)行自然語言交互,前端我們暫時做到這兒。
后端設(shè)計(jì)
接下來設(shè)計(jì)后端,把ChatGPT對接部分做好。
為了方便使用,我提前將GPT的API封裝成了插件,原理跟上面官方所說一致。

設(shè)置好KEY和消息數(shù)據(jù)以后,我們利用插件的自動化命令配置好需要ChatGPT的執(zhí)行的命令。

?
這里的每個命令都有一個描述,我們可以用自然語言告訴AI,什么時候該調(diào)用我,AI會自己決定調(diào)用哪一個命令,當(dāng)然光有命令還不行,我們還得讓AI提供參數(shù)給我們。

在參數(shù)的配置上,我們也有一個“參數(shù)說明”,也就是用來告訴GPT,這個參數(shù)是什么意思,GPT會根據(jù)用戶的信息,自己來歸納和推測參數(shù)內(nèi)容。
?
使用ChatGPT查詢訂單
好了,做到這兒,GPT后端部分也已經(jīng)配置好,現(xiàn)在我們模擬一個場景出來,例如我想讓GPT幫我們查詢訂單數(shù)據(jù),我們可以這樣定義:
首先定義一條命令如下,告訴GPT,這個命令是用來按條件查詢多個訂單數(shù)據(jù)。

再給命令定義查詢訂單需要用到的一些關(guān)鍵參數(shù),有了這些信息,我們后面就可以實(shí)現(xiàn)查詢條件,從而根據(jù)條件篩選數(shù)據(jù)。

?
?????? 判斷GPT返回的function_call.name是不是等于GetOrderData:? ?

如果是,就把獲得的參數(shù)用來篩選數(shù)據(jù):

最后把獲取到的數(shù)據(jù)返回給前端:

最后我們在前端補(bǔ)充一個頁面,用來接收并顯示查詢返回的數(shù)據(jù)表中的數(shù)據(jù)。
最終實(shí)現(xiàn)的效果:

可以看到GPT準(zhǔn)確的理解了我們的意圖,并且調(diào)用了我們預(yù)設(shè)好的命令,還提供了我們需要的日期、訂單類型等參數(shù)。
通過這個簡單的例子,我們可以驗(yàn)證AI與活字格結(jié)合的可行性,那么我們除了查詢數(shù)據(jù),還能不能做點(diǎn)更復(fù)雜的事情呢?
?
使用ChatGPT顯示訂單內(nèi)容
所以接著我又做了另一個嘗試,讓AI根據(jù)我的要求找到某個訂單,并顯示該訂單內(nèi)容
這個嘗試,我加入了更多的參數(shù),由日期、訂單類型、負(fù)責(zé)人等,然后修改了邏輯,把命令放到前端頁面來執(zhí)行。

這時候我們初步已經(jīng)學(xué)會怎么運(yùn)用GPT的能力,來為我們完成特定任務(wù)了,下面我將繼續(xù)完成一個更復(fù)雜、更實(shí)用的嘗試。
?
使用ChatGPT發(fā)送郵件
我想讓系統(tǒng)理解這樣一句話,并幫我執(zhí)行。
“我是喬布斯,請幫我找出2023年6月份馬斯克經(jīng)手采購iphone的訂單數(shù)據(jù),發(fā)送郵件給超哥,并寫一段話禮貌的催促他快點(diǎn)審核?!?/p>
我來幫大家理理,想要完成這個任務(wù),我們需要做些?
?
??讓AI知道我是誰;
??需要找出2023年6月1日到6月30日范圍內(nèi),負(fù)責(zé)人為"馬斯克"、訂單類型為"采購訂單"的數(shù)據(jù);
??將上面數(shù)據(jù)導(dǎo)出為Excel;
??找到超哥的郵箱,并將上面的數(shù)據(jù)作為附件;
??編寫一段話作為郵箱正文;
??尋找系統(tǒng)用戶中一個叫“超哥”的人,并拿到郵箱地址;
??將郵件發(fā)送出去并返回。
?
梳理清楚了,我們就開始做邏輯,同樣配置好命令和參數(shù)的描述

然后利用報表模塊,設(shè)計(jì)一個簡單的報表,綁定訂單數(shù)據(jù)庫

最后做一下導(dǎo)出Excel+發(fā)送郵件的命令

總結(jié)
ChatGPT與活字格的結(jié)合為軟件設(shè)計(jì)帶來了巨大的潛力,并給開發(fā)者帶來了全新的思考和改變。AI的執(zhí)行任務(wù)能力和自然語言交互使軟件操作更加智能化和直觀化。開發(fā)者將專注于與AI的對話和數(shù)據(jù)分析目標(biāo)的設(shè)定,而無需擔(dān)心底層的技術(shù)細(xì)節(jié)。我們期待ChatGPT和活字格技術(shù)的不斷發(fā)展,推動低代碼開發(fā)向智能開發(fā)的創(chuàng)新和突破,讓我們迎接更加智能的軟件時代。