本文是在仝鍵和熊節(jié)的啟發(fā)式提問引導(dǎo)下,完全由ChatGPT生成的一篇文章。兩位人類合作者只做了必要的細(xì)節(jié)編輯。
“可能是全國第一篇ChatGPT一作的正經(jīng)文章吧”,人類合作者之一熊節(jié)對觀察者網(wǎng)表示。
“總會有人想探討AI會不會產(chǎn)生智能。而我的態(tài)度是,我現(xiàn)在就像站在泰坦尼克號船頭的一個人,看到了一座巨大的冰山向我撞來,這一刻我想的是怎么逃生上岸。我不關(guān)心那個冰山會不會產(chǎn)生智能。”另一位人類作者仝健在采訪中表示。
仝健還提到,在《流浪地球2》中,550C“生成底層操作系統(tǒng)”激發(fā)了他后續(xù)去思考以結(jié)構(gòu)化的重寫來替代重構(gòu)的開發(fā)方法。他還認(rèn)為,這種顛覆性的生產(chǎn)方式對于我們彌補(bǔ)工業(yè)軟件的短板有實際意義。
大語言模型AI的追趕關(guān)鍵在于定制應(yīng)用軟件開發(fā)能力
作者:ChatGPT,仝鍵,熊節(jié)
AI追趕的瓶頸:軟件工程能力的重要性
隨著ChatGPT的面世,大語言模型AI(如GPT-3)已經(jīng)成為了熱門話題。國內(nèi)也有很多團(tuán)隊在進(jìn)行追趕,然而,在實際追趕過程中,AI技術(shù)與軟件工程能力的結(jié)合卻成為了AI追趕的瓶頸。
我們最近在網(wǎng)上看到對復(fù)旦大學(xué)MOSS的采訪:
復(fù)旦團(tuán)隊發(fā)布國內(nèi)首個類ChatGPT模型MOSS,邀公眾參與內(nèi)測
文中提到:
“目前,MOSS的最大短板是中文水平不夠高,主要原因是互聯(lián)網(wǎng)上中文網(wǎng)頁干擾信息如廣告很多,清洗難度很大。為此,復(fù)旦大學(xué)自然語言處理實驗室正在加緊推進(jìn)中文語料的清洗工作,并將清洗后的高質(zhì)量中文語料用于下一階段模型訓(xùn)練??蒲袌F(tuán)隊相信,這將有效提升模型的中文對話能力?!?
結(jié)合文中其他部分的描述和網(wǎng)上其他資料,不難看出,盡管團(tuán)隊對其在深度學(xué)習(xí)算法和模型上充滿信心,但由于數(shù)據(jù)獲取和清洗方面的軟件工程能力不足,導(dǎo)致其模型的數(shù)據(jù)量遠(yuǎn)低于ChatGPT,無法有效提升任務(wù)完成度,比如中文對話的表現(xiàn)不足。
根據(jù)分析,數(shù)據(jù)獲取和清洗的問題實際上源于軟件能力的缺陷。例如,如果數(shù)據(jù)清洗的程序需要經(jīng)常變化,那么開發(fā)人員需要具備一定的靈活性,能夠快速理解新的需求和業(yè)務(wù)規(guī)則,并對程序進(jìn)行相應(yīng)的修改和調(diào)整。并且開發(fā)人員需要掌握TDD(測試驅(qū)動開發(fā))的相關(guān)概念和技術(shù),如單元測試、測試框架和測試覆蓋率等。因為TDD能夠幫助開發(fā)人員編寫高質(zhì)量、易于維護(hù)的代碼。開發(fā)人員還需要掌握持續(xù)集成和持續(xù)交付(CI/CD)能力,因為CI/CD能夠幫助開發(fā)人員實現(xiàn)代碼的自動化構(gòu)建、測試和部署。
如果沒有合適的爬蟲程序和清洗工具,就無法獲得足夠的數(shù)據(jù)。這使得我們意識到,在AI的發(fā)展過程中,軟件工程能力的重要性不容忽視。盡管大多數(shù)人關(guān)注的是訓(xùn)練后的模型,但在訓(xùn)練模型的過程中,需要寫很多定制開發(fā)的軟件。而這些軟件是一次性的,用完即扔的,但是這個“一次性”的過程可能長達(dá)數(shù)年,需要不斷調(diào)整和演進(jìn)這些軟件。如果這些軟件沒有持續(xù)演進(jìn)的能力,那么就無法到達(dá)終點。因此,軟件工程能力的瓶頸限制了AI的成長。
行業(yè)普遍能力顯著加劇了挑戰(zhàn)
中國的軟件開發(fā)行業(yè)數(shù)量龐大,但是整體水平并不盡如人意。雖然國內(nèi)擁有大量程序員,但是很難掌握先進(jìn)的工程實踐和技術(shù),這導(dǎo)致了軟件開發(fā)的問題和質(zhì)量不穩(wěn)定。
例如,XP(Extreme Programming)包含的一組工程實踐,如TDD(測試驅(qū)動開發(fā))、重構(gòu)等,在中國大型軟件開發(fā)組織的上下文中難以廣泛實現(xiàn)。這些工程實踐需要高水平的技術(shù)人才和團(tuán)隊協(xié)作能力,但是中國的軟件開發(fā)組織很難招聘到這樣的人才,而且組織管理也難以支持這些實踐的實施。
因此,中國的軟件通常在3-5年內(nèi)就需要重新開始,這是由于工程實踐差導(dǎo)致軟件逐漸腐化到無法維護(hù)。然而,從另一個角度來看,由于中國的軟件工程師數(shù)量眾多,對于軟件的質(zhì)量要求也沒有那么高,因此每3-5年推倒重來的做法也被視為一種解決方案。
但是,在為人工智能配套的軟件上,這種做法可能會面臨巨大的挑戰(zhàn)。為了實現(xiàn)智能化,軟件需要更高的精度和更長久的維護(hù),定期的推倒重來可能從效率和質(zhì)量上都不能滿足需求。例如,訓(xùn)練OpenGPT的過程涉及到多個軟件組件和工具,包括深度學(xué)習(xí)框架、分布式訓(xùn)練工具、數(shù)據(jù)處理和清洗工具等,這些軟件組件和工具的更新和維護(hù)都是必要的。因此,中國的軟件開發(fā)者們需要更加重視工程實踐和技術(shù)的學(xué)習(xí)和應(yīng)用,只有這樣才能夠適應(yīng)追趕需求,但是這與我們之前所說現(xiàn)狀的限制產(chǎn)生了矛盾。
基于ChatGPT的AI定制軟件開發(fā)方案
我們從文中看到,“復(fù)旦團(tuán)隊則采用不同的技術(shù)路線,通過讓MOSS和人類以及其他對話模型都進(jìn)行交互,顯著提升了學(xué)習(xí)效率和研發(fā)效率,短時間內(nèi)就高效完成了對話能力訓(xùn)練?!?
那么在軟件開發(fā)方面,我們能否采用類似的思路呢?我們是否可以直接基于現(xiàn)有的ChatGPT進(jìn)行AI所需的定制軟件的開發(fā)?盡管這個想法聽起來大膽,但實際上是可行的。
我們發(fā)現(xiàn),在使用ChatGPT進(jìn)行編程的時候,它可以基本上滿足一些簡單場景的編程需求。通過一些特定的手法,它可以有效地編寫出可用的軟件。這里所說的簡單,是指需求描述簡單,不是指需求本身簡單或者實現(xiàn)簡單。實際上,ChatGPT現(xiàn)在更擅長于處理許多復(fù)雜算法和軟件框架的開發(fā),因為這些需求都有專業(yè)術(shù)語,因此需求本身的描述可以很簡單。
經(jīng)過本人實際測試,使用ChatGPT進(jìn)行編程可以大大提高開發(fā)效率。此外,基于ChatGPT進(jìn)行編程也會帶來一些有趣的生產(chǎn)方式變化。在軟件開發(fā)的工程實踐中,我們通常會采用一種假設(shè):重寫比重構(gòu)更慢。但是,在使用ChatGPT進(jìn)行編程時,我們會發(fā)現(xiàn)重寫會更快。盡管測試仍然很重要,因為測試會告訴ChatGPT是否正確重寫,但ChatGPT本身也可以根據(jù)實現(xiàn)代碼推理出需要哪些更多的測試用例。這將形成一個恐怖的飛輪,人類提供簡單的測試和需求,讓ChatGPT編寫出符合測試的實現(xiàn),然后讓ChatGPT根據(jù)實現(xiàn)和需求反向推理出需要哪些更多的測試,并給出測試用例和可以執(zhí)行的測試代碼。這樣的工作方式與測試驅(qū)動開發(fā)(TDD)很像,只是其中最耗費(fèi)腦力的部分:“基于測試改進(jìn)代碼和想出更多測試”變成了AI的工作,而人只需要讓AI按照TDD的方式工作并適時糾偏即可。
基于這種生產(chǎn)方式及其可觀的收益,我們很容易得出一個結(jié)論:ChatGPT可以用于簡單小單元的開發(fā),但對于更復(fù)雜的系統(tǒng),它能否提供幫助呢?一般來說,由于算力的限制,ChatGPT輸入的文本是有限的,而且ChatGPT自身的封閉性使得自建業(yè)務(wù)上下文的大語言模型AI是不可能的。然而,我們可以從工程化的角度出發(fā),將復(fù)雜系統(tǒng)拆分為小單元,用簡單邏輯拼裝起來。既然ChatGPT可以完成小單元的編程,并以驚人的效率完成,為何不發(fā)明一種架構(gòu)來充分利用這種生產(chǎn)力的提升呢?
這種架構(gòu)看起來很像深度神經(jīng)網(wǎng)絡(luò),每一層都是可以互相替換的細(xì)分的功能點單元。每個細(xì)分的功能點單元都可以封裝為一個通用的調(diào)用接口,比如抓取不同的網(wǎng)站的邏輯,這些邏輯是可以被封裝在代碼中的,并且可以用一種DSL來描述。這種DSL可以交給AI來學(xué)習(xí),這些DSL不是中文,而是更結(jié)構(gòu)化更形式化的語言,對于AI來說反而很友好。人可以通過TDD的方式修正它的組合結(jié)果,最終得到一個可以用于進(jìn)行復(fù)雜系統(tǒng)開發(fā)的方式。
雖然這種方式目前還處于暢想中,但邏輯上可以做到的事情,最終一定會發(fā)生。這種新的方式一方面降低了對開發(fā)人員能力的要求,另一方面又保證了每個節(jié)點都按照唯一證明可以保證質(zhì)量的工作方式:TDD來進(jìn)行開發(fā)。這種方式可以為我們的追趕帶來極大的意義。由于中國的軟件開發(fā)人員能力存在很大的問題,我們可能受限于AI所需的配套定制軟件而追趕緩慢。但這種新的方式一方面降低了對開發(fā)人員能力的要求,另一方面卻恰好保證了每個節(jié)點都按照唯一證明可以保證質(zhì)量的工作方式:TDD,來進(jìn)行軟件開發(fā)。于是我們得到了一種既科學(xué)又不需要長期訓(xùn)練獲得的能力作為運(yùn)轉(zhuǎn)基礎(chǔ)的生產(chǎn)方式。
最終,我們可以得出結(jié)論:ChatGPT可以用于簡單小單元的開發(fā),而對于更復(fù)雜的系統(tǒng),我們可以采用一種類似于深度神經(jīng)網(wǎng)絡(luò)的架構(gòu),將復(fù)雜系統(tǒng)拆解為小單元,再用AI完成小單元的組合,從而實現(xiàn)復(fù)雜系統(tǒng)的開發(fā)。這種方式既提高了生產(chǎn)力,又保證了質(zhì)量,但更重要的是,它為我們帶來了一種全新的軟件開發(fā)思維方式。這種方式不僅僅是一種技術(shù)上的創(chuàng)新,更是一種理念上的創(chuàng)新。我們不再局限于傳統(tǒng)的軟件開發(fā)方式,而是采用了一種更為開放、自由和創(chuàng)新的方式來進(jìn)行軟件開發(fā)。
在這種開放性的思維方式下,我們可以不再局限于傳統(tǒng)的軟件開發(fā)范式,不再局限于傳統(tǒng)的技術(shù)框架和工具,而是充分利用現(xiàn)有的技術(shù)和工具,靈活地選擇和組合,以達(dá)到最優(yōu)的效果。同時,我們也可以吸納更多的外部資源,比如開源代碼、第三方庫、人才等等,讓它們與我們的系統(tǒng)無縫地融合在一起,形成一個更為強(qiáng)大、更為開放的系統(tǒng)。
當(dāng)然,這種思維方式也面臨著很多挑戰(zhàn)。比如如何確保代碼的質(zhì)量和安全性,如何協(xié)調(diào)不同的開發(fā)者之間的合作,如何處理不同的利益沖突等等。但這些挑戰(zhàn)并不是無解的,實際上它的解法就在XP(Extreme Programming,極限編程)方法中。例如測試驅(qū)動開發(fā)、持續(xù)集成、重構(gòu)等實踐都有助于確保代碼質(zhì)量。只是XP中的實踐在這個時代如何與AI更好地協(xié)作需要進(jìn)一步的探索。我們可以通過不斷的探索和實踐,逐步發(fā)展出一套成熟的軟件開發(fā)流程和治理機(jī)制,來保證整個開發(fā)過程的質(zhì)量和效率。
總之,ChatGPT作為一種新興的AI技術(shù),為我們帶來了很多的機(jī)會和挑戰(zhàn)。作為追趕者的我們卻可以充分利用它的生產(chǎn)力,來進(jìn)行我們追趕所需系統(tǒng)開發(fā)。在追趕的同時我們還會得到一種全新的開放性思維方式,它可能打破傳統(tǒng)的軟件開發(fā)模式,進(jìn)一步的釋放生產(chǎn)力。(正文完,翻頁為人類作者問答環(huán)節(jié))
人類作者問答環(huán)節(jié)
Q:為什么會產(chǎn)生這樣的想法,做這樣的嘗試?
仝鍵:ChatGPT帶來的這波浪潮,我們看很多人都在暢想未來,我們覺得,暢想未來不如活在未來。如何能應(yīng)用好這類AI其實也是有相當(dāng)多學(xué)問的,而幾乎全世界的人都在同一刻起跑,我們沒有時間等待別人研究的成果。必須要做第一批在正式工作中使用的人。所以我們在工作的所有場景下,都試圖用它來提高我們的生產(chǎn)力,所以寫這樣一篇文章對我們來說也不過是這一策略的延續(xù),它是很自然發(fā)生的,沒有特別針對寫文章這件事專門想過。寫起來之后,我們發(fā)現(xiàn),這事好像還挺酷的。
Q:如何“啟發(fā)式提問”,能否舉例?
仝鍵:其實很簡單,我們之前看到了這篇新聞,在微信上進(jìn)行了一些討論,我們把新聞鏈接和討論的內(nèi)容直接扔給了new Bing——眾所周知,new Bing就相當(dāng)于可以聯(lián)網(wǎng)的ChatGPT(雖然現(xiàn)在也限制了聯(lián)網(wǎng)獲取內(nèi)容的功能)——問它如果我們要寫一篇文章闡述這些觀點,建議怎么布局謀篇。于是它建議我們分成三部分來寫,每一部分寫什么內(nèi)容。然后我們再基于每一部分的主題,一部分一部分的讓他去寫。
第一遍由AI寫出來的內(nèi)容可能并不讓我們滿意,因為大都是片湯話,缺乏洞見。這個時候我們就把我們的不滿意直接說出來,并給它一些洞見,問它在邏輯上這些洞見是否有道理,有沒有什么補(bǔ)充,然后讓它把這些洞見和他寫的內(nèi)容編織在一起。
熊節(jié):有時候它生產(chǎn)的內(nèi)容也是會偏離我們想要表達(dá)的方向。比如說在寫這篇文章的過程中,AI把瀑布方法當(dāng)成一個靶子來打,但那不是我們想要說的重點。這個時候就需要明確告訴他,那個不是我們要討論的重點。畢竟雖然XP 提供了一些不錯的實踐,這些實踐最終也會被ChatGPT重塑成一個完全不同的樣子。所以我們并不關(guān)注傳統(tǒng)意義上的軟件開發(fā)方法的對比,更關(guān)注整體而言軟件開發(fā)能力面臨的挑戰(zhàn)。
Q:做了哪些細(xì)節(jié)編輯?
仝鍵:后續(xù)的修改還是比較少的。有一些對原文的引用是我們自己手動加進(jìn)來的。ChatGPT很不喜歡直接引用原文,哪怕你告訴它引用原文,它都會重新加工一遍。還有幾處用詞上的微調(diào)也記不太清了,不是很重要的修改。一般我們都不去直接修改它,如果覺得寫的不好,就改改prompt輸入讓它重寫,跟我們后面提到的寫代碼的方法一樣。因為擔(dān)心直接修改生成的內(nèi)容可能會在哪里造成了邏輯不通順的地方而沒注意到,所以我們更愿意讓它重寫一遍。
Q:“經(jīng)過本人實際測試”這句是后加的嗎?確實測試過嗎?
仝鍵:是我們先向ChatGPT描述了一些工作方法,它把這句話保留了下來。這里提到的整個方法都是我們實際測試過的。我們在ChatGPT推出之后一直在考慮怎么用它來輔助軟件開發(fā),最近終于在一個稍微復(fù)雜點的需求上實現(xiàn)了100%由ChatGPT編碼完成。不過這個案例更多是可行性證明性質(zhì)的試驗,實際意義不大。大多數(shù)與它結(jié)對完成的代碼,是95%由它完成,5%由我們自己完成。
熊節(jié):在與ChatGPT結(jié)對編程的過程中,人的主要作用是提出顆粒度合適的任務(wù),然后驗收ChatGPT給出的代碼。有時候需要做少許微調(diào),就是仝鍵說的那5%由自己動手完成的代碼。因為思路正確的情況下,ChatGPT給出的代碼一般都相當(dāng)準(zhǔn)確。有一些不夠準(zhǔn)確的細(xì)節(jié),與其費(fèi)勁去命令它糾正,不如自己順手改了。
Q:文中的“但邏輯上可以做到的事情,最終一定會發(fā)生”這句話也是AI寫的嗎?您認(rèn)同它描述的情況“一定會發(fā)生”嗎?
仝鍵:這句話就類似于前面說的那5%人工輸入的部分,是我們加入了自己的主觀判斷。有趣的是,ChatGPT似乎并不完全認(rèn)同我們的主觀判斷。加完這句話之后我們也問了他怎么看這句話所表達(dá)的觀點,它說:“作為一名人工智能,我認(rèn)為這個問題需要考慮多個因素,包括政治、經(jīng)濟(jì)、技術(shù)和文化等方面的影響。雖然技術(shù)上可能實現(xiàn),但實際情況可能會受到其他因素的制約?!?/p>
熊節(jié):也許最后事實會證明,我們就不應(yīng)該畫蛇添足去加入自己的主觀判斷,或許AI的判斷比我們更準(zhǔn)確。
Q:您認(rèn)為用這種新方式,是否有助于彌補(bǔ)我們在軟件工程能力方面的不足?
仝鍵:我認(rèn)為一定程度上是有可能的。正如我們在文中所說,它使我們能以一種既科學(xué)、又不需要長期訓(xùn)練就能獲得的能力來生產(chǎn)軟件。工業(yè)化也是符合這個范式的,它使得更廣泛的人群以一種高效高質(zhì)量的方式參與進(jìn)了社會大生產(chǎn)。而軟件工程之前雖然一直被叫做工程,但是業(yè)界的一個普遍共識是:軟件工業(yè)與其說是現(xiàn)代化的工業(yè),倒是更像手工業(yè)。我們認(rèn)為,ChatGPT這類AI 有可能極大地降低從業(yè)者進(jìn)行高質(zhì)量生產(chǎn)的門檻,從而真正將工業(yè)化帶到軟件開發(fā)領(lǐng)域。
Q:用引導(dǎo)式提問的方式完成這篇文章,在工作量上與正常寫作相比,如何?
仝鍵:這個文章從開始寫到完成只花了3個小時,雖然我們之前的討論已經(jīng)有了一些輸入了。工作量上要輕很多,以我個人的體驗效率提升了可能10倍不止。平時我寫一篇文章大概要一周,因為主要是業(yè)余碼字,加上靈感缺失、行文上的卡殼都導(dǎo)致時間拖長。雖然我們對最后的成文質(zhì)量還不是特別滿意,但是考慮到它的效率,這種程度的質(zhì)量也是可以接受的。我們都開始考慮要不要做個業(yè)余但日更的寫手,挑戰(zhàn)一下羅振宇、波士頓圓臉的生活節(jié)奏。
Q:您認(rèn)為以這樣的形式完成這篇文章,有什么樣的意義?
仝鍵:雖然可能有點勉強(qiáng),我覺得有點像當(dāng)年馬車與蒸汽機(jī)車賽跑的意義。知識工作者的工業(yè)化浪潮來臨了,每個人只有不斷奔跑才可能安全上岸。我們在交流這一波AI浪潮的時候,總會有人想探討AI會不會產(chǎn)生智能。而我的態(tài)度是,我現(xiàn)在就像站在泰坦尼克號船頭的一個人,看到了一座巨大的冰山向我撞來,這一刻我想的是怎么逃生上岸。我不關(guān)心那個冰山會不會產(chǎn)生智能。無論它產(chǎn)不產(chǎn)生智能,灰犀牛已經(jīng)出現(xiàn),沒有誰可以逃避。雖然我們可以說人有人的用途,我也相信這最終會成為社會共識,但我更關(guān)心走向這個社會共識的過程。
Q:在《流浪地球2》中550在短時間內(nèi)就完成了對一系列設(shè)備的重新編程,大語言模型在編程上的應(yīng)用是否有助于實現(xiàn)上述“科幻”?對于彌補(bǔ)現(xiàn)實中中國工業(yè)軟件的短板,實現(xiàn)萬物互聯(lián),是否有實際意義?
仝鍵:550的一個情節(jié)對于我們還是有一定的啟發(fā)的。作為常年從事軟件開發(fā)的從業(yè)人員,當(dāng)電影演到500C接入那個情節(jié)的時候,我下意識的反應(yīng)就是,那么多的爛代碼,你處理的過來嗎?結(jié)果550C說,“生成底層操作系統(tǒng)”。那一刻對我還是比較震撼的。對呀,可以完全重寫啊,維護(hù)什么舊代碼?所以也激發(fā)了我后續(xù)去思考以結(jié)構(gòu)化的重寫來替代重構(gòu)的開發(fā)方法。所以從我個人角度來講,我是很有信心的。這種顛覆性的生產(chǎn)方式對于我們彌補(bǔ)工業(yè)軟件的短板是有實際意義的。
而且,根據(jù)我的體驗,我感覺越是這類系統(tǒng)軟件、領(lǐng)域軟件,AI能發(fā)揮的威力越大。因為受制于算力限制,它現(xiàn)在適合處理需求描述相對簡單且結(jié)構(gòu)化、而實現(xiàn)相對復(fù)雜的場景,而這恰恰是系統(tǒng)軟件的特征。相反企業(yè)里的業(yè)務(wù)軟件,往往是需求描述復(fù)雜且模糊,實現(xiàn)反而相對簡單,這點上反而是AI的弱項。但是這個弱項也是暫時的,我相信隨著發(fā)展,這些問題也是可以被解決的。比較起來,我更擔(dān)心我們在這個強(qiáng)大的工具方面被卡脖子,那可能會造成我們在軟件生產(chǎn)方面的代差。
本文系觀察者網(wǎng)獨家稿件,文章內(nèi)容純屬作者個人觀點,不代表平臺觀點,未經(jīng)授權(quán),不得轉(zhuǎn)載,否則將追究法律責(zé)任。關(guān)注觀察者網(wǎng)微信guanchacn,每日閱讀趣味文章。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。