大模型驅(qū)動(dòng)軟件開(kāi)發(fā)的一些誤區(qū)和思考(大模型驅(qū)動(dòng)軟件開(kāi)發(fā)的一些誤區(qū)和思考問(wèn)題)
【導(dǎo)讀】
隨著大模型能力迭代迅猛,AI 賦能軟件研發(fā)工具層出不窮,軟件開(kāi)發(fā)在大模型時(shí)代將面臨哪些機(jī)會(huì)和挑戰(zhàn)?當(dāng) AI 能夠?qū)懘a、改 Bug 之時(shí),專(zhuān)業(yè)程序員的核心競(jìng)爭(zhēng)力在哪里?在 SDCon 2024 全球軟件研發(fā)技術(shù)大會(huì)上,CSDN 高級(jí)副總裁、Boolan 首席技術(shù)專(zhuān)家李建忠發(fā)表《軟件開(kāi)發(fā)智能化范式思考與探索》主題演講,深入揭示了其背后的本質(zhì)與關(guān)鍵。
作者 | 李建忠
責(zé)編 | Echo Tang
出品丨AI 科技大本營(yíng)(ID:rgznai100)
自從大模型吹響新一輪技術(shù)革命的號(hào)角后,整個(gè)行業(yè)各個(gè)層次都面臨大模型帶來(lái)的范式轉(zhuǎn)換。我今年在 4 月份上海舉辦的全球機(jī)器學(xué)習(xí)技術(shù)大會(huì)上演講時(shí)曾提出,大模型為計(jì)算產(chǎn)業(yè)帶來(lái)了計(jì)算范式、開(kāi)發(fā)范式、交互范式的三大范式改變。今天是軟件研發(fā)技術(shù)大會(huì),我想和大家來(lái)重點(diǎn)談?wù)勥@一年來(lái)對(duì)軟件開(kāi)發(fā)智能化范式改變的思考與探索。
我曾在去年 4 月份的全球軟件研發(fā)技術(shù)大會(huì)上提出《五級(jí)“自動(dòng)軟件開(kāi)發(fā)”參考框架》,借鑒了自動(dòng)駕駛行業(yè)的五級(jí)劃分方法,將智能化軟件開(kāi)發(fā)的水平分為 L1~L5 級(jí)。
這一參考框架也在這一年多的研發(fā)實(shí)踐、和眾多客戶(hù)合作、海內(nèi)外專(zhuān)家研討的過(guò)程中,不斷得到完善和豐富。在軟件開(kāi)發(fā)智能化的實(shí)踐和探索中,我也發(fā)現(xiàn)業(yè)界存在以下幾個(gè)比較突出的誤區(qū)。
第一個(gè)誤區(qū),GitHub Copilot 等代碼大模型工具出來(lái)之后,大家會(huì)發(fā)現(xiàn)它在日常比較簡(jiǎn)單的代碼上確實(shí)不錯(cuò),但一旦到真實(shí)的企業(yè)級(jí)項(xiàng)目里表現(xiàn)可能就沒(méi)有期望的那么好,為什么?目前的大模型主要都以 GitHub 等開(kāi)源代碼為主在訓(xùn)練。這些代碼我稱(chēng)之為結(jié)果數(shù)據(jù),是經(jīng)過(guò)編譯、運(yùn)行、以及正確性驗(yàn)證的代碼。但是它的過(guò)程數(shù)據(jù)基本沒(méi)有得到訓(xùn)練。這既不是人類(lèi)生物神經(jīng)網(wǎng)絡(luò)(ANN)學(xué)習(xí)的方式,也不是大模型這種數(shù)字神經(jīng)網(wǎng)絡(luò)(BNN)正確的學(xué)習(xí)方式。
第二個(gè)誤區(qū),目前的代碼大模型,主要基于軟件系統(tǒng)的靜態(tài)特征來(lái)進(jìn)行訓(xùn)練。但是如果我們看 ChatGPT 和 Sora 等在自然語(yǔ)言上和視覺(jué)上的訓(xùn)練,它們的表現(xiàn)顯然效果要好于代碼領(lǐng)域,為什么?其實(shí)在自然語(yǔ)言領(lǐng)域和視覺(jué)領(lǐng)域的訓(xùn)練,具有相當(dāng)?shù)膭?dòng)態(tài)性,語(yǔ)言的上下文、前因后果、故事線(xiàn),視頻的時(shí)間軸……這些動(dòng)態(tài)信息蘊(yùn)含了豐富的知識(shí)和邏輯,但軟件開(kāi)發(fā)領(lǐng)域把動(dòng)態(tài)性的特質(zhì)數(shù)據(jù)引入模型訓(xùn)練還是比較少的。
第三個(gè)誤區(qū),大模型出來(lái)之后,可以說(shuō)通過(guò)了圖靈測(cè)試,在某些方面也超過(guò)了普通人類(lèi)的水平。這很容易給我們一個(gè)希望,去追求一個(gè)一步到位一勞永逸的智能方式。我記得去年 4 月份我們?cè)谏虾Ee辦 SDCon 2023 全球軟件研發(fā)技術(shù)大會(huì)的時(shí)候,很多業(yè)界朋友都特別期待說(shuō)我能不能把我的需求一股腦地告訴大模型,大模型就能給我生成真正跑起來(lái)的項(xiàng)目?經(jīng)過(guò)一年多之后,我們?cè)絹?lái)越發(fā)現(xiàn)這是不現(xiàn)實(shí)的,我今天想講的是這個(gè)期望長(zhǎng)期來(lái)看也是不現(xiàn)實(shí)的,因?yàn)?strong>沒(méi)有一勞永逸、一步到位的智能。
第四個(gè)誤區(qū),Scaling Law 被業(yè)界奉為圭皋之后,很多人都在想去追求一個(gè)一超多能的超級(jí)智能。希望用一個(gè)超級(jí)模型,把軟件開(kāi)發(fā)項(xiàng)目中各種復(fù)雜的問(wèn)題都一股腦地解決,這個(gè)也是相當(dāng)不現(xiàn)實(shí)的。正如復(fù)雜的人類(lèi)世界不可能靠一個(gè)超人來(lái)解決,復(fù)雜的軟件領(lǐng)域也不可能靠一個(gè)超級(jí)模型來(lái)解決。
針對(duì)以上幾個(gè)誤區(qū),我想談一些實(shí)踐和探索的觀點(diǎn)和思考。
大模型出來(lái)之后,我們一部分人老是覺(jué)得上個(gè)時(shí)代的東西都應(yīng)該徹底丟掉了,大模型給我們帶來(lái)了一個(gè)全新的世界。我想強(qiáng)調(diào)的是我們?cè)谏蟼€(gè)時(shí)代積累的寶貴經(jīng)驗(yàn)和智慧,不是被廢棄了,而是被 AI 壓縮和加速了。因?yàn)檫@些經(jīng)驗(yàn)和智慧也是人類(lèi)知識(shí)的一部分。
接下來(lái)我們來(lái)看看,在大模型時(shí)代,有哪些寶貴的經(jīng)驗(yàn)和智慧可以幫助我們?cè)谲浖I(lǐng)域做得更好?我們說(shuō)軟件系統(tǒng)有四個(gè)復(fù)雜的特征,分別是:復(fù)雜性、動(dòng)態(tài)性、協(xié)作性、混沌性。
首先來(lái)看復(fù)雜性。在軟件系統(tǒng)中解決復(fù)雜性有兩個(gè)常用的手段,第一個(gè)是分解,第二個(gè)是抽象。
分解是我們?cè)诿嫦蜻^(guò)程編程中就有的一個(gè)非常有效的手段。包括后來(lái)的分層架構(gòu)、組件化設(shè)計(jì)、微服務(wù)架構(gòu)等都源自分解思想。但很快,我們發(fā)現(xiàn)光有分解是不夠的,必須使用抽象,這就發(fā)展出來(lái)面向?qū)ο蟆?span id="qsh1b7padf" class="candidate-entity-word" data-gid="2870063">泛型編程、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、概念驅(qū)動(dòng)設(shè)計(jì)等方法。如果我們看大模型,它在“分解”上做得還是不錯(cuò)的,但是在“抽象”上就有點(diǎn)差強(qiáng)人意。
就目前的大模型輔助軟件研發(fā)的能力來(lái)看,它比較擅長(zhǎng)什么?類(lèi)型實(shí)現(xiàn)、函數(shù)實(shí)現(xiàn)、算法實(shí)現(xiàn)等低抽象任務(wù);但一旦遇到設(shè)計(jì)模式、架構(gòu)設(shè)計(jì)、系統(tǒng)設(shè)計(jì)等“高抽象任務(wù)”,就發(fā)現(xiàn)它往往表現(xiàn)得不夠好。在這方面,我們的建議是要向大模型導(dǎo)入我們?cè)凇案叱橄笕蝿?wù)”方面積累的寶貴的方法論、原則和最佳實(shí)踐等。它們未必是代碼,還包括設(shè)計(jì)圖、設(shè)計(jì)文檔等。這某種程度上,也是在提升大模型“System 2”的能力。
System 1 和 System 2 是諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)得主丹尼爾·卡尼曼在《思考,快與慢》中提出的人類(lèi)的兩種思考模式。系統(tǒng)一是直覺(jué)的、快速的、無(wú)意識(shí)的,主導(dǎo)我們?nèi)粘?95%的決策。系統(tǒng)二是基于邏輯的、理性的、規(guī)劃的、緩慢的,需要高度集中注意力,主導(dǎo)我們?nèi)粘?5%的決策。System 2 的能力對(duì)于大模型在軟件開(kāi)發(fā)領(lǐng)域的“抽象能力”至關(guān)重要。
第二個(gè)部分,我想談?wù)勡浖膭?dòng)態(tài)性。所謂動(dòng)態(tài)性本質(zhì)是我們的軟件系統(tǒng)一直在動(dòng)態(tài)的演化。我們知道軟件開(kāi)發(fā)領(lǐng)域最早一直想追求 Top-down 的瀑布模型,但后來(lái)業(yè)界越來(lái)越發(fā)現(xiàn)在很多領(lǐng)域瀑布模型很難 work。究其根本,是軟件開(kāi)發(fā)過(guò)程有一個(gè)“時(shí)間”變量,軟件的需求、所處環(huán)境、開(kāi)發(fā)組織等無(wú)時(shí)無(wú)刻不在變化。
這種“動(dòng)態(tài)性”在大模型時(shí)代會(huì)改變嗎?我想大概率不會(huì)。所以我們也不能追求一步到位的智能軟件開(kāi)發(fā)。
演化是智能的本質(zhì)特點(diǎn)。智能從來(lái)都不是一步到位的,智能就是在迭代試錯(cuò)反復(fù)中不斷成長(zhǎng)的。我認(rèn)為在大模型時(shí)代,敏捷軟件開(kāi)發(fā)并不會(huì)被丟棄,而是從“組織的敏捷”變?yōu)椤澳P偷拿艚荨?/strong>,而且會(huì)加速敏捷。在敏捷開(kāi)發(fā)之前,軟件開(kāi)發(fā)的周期是以年為單位迭代,比如 Windows 95、Windows 98。在敏捷開(kāi)發(fā)之后,軟件行業(yè)進(jìn)入以月為單位迭代或者以周為單位迭代。在大模型時(shí)代,軟件開(kāi)發(fā)將進(jìn)入以天或者小時(shí)為單位進(jìn)行迭代。
除了提升迭代速度外,我們也需要對(duì)更多的軟件開(kāi)發(fā)過(guò)程數(shù)據(jù)進(jìn)行訓(xùn)練,來(lái)幫助模型更好地理解軟件開(kāi)發(fā)的“動(dòng)態(tài)性”。這里可以參考一下 Google 最近發(fā)布 DIDACT(Dynamic Integrated Developer ACTivity 動(dòng)態(tài)集成開(kāi)發(fā)者活動(dòng))。
參考鏈接:
https://research.google/blog/large-sequence-models-for-software-development-activities/
從根本上來(lái)說(shuō),軟件開(kāi)發(fā)并非孤立的過(guò)程,而是在人類(lèi)開(kāi)發(fā)者、代碼審查者、錯(cuò)誤報(bào)告者、軟件架構(gòu)師和工具(如編譯器、單元測(cè)試、代碼檢查工具和靜態(tài)分析器等)之間進(jìn)行的對(duì)話(huà)。DIDACT 使用軟件開(kāi)發(fā)過(guò)程作為訓(xùn)練數(shù)據(jù)來(lái)源,而不僅是最終的完成代碼。通過(guò)讓模型接觸開(kāi)發(fā)者在工作中看到的上下文,結(jié)合他們的響應(yīng)行為,模型可以學(xué)習(xí)軟件開(kāi)發(fā)的動(dòng)態(tài)性。
Google DIDACT 的研發(fā)也發(fā)現(xiàn)在學(xué)習(xí)過(guò)程數(shù)據(jù)之后,模型生成軟件項(xiàng)目的過(guò)程,非常類(lèi)似人類(lèi)開(kāi)發(fā)團(tuán)隊(duì),先編寫(xiě)比較粗粒度的接口和框架代碼,然后一點(diǎn)一點(diǎn)把它們細(xì)化實(shí)現(xiàn),包括也有反復(fù)和試錯(cuò)的過(guò)程。而不是大家最開(kāi)始想象的那種從上到下一行一行寫(xiě)的過(guò)程,整個(gè)項(xiàng)目一氣呵成。真實(shí)的軟件開(kāi)發(fā)不是這樣,人類(lèi)開(kāi)發(fā)團(tuán)隊(duì)不是這樣,大模型驅(qū)動(dòng)的智能軟件開(kāi)發(fā)也不會(huì)是這樣。
接下來(lái)我想談?wù)劶軜?gòu)設(shè)計(jì)領(lǐng)域的協(xié)作性。我們知道當(dāng)軟件系統(tǒng)越來(lái)越復(fù)雜時(shí),組件與組件之間的協(xié)作,服務(wù)與服務(wù)之間的協(xié)作,會(huì)變成非常重要的課題。早在 1967 年計(jì)算機(jī)科學(xué)家 Melvin Conway 就提出了著名的“康威定律”。
康威定律指出“組織的協(xié)作溝通架構(gòu),決定了我們的系統(tǒng)設(shè)計(jì)架構(gòu)”,這在架構(gòu)設(shè)計(jì)領(lǐng)域被奉為第一定律。那么在大模型時(shí)代,軟件內(nèi)部需不需要協(xié)作?顯然是需要的,我們?nèi)匀恍枰S許多多的組件或服務(wù)進(jìn)行協(xié)作。只是這時(shí)候的組件或服務(wù)的構(gòu)建者,不見(jiàn)得是軟件團(tuán)隊(duì),而是一個(gè)一個(gè)智能體(Agent)。那么這些智能體之間當(dāng)然也需要協(xié)作。它們的協(xié)作也要遵循康威定律。我稱(chēng)之為“智能康威定律”:智能體的協(xié)作溝通架構(gòu),決定系統(tǒng)設(shè)計(jì)架構(gòu)。
我們?cè)賮?lái)談一下軟件開(kāi)發(fā)中的工具,來(lái)實(shí)現(xiàn)在所謂混沌系統(tǒng)中尋求確定性的部分。我們知道現(xiàn)在大模型很多時(shí)候做的是一些非確定性的計(jì)算(或者叫概率性計(jì)算),但這并不意味著我們所有的任務(wù)都要用非確定性計(jì)算。我們?cè)诖竽P椭胺e累了很多確定性計(jì)算的工具,它們?cè)诖竽P蜁r(shí)代也不會(huì)被丟棄,而是與大模型進(jìn)行很好的融合。融合方式就是通過(guò) Agent(工具)來(lái)實(shí)現(xiàn)工具調(diào)用。
簡(jiǎn)單總結(jié)一下。針對(duì)前面提到的軟件系統(tǒng)的四大特性:復(fù)雜性、動(dòng)態(tài)性、協(xié)作性、混沌性,在大模型時(shí)代智能軟件開(kāi)發(fā)范式下,我們需要特別關(guān)注以下四大核心能力建設(shè):
第一個(gè)抽象能力:怎么訓(xùn)練、怎么提升大模型的抽象能力,也就是 System 2 的能力,是一個(gè)很重要的課題。
第二個(gè)演化能力:如何支持大模型在整個(gè)軟件開(kāi)發(fā)過(guò)程中加速我們的迭代周期,它不僅能快速發(fā)布高質(zhì)量的軟件,同時(shí)對(duì)模型能力也是一個(gè)快速的提升。
第三個(gè)協(xié)作能力:我們需要仔細(xì)設(shè)計(jì)智能體的協(xié)作架構(gòu),來(lái)支持我們的系統(tǒng)設(shè)計(jì)架構(gòu)。
第四個(gè)工具能力:使用工具來(lái)解決混沌系統(tǒng)中的確定性問(wèn)題。
最后我想談一下,提升軟件開(kāi)發(fā)的智能化水平是一個(gè)系統(tǒng)工程,前面講的這四大核心能力,它背后需要很多基礎(chǔ)建設(shè),包括模型方面的建設(shè)和數(shù)據(jù)方面的建設(shè)。我列了 10 個(gè)主要的方面:
第一:擴(kuò)展定律。Scaling Law 并沒(méi)有停止,仍然在發(fā)揮著重要作用,這個(gè)是我們對(duì)基礎(chǔ)模型方面繼續(xù)要期待的。
第二:提高上下文窗口。上下文窗口是大模型的“內(nèi)存”,它對(duì)最大化發(fā)揮模型能力有著關(guān)鍵影響。這一塊國(guó)內(nèi)外都進(jìn)展飛速。
第三:長(zhǎng)期記憶能力。大型軟件項(xiàng)目蘊(yùn)含的信息量浩瀚紛繁,大模型的長(zhǎng)期記憶也很重要,雖然有 RAG 等外部檢索技術(shù)的快速發(fā)展,但基礎(chǔ)架構(gòu)方面的創(chuàng)新也值得期待。
第四:System 2 的提升。目前的大模型普遍被認(rèn)為是一個(gè)高中生的水平。如何提升大模型系統(tǒng) 2 的能力,關(guān)系到大模型是否能夠成為一個(gè)深思熟慮的專(zhuān)家級(jí)學(xué)者,從而來(lái)勝任軟件開(kāi)發(fā)這樣具有較高智慧要求的工作。
第五:降低模型幻覺(jué)。降低模型幻覺(jué)仍然是業(yè)界需要克服的一個(gè)問(wèn)題,雖然我們也不要期望徹底消除幻覺(jué)。某種程度上可以說(shuō),幻覺(jué)也是智能的一部分,如果沒(méi)有幻覺(jué),智能也將失去創(chuàng)造力。
第六:研發(fā)全流程數(shù)字化。如何把研發(fā)流程里盡可能多的開(kāi)發(fā)者活動(dòng)按時(shí)間順序記錄下來(lái),比如:文檔、設(shè)計(jì)圖、代碼、測(cè)試代碼、運(yùn)維腳本、會(huì)議記錄、甚至設(shè)計(jì)決策中的爭(zhēng)論等等各種數(shù)據(jù),然后變成數(shù)字化的語(yǔ)料,喂給我們的大模型。
第七:多模態(tài)數(shù)據(jù)訓(xùn)練。軟件開(kāi)發(fā)領(lǐng)域不只是代碼和文本,還有很多設(shè)計(jì)圖比如 UML、表格、甚至視頻等數(shù)據(jù)。
第八:將模型做“小”。軟件開(kāi)發(fā)中很多細(xì)分任務(wù)都不見(jiàn)得需要所謂的“大模型”,而是在高質(zhì)量垂類(lèi)數(shù)據(jù)訓(xùn)練下的“小模型”,比如 Bug 修復(fù),比如開(kāi)發(fā)者測(cè)試,比如 Clean Code。
第九:模型合成數(shù)據(jù)。通過(guò)模型生成代碼、設(shè)計(jì)、注釋等,作為語(yǔ)料供給另外的模型進(jìn)行訓(xùn)練,也是在軟件開(kāi)發(fā)中一個(gè)非?;钴S的發(fā)展方向。
第十:多智能體協(xié)同。針對(duì)復(fù)雜的軟件工程任務(wù),未來(lái)一定是眾多不同角色、不同模型、不同任務(wù)的智能體的群策群力。
最后,軟件開(kāi)發(fā)智能化范式轉(zhuǎn)換的大幕才剛剛開(kāi)啟,中間還有很多曲折等待我們?nèi)ヌ剿?,希望今天的分享能給大家?guī)?lái)啟發(fā),謝謝大家!
同時(shí)和所有開(kāi)發(fā)者朋友們預(yù)告,CSDN 聯(lián)合高端 IT 教育平臺(tái) Boolan 將于 2024 年下半年舉辦四大主題會(huì)議,歡迎大家掃碼熱情參與~
封面圖由 Meta AI 生成