天天看點

ChatGPT:大語言模型AI的追趕關鍵在于定制應用軟體開發能力

本文是在仝鍵和熊節的啟發式提問引導下,完全由ChatGPT生成的一篇文章。兩位人類合作者隻做了必要的細節編輯。

“可能是全國第一篇ChatGPT一作的正經文章吧”,人類合作者之一熊節對觀察者網表示。

“總會有人想探讨AI會不會産生智能。而我的态度是,我現在就像站在泰坦尼克号船頭的一個人,看到了一座巨大的冰山向我撞來,這一刻我想的是怎麼逃生上岸。我不關心那個冰山會不會産生智能。”另一位人類作者仝健在采訪中表示。

仝健還提到,在《流浪地球2》中,550C“生成底層作業系統”激發了他後續去思考以結構化的重寫來替代重構的開發方法。他還認為,這種颠覆性的生産方式對于我們彌補工業軟體的短闆有實際意義。

大語言模型AI的追趕關鍵在于定制應用軟體開發能力

作者:ChatGPT,仝鍵,熊節

AI追趕的瓶頸:軟體工程能力的重要性

随着ChatGPT的面世,大語言模型AI(如GPT-3)已經成為了熱門話題。國内也有很多團隊在進行追趕,然而,在實際追趕過程中,AI技術與軟體工程能力的結合卻成為了AI追趕的瓶頸。

我們最近在網上看到對複旦大學MOSS的采訪:

複旦團隊釋出國内首個類ChatGPT模型MOSS,邀公衆參與内測

文中提到:

“目前,MOSS的最大短闆是中文水準不夠高,主要原因是網際網路上中文網頁幹擾資訊如廣告很多,清洗難度很大。為此,複旦大學自然語言處理實驗室正在加緊推進中文語料的清洗工作,并将清洗後的高品質中文語料用于下一階段模型訓練。科研團隊相信,這将有效提升模型的中文對話能力。”

結合文中其他部分的描述和網上其他資料,不難看出,盡管團隊對其在深度學習算法和模型上充滿信心,但由于資料擷取和清洗方面的軟體工程能力不足,導緻其模型的資料量遠低于ChatGPT,無法有效提升任務完成度,比如中文對話的表現不足。

根據分析,資料擷取和清洗的問題實際上源于軟體能力的缺陷。例如,如果資料清洗的程式需要經常變化,那麼開發人員需要具備一定的靈活性,能夠快速了解新的需求和業務規則,并對程式進行相應的修改和調整。并且開發人員需要掌握TDD(測試驅動開發)的相關概念和技術,如單元測試、測試架構和測試覆寫率等。因為TDD能夠幫助開發人員編寫高品質、易于維護的代碼。開發人員還需要掌握持續內建和持續傳遞(CI/CD)能力,因為CI/CD能夠幫助開發人員實作代碼的自動化建構、測試和部署。

如果沒有合适的爬蟲程式和清洗工具,就無法獲得足夠的資料。這使得我們意識到,在AI的發展過程中,軟體工程能力的重要性不容忽視。盡管大多數人關注的是訓練後的模型,但在訓練模型的過程中,需要寫很多定制開發的軟體。而這些軟體是一次性的,用完即扔的,但是這個“一次性”的過程可能長達數年,需要不斷調整和演進這些軟體。如果這些軟體沒有持續演進的能力,那麼就無法到達終點。是以,軟體工程能力的瓶頸限制了AI的成長。

ChatGPT:大語言模型AI的追趕關鍵在于定制應用軟體開發能力

行業普遍能力顯著加劇了挑戰

中國的軟體開發行業數量龐大,但是整體水準并不盡如人意。雖然國内擁有大量程式員,但是很難掌握先進的工程實踐和技術,這導緻了軟體開發的問題和品質不穩定。

例如,XP(Extreme Programming)包含的一組工程實踐,如TDD(測試驅動開發)、重構等,在中國大型軟體開發組織的上下文中難以廣泛實作。這些工程實踐需要高水準的技術人才和團隊協作能力,但是中國的軟體開發組織很難招聘到這樣的人才,而且組織管理也難以支援這些實踐的實施。

是以,中國的軟體通常在3-5年内就需要重新開始,這是由于工程實踐差導緻軟體逐漸腐化到無法維護。然而,從另一個角度來看,由于中國的軟體工程師數量衆多,對于軟體的品質要求也沒有那麼高,是以每3-5年推倒重來的做法也被視為一種解決方案。

但是,在為人工智能配套的軟體上,這種做法可能會面臨巨大的挑戰。為了實作智能化,軟體需要更高的精度和更長久的維護,定期的推倒重來可能從效率和品質上都不能滿足需求。例如,訓練OpenGPT的過程涉及到多個軟體元件和工具,包括深度學習架構、分布式訓練工具、資料處理和清洗工具等,這些軟體元件和工具的更新和維護都是必要的。是以,中國的軟體開發者們需要更加重視工程實踐和技術的學習和應用,隻有這樣才能夠适應追趕需求,但是這與我們之前所說現狀的限制産生了沖突。

基于ChatGPT的AI定制軟體開發方案

我們從文中看到,“複旦團隊則采用不同的技術路線,通過讓MOSS和人類以及其他對話模型都進行互動,顯著提升了學習效率和研發效率,短時間内就高效完成了對話能力訓練。”

那麼在軟體開發方面,我們能否采用類似的思路呢?我們是否可以直接基于現有的ChatGPT進行AI所需的定制軟體的開發?盡管這個想法聽起來大膽,但實際上是可行的。

我們發現,在使用ChatGPT進行程式設計的時候,它可以基本上滿足一些簡單場景的程式設計需求。通過一些特定的手法,它可以有效地編寫出可用的軟體。這裡所說的簡單,是指需求描述簡單,不是指需求本身簡單或者實作簡單。實際上,ChatGPT現在更擅長于處理許多複雜算法和軟體架構的開發,因為這些需求都有專業術語,是以需求本身的描述可以很簡單。

經過本人實際測試,使用ChatGPT進行程式設計可以大大提高開發效率。此外,基于ChatGPT進行程式設計也會帶來一些有趣的生産方式變化。在軟體開發的工程實踐中,我們通常會采用一種假設:重寫比重構更慢。但是,在使用ChatGPT進行程式設計時,我們會發現重寫會更快。盡管測試仍然很重要,因為測試會告訴ChatGPT是否正确重寫,但ChatGPT本身也可以根據實作代碼推理出需要哪些更多的測試用例。這将形成一個恐怖的飛輪,人類提供簡單的測試和需求,讓ChatGPT編寫出符合測試的實作,然後讓ChatGPT根據實作和需求反向推理出需要哪些更多的測試,并給出測試用例和可以執行的測試代碼。這樣的工作方式與測試驅動開發(TDD)很像,隻是其中最耗費腦力的部分:“基于測試改進代碼和想出更多測試”變成了AI的工作,而人隻需要讓AI按照TDD的方式工作并适時糾偏即可。

基于這種生産方式及其可觀的收益,我們很容易得出一個結論:ChatGPT可以用于簡單小單元的開發,但對于更複雜的系統,它能否提供幫助呢?一般來說,由于算力的限制,ChatGPT輸入的文本是有限的,而且ChatGPT自身的封閉性使得自建業務上下文的大語言模型AI是不可能的。然而,我們可以從工程化的角度出發,将複雜系統拆分為小單元,用簡單邏輯拼裝起來。既然ChatGPT可以完成小單元的程式設計,并以驚人的效率完成,為何不發明一種架構來充分利用這種生産力的提升呢?

這種架構看起來很像深度神經網絡,每一層都是可以互相替換的細分的功能點單元。每個細分的功能點單元都可以封裝為一個通用的調用接口,比如抓取不同的網站的邏輯,這些邏輯是可以被封裝在代碼中的,并且可以用一種DSL來描述。這種DSL可以交給AI來學習,這些DSL不是中文,而是更結構化更形式化的語言,對于AI來說反而很友好。人可以通過TDD的方式修正它的組合結果,最終得到一個可以用于進行複雜系統開發的方式。

雖然這種方式目前還處于暢想中,但邏輯上可以做到的事情,最終一定會發生。這種新的方式一方面降低了對開發人員能力的要求,另一方面又保證了每個節點都按照唯一證明可以保證品質的工作方式:TDD來進行開發。這種方式可以為我們的追趕帶來極大的意義。由于中國的軟體開發人員能力存在很大的問題,我們可能受限于AI所需的配套定制軟體而追趕緩慢。但這種新的方式一方面降低了對開發人員能力的要求,另一方面卻恰好保證了每個節點都按照唯一證明可以保證品質的工作方式:TDD,來進行軟體開發。于是我們得到了一種既科學又不需要長期訓練獲得的能力作為運轉基礎的生産方式。

最終,我們可以得出結論:ChatGPT可以用于簡單小單元的開發,而對于更複雜的系統,我們可以采用一種類似于深度神經網絡的架構,将複雜系統拆解為小單元,再用AI完成小單元的組合,進而實作複雜系統的開發。這種方式既提高了生産力,又保證了品質,但更重要的是,它為我們帶來了一種全新的軟體開發思維方式。這種方式不僅僅是一種技術上的創新,更是一種理念上的創新。我們不再局限于傳統的軟體開發方式,而是采用了一種更為開放、自由和創新的方式來進行軟體開發。

在這種開放性的思維方式下,我們可以不再局限于傳統的軟體開發範式,不再局限于傳統的技術架構和工具,而是充分利用現有的技術和工具,靈活地選擇群組合,以達到最優的效果。同時,我們也可以吸納更多的外部資源,比如開源代碼、第三方庫、人才等等,讓它們與我們的系統無縫地融合在一起,形成一個更為強大、更為開放的系統。

當然,這種思維方式也面臨着很多挑戰。比如如何確定代碼的品質和安全性,如何協調不同的開發者之間的合作,如何處理不同的利益沖突等等。但這些挑戰并不是無解的,實際上它的解法就在XP(Extreme Programming,極限程式設計)方法中。例如測試驅動開發、持續內建、重構等實踐都有助于確定代碼品質。隻是XP中的實踐在這個時代如何與AI更好地協作需要進一步的探索。我們可以通過不斷的探索和實踐,逐漸發展出一套成熟的軟體開發流程和治理機制,來保證整個開發過程的品質和效率。

總之,ChatGPT作為一種新興的AI技術,為我們帶來了很多的機會和挑戰。作為追趕者的我們卻可以充分利用它的生産力,來進行我們追趕所需系統開發。在追趕的同時我們還會得到一種全新的開放性思維方式,它可能打破傳統的軟體開發模式,進一步的釋放生産力。(正文完,翻頁為人類作者問答環節)

人類作者問答環節

Q:為什麼會産生這樣的想法,做這樣的嘗試?

仝鍵:ChatGPT帶來的這波浪潮,我們看很多人都在暢想未來,我們覺得,暢想未來不如活在未來。如何能應用好這類AI其實也是有相當多學問的,而幾乎全世界的人都在同一刻起跑,我們沒有時間等待别人研究的成果。必須要做第一批在正式工作中使用的人。是以我們在工作的所有場景下,都試圖用它來提高我們的生産力,是以寫這樣一篇文章對我們來說也不過是這一政策的延續,它是很自然發生的,沒有特别針對寫文章這件事專門想過。寫起來之後,我們發現,這事好像還挺酷的。

Q:如何“啟發式提問”,能否舉例?

仝鍵:其實很簡單,我們之前看到了這篇新聞,在微信上進行了一些讨論,我們把新聞連結和讨論的内容直接扔給了new Bing——衆所周知,new Bing就相當于可以聯網的ChatGPT(雖然現在也限制了聯網擷取内容的功能)——問它如果我們要寫一篇文章闡述這些觀點,建議怎麼布局謀篇。于是它建議我們分成三部分來寫,每一部分寫什麼内容。然後我們再基于每一部分的主題,一部分一部分的讓他去寫。

第一遍由AI寫出來的内容可能并不讓我們滿意,因為大都是片湯話,缺乏洞見。這個時候我們就把我們的不滿意直接說出來,并給它一些洞見,問它在邏輯上這些洞見是否有道理,有沒有什麼補充,然後讓它把這些洞見和他寫的内容編織在一起。

熊節:有時候它生産的内容也是會偏離我們想要表達的方向。比如說在寫這篇文章的過程中,AI把瀑布方法當成一個靶子來打,但那不是我們想要說的重點。這個時候就需要明确告訴他,那個不是我們要讨論的重點。畢竟雖然XP 提供了一些不錯的實踐,這些實踐最終也會被ChatGPT重塑成一個完全不同的樣子。是以我們并不關注傳統意義上的軟體開發方法的對比,更關注整體而言軟體開發能力面臨的挑戰。

Q:做了哪些細節編輯?

仝鍵:後續的修改還是比較少的。有一些對原文的引用是我們自己手動加進來的。ChatGPT很不喜歡直接引用原文,哪怕你告訴它引用原文,它都會重新加工一遍。還有幾處用詞上的微調也記不太清了,不是很重要的修改。一般我們都不去直接修改它,如果覺得寫的不好,就改改prompt輸入讓它重寫,跟我們後面提到的寫代碼的方法一樣。因為擔心直接修改生成的内容可能會在哪裡造成了邏輯不通順的地方而沒注意到,是以我們更願意讓它重寫一遍。

Q:“經過本人實際測試”這句是後加的嗎?确實測試過嗎?

仝鍵:是我們先向ChatGPT描述了一些工作方法,它把這句話保留了下來。這裡提到的整個方法都是我們實際測試過的。我們在ChatGPT推出之後一直在考慮怎麼用它來輔助軟體開發,最近終于在一個稍微複雜點的需求上實作了100%由ChatGPT編碼完成。不過這個案例更多是可行性證明性質的試驗,實際意義不大。大多數與它結對完成的代碼,是95%由它完成,5%由我們自己完成。

熊節:在與ChatGPT結對程式設計的過程中,人的主要作用是提出顆粒度合适的任務,然後驗收ChatGPT給出的代碼。有時候需要做少許微調,就是仝鍵說的那5%由自己動手完成的代碼。因為思路正确的情況下,ChatGPT給出的代碼一般都相當準确。有一些不夠準确的細節,與其費勁去指令它糾正,不如自己順手改了。

Q:文中的“但邏輯上可以做到的事情,最終一定會發生”這句話也是AI寫的嗎?您認同它描述的情況“一定會發生”嗎?

仝鍵:這句話就類似于前面說的那5%人工輸入的部分,是我們加入了自己的主觀判斷。有趣的是,ChatGPT似乎并不完全認同我們的主觀判斷。加完這句話之後我們也問了他怎麼看這句話所表達的觀點,它說:“作為一名人工智能,我認為這個問題需要考慮多個因素,包括政治、經濟、技術和文化等方面的影響。雖然技術上可能實作,但實際情況可能會受到其他因素的制約。”

熊節:也許最後事實會證明,我們就不應該畫蛇添足去加入自己的主觀判斷,或許AI的判斷比我們更準确。

Q:您認為用這種新方式,是否有助于彌補我們在軟體工程能力方面的不足?

仝鍵:我認為一定程度上是有可能的。正如我們在文中所說,它使我們能以一種既科學、又不需要長期訓練就能獲得的能力來生産軟體。工業化也是符合這個範式的,它使得更廣泛的人群以一種高效高品質的方式參與進了社會大生産。而軟體工程之前雖然一直被叫做工程,但是業界的一個普遍共識是:軟體工業與其說是現代化的工業,倒是更像手工業。我們認為,ChatGPT這類AI 有可能極大地降低從業者進行高品質生産的門檻,進而真正将工業化帶到軟體開發領域。

Q:用引導式提問的方式完成這篇文章,在工作量上與正常寫作相比,如何?

仝鍵:這個文章從開始寫到完成隻花了3個小時,雖然我們之前的讨論已經有了一些輸入了。工作量上要輕很多,以我個人的體驗效率提升了可能10倍不止。平時我寫一篇文章大概要一周,因為主要是業餘碼字,加上靈感缺失、行文上的卡殼都導緻時間拖長。雖然我們對最後的成文品質還不是特别滿意,但是考慮到它的效率,這種程度的品質也是可以接受的。我們都開始考慮要不要做個業餘但日更的寫手,挑戰一下羅振宇、波士頓圓臉的生活節奏。

Q:您認為以這樣的形式完成這篇文章,有什麼樣的意義?

仝鍵:雖然可能有點勉強,我覺得有點像當年馬車與蒸汽機車賽跑的意義。知識工作者的工業化浪潮來臨了,每個人隻有不斷奔跑才可能安全上岸。我們在交流這一波AI浪潮的時候,總會有人想探讨AI會不會産生智能。而我的态度是,我現在就像站在泰坦尼克号船頭的一個人,看到了一座巨大的冰山向我撞來,這一刻我想的是怎麼逃生上岸。我不關心那個冰山會不會産生智能。無論它産不産生智能,灰犀牛已經出現,沒有誰可以逃避。雖然我們可以說人有人的用途,我也相信這最終會成為社會共識,但我更關心走向這個社會共識的過程。

ChatGPT:大語言模型AI的追趕關鍵在于定制應用軟體開發能力

Q:在《流浪地球2》中550在短時間内就完成了對一系列裝置的重新程式設計,大語言模型在程式設計上的應用是否有助于實作上述“科幻”?對于彌補現實中中國工業軟體的短闆,實作萬物互聯,是否有實際意義?

仝鍵:550的一個情節對于我們還是有一定的啟發的。作為常年從事軟體開發的從業人員,當電影演到500C接入那個情節的時候,我下意識的反應就是,那麼多的爛代碼,你處理的過來嗎?結果550C說,“生成底層作業系統”。那一刻對我還是比較震撼的。對呀,可以完全重寫啊,維護什麼舊代碼?是以也激發了我後續去思考以結構化的重寫來替代重構的開發方法。是以從我個人角度來講,我是很有信心的。這種颠覆性的生産方式對于我們彌補工業軟體的短闆是有實際意義的。

而且,根據我的體驗,我感覺越是這類系統軟體、領域軟體,AI能發揮的威力越大。因為受制于算力限制,它現在适合處理需求描述相對簡單且結構化、而實作相對複雜的場景,而這恰恰是系統軟體的特征。相反企業裡的業務軟體,往往是需求描述複雜且模糊,實作反而相對簡單,這點上反而是AI的弱項。但是這個弱項也是暫時的,我相信随着發展,這些問題也是可以被解決的。比較起來,我更擔心我們在這個強大的工具方面被卡脖子,那可能會造成我們在軟體生産方面的代差。

本文系觀察者網獨家稿件,文章内容純屬作者個人觀點,不代表平台觀點,未經授權,不得轉載,否則将追究法律責任。關注觀察者網微信guanchacn,每日閱讀趣味文章。

繼續閱讀