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