分享嘉賓 | 郝逸洋,李鐘麒
整理 | 朱珂欣
出品 | CSDN(ID:CSDNnews)
近些年來,隨著AI等前沿技術的推陳出新及各場景中的應用,讓更多的人觸達AI時代的科技前沿。AI編程作為AI的子領域,如今也離普羅大眾越來越近,被大家寄予很高的期望。
在CSDN 組織的「 開談:AI編程的前世今生」直播中, 有幸邀到了 華為 CodeArts Snap代碼生成工具模型負責人李鐘麒、aiXcoder聯合創始人郝逸洋兩位AI領域的專家,共同探討在AI編程的技術獲得突破性進展時,其背后的原因。
搜索『CSDN』視頻號可查看本場直播回放,以下為對話精編:
前世:AI編程的歷史發展狀況
《開談》: AI 編程近年來的發展情況如何?有哪些關鍵的節點?
郝逸洋:我認為在深度學習火了后,關于“AI編程”的理念才慢慢出現。此前,學術界的叫法是——知識工程。由于它局限性比較強,這個概念并沒有走入大家的生產環境中。在2017年、2018年深度學習火了后,“AI for Code”的概念逐漸在學術圈被人接受,成為一個獨立的領域。
隨后,有人把自然語言處理(NLP)的技術應用在代碼上,把代碼看作一個自然語言去處理。當時我的導師李戈老師(北京大學的李戈老師)把linux的源代碼拿過去做訓練,訓練后的模型雖然不能編譯,但能寫出很像Linux源代碼的東西。
2019年時,AI技術還處于早期。隨后的一兩年間,國外一些公司對AI開始有了更多嘗試,例如以色列的Codota公司和美國的Kite公司,最初都是做代碼搜索,隨后它們也進行了公司轉型,做代碼的輔助編寫。再后來,隨著大模型逐漸活躍起來,在自然語言處理上面取得了較好的進展,OpenAI就是典型的例子。如今,大家也都紛紛的走向大模型領域。
李鐘麒:我認為有兩個關鍵的時間節點:一是2020年;二是Codex的出現。
首先,在2020年AI才逐漸真正被大家關注。尤其是利用AI編程實現可執行的、能完整理解人類意圖的代碼。
其次,是Codex的出現。Codex作為OpenAI用來支持Github Copilot的大規模預訓練模型,Codex可是非常強大的編程語言預訓練模型。Codex引起了大家的廣泛關注熱烈討論。Codex帶來了較好的用戶反饋,因而國內外許多公司相繼開始行動。
《開談》: 兩位老師都在負責AI智能編程工具,你們兩個工具的相似和不同之處在哪?
郝逸洋:相似之處,在核心功能上。例如用戶寫代碼的時候,我們可以直接在光標后補出來他可能想要的東西。
不同之處,是AI Xcoder有兩種模式:線上模式和離線模式。線上模式采用大模型,離線模式采用小模型。我們工具的差異化之處,更多的體現在一些技術細節上。延伸到用戶層面,很多差異之處其實是被抹去的。
李鐘麒:相似的地方是兩個AI編程工具均是圍繞用戶需求展開。不同之處,主要是體現在服務對象上,體現在模型結構存在差異。如果工具主要是去服務專業編程人士,他們對編碼工具的需求就會更加傾向于專業化、準確性強等。
因為在AI智能編程工具的水平上,我覺得都趨于一致。但落到產品里面,可能需要看各自產品的包裝能力、產品落地等要素,同時,每個工具服務的用戶也不同。
《開談》: 目前,主流的AI編程工具是如何實現和工作的?相似點和不同點有哪些?
郝逸洋: 我認為對于用戶感知而言,AI編程的形式上或許一樣,但內容會有差異。從技術路線上來看,我覺得可以分為三類:小模型、統計模型、線上大模型。
例如TabNine,最開始并沒有使用深度學習技術,而是用一個統計的方法建立一個統計模型,用統計模型去做預測。它的技術路線顯然側重于離線。
Kite是離線的一個深度學習模型,它的離線模式能夠把模型下載到用戶本地,無法聯網也可使用智能補全。
Copilot是在服務器上去部署一個超大規模(可能百億參數)的模型,再以網絡的方式給用戶提供一個服務。不同于其他代碼補全工具只提供最多一行的補全結果,Copilot能通過代碼上下文以及語言描述,生成整個代碼片段。
李鐘麒:對于超大規模的模型而言,為了保障準確率,多是采用線上部署或云服務的方式對外推出,因為實際上的算力需求是很難滿足。
但是,小模型、統計模型也能結合到產品中。在目前補全工具比較成熟的情況下,沒必要再通過模型去完成。但在實現長文本的補全的情況下,為了達到較高的準確率,或許仍會采用規模較大的模型。現階段大模型面臨的問題很多體現在響應時間、部署方式能否支持大量用戶訪問。
郝逸洋:雖然沒有嘗試過,但是在過去做Cortana的時候,我們會根據場景去做意圖分析。基本上是三個:聊天、天氣、交通。這三個需求可以覆蓋80%的用戶交互。
因為沒有嘗試Copilot,就暫時不做評價,但可以補充一下,語音技術的確比較成熟,但一旦遇到領域知識,就會出現瓶頸,例如一個中國程序念它的英文名字,可能發音都會有問題。
李鐘麒:我個人認為語音技術或許比較成熟,但用到代碼上仍會存在問題。就個人而言,讓模型做到語音交互,用語音寫并不能帶來特別好的場景。因為代碼對上下文的要求也是比較高的,也存在一些技術難點。
AI編程工具若真加上語音功能,那可能需要配備較好的前端設備。同時,代碼容錯率會比語音要低。因此,我認為語音編程技術性價比不高,后續優化也需要考慮是否值得投入。
今生:攻克AI編程現階段的難關
《開談》: 在做AI編程工具的過程中,是否遇見過較難解決的問題?
李鐘麒:第一,是場景上的問題。當函數生成的準確率推高時,上下文的感知能力會被削弱,這源于方案優化下導致的一些短板。同時,如何在生成信息的時候將信息都告訴AI模型,擴大它的視野。我覺得終極目標是AI編程工具能夠代替大家寫程序,目前存在非常大的挑戰。
第二,是個性化的挑戰。不同的產品線,會對應不同的公司,不同的產品,大家的寫法也存在差異,大家都不希望有重復編碼的情況出現。除此之外,還需要打消用戶對安全性的顧慮。實際上,模型的推斷是一定需要上下文輸入的。在不知道上下文的時候,公有化的部署將其做成一個公共的模型,會存在很大的安全性挑戰。
郝逸洋: 我認為難點一是:成本問題。因為目前的模型對計算資源的要求很高,在用戶多元化的情況下,如果需要一直提供免費服務,其實并不是健康的商業模式。同時,在定制化的方面,每個企業都有自己的框架,如果面對一些敏感的行業(軍工行業),采取公開的模型其實提供不了其他的幫助,定制化也會增加成本。
難點二是在企業內做私有化部署。許多企業都非常看重信息安全,企業內的代碼是不愿意上傳到我們的服務器上面。
《開談》: AI編程在什么領域更容易推進?
郝逸洋: 我認為是互聯網領域。大一點的互聯網企業有自己的AI計算中心,也有自己的機器。即便他們顯卡會千奇百怪,但我們可以想辦法去適配它。如果沒有,我們需要去走采購流程,就很麻煩。
李鐘麒:我也認為互聯網。主要還是互聯網涉及需要做編碼的用戶群體更多,可以更好地推進。不過在互聯網的公開領域,大家的能力其實都不錯,只是定制化的部分,需要更多的數據支持。
《開談》: 自GitHub Copilot推出以來,代碼版權問題就沒停止過。最近,GitHub Copilot先是被指責抄襲,后面又卷入律師訴訟,AI編程應該如何規避類似的風險問題呢?
郝逸洋:對于“有風險”這件事,我認為它跟AI編程本質沒有關系。例如:哪怕你讓一個猴子來敲鍵盤,它也能敲出一個違反其他人的知識產權的代碼,并非靠AI才能寫出來,只是AI會把問題更加凸顯,因為它是用公開的代碼去學習后,記住寫的模式再推薦給用戶。即便沒有AI,企業依然會面臨這個問題,我們稱之為開源代碼溯源。
李鐘麒:GitHub Copilot引起訴訟的原因,主要因為是用了一些不被允許使用或商用的代碼。因此,我們在避免抄襲的時候,一般會在數據上做文章,例如不將代碼放到模型里。首先,在源頭上規避這個問題。隨后,在生成的安全性上,可以在最開始的時候進行一些語料上的處理。之前Codex存在一些隱私泄漏的問題,顯然就是沒有進行預料的處理。
《開談》: 假設使用AI編程工具出現了bug ,未來是否還會接著用?
李鐘麒:有bug很正常的。實際上,現有的模型在數據方面的情況都大體趨于一致,在應用模型上也就31%的生成通過率。但是,這種問題能通過大量堆算力的方式來解決。
郝逸洋: 出現bug是較為常見的,關鍵是看如何處理。目前,論文中效果非常好的模型,都是通過生成很多個的辦法,隨后去排序和篩選,這種方式對成本是線性的提升,也能更好的滿足用戶。
《開談》: AI編程工具可以提升效率,它和無代碼、低代碼技術,有什么相似和不同嗎?
郝逸洋: 與低代碼技術,更多的是不相似之處。因為低代碼更多的是面向非程序員,例如產品經理、管理人員,他們可以通過其只定制一些辦公柜流程。AI編程工具則是面向的是專業程序員,對準確率的要求很高,是無法脫離專業的程序員去審查和修改的。
李鐘麒:寫代碼是需要邏輯性和創作性的事情,這與低代碼的方式截然不同。低代碼更多的是替代一些重復性的工作。使用AI編程工具能夠把一些看似簡單、重復的勞動抽象出來,以此在實現簡單功能的基礎上,完成一些定制化,這些對于低代碼平臺是比較困難的。
未來:AI編程的發展在何處?
《開談》: 未來AI能否真的學會寫高級代碼,取代程序員?
李鐘麒:我認為AI的智能來源是數據,而數據的創造者是人,AI更像是人類自己的程序員。關于“AI是否會取代程序員”這個話題,其實很難回答。
從AI發展的方向來看,AI可能會實現一些簡單開發、定制軟件。但目前面對相對復雜的場景,AI也還存在很多瓶頸。未來,多模態會和AI結合,并不只局限于現在NLP的方向,還會把一些diffusion model里的東西結合,還有非文本信息和文本信息的結合。如果說要發展到“高智能”的強AI時代,離現階段還比較遠。
郝逸洋: 我認為前途還是光明的。
目前,AI在生成簡單的功能方面,已經能達到50%-60%的準確率。對于復雜的功能,如果能將上下文信息更好的傳入進去,AI也能完成的很好。目前欠缺的地方是:對輸出代碼的錯誤的修正。
《開談》: 阻礙AI編程技術發展的難題是什么?未來AI編程的發展方向在何處?
李鐘麒:我認為難點是算力。隨著模型規模的提升,AI的能力也會增強,對算力的要求也變得越來越高時,這必然會面臨效率低下的問題。那么,是否能創造一些具備創造性的架構,類似transformer模型的下一代,無論是學術界還是工業界,或許都對其需求量很大。
在未來,AI編程的語義理解很重要。不能局限在生成上,如何定位問題、解決問題、程序糾偏都是需要去做的。一旦實現突破,可以在更多場景上的突破。
就自身在做的AI編程工具而言,我會更加關注準確率,在不斷地打磨之中去適配用戶的使用習慣,又根據用戶反饋進行新功能上的開發。
郝逸洋: AI編程作為AI的子領域,阻礙其發展的或許是AI本身,包括算力、架構的發展。因此,我認為AI編程會因AI技術實現突破。
關于未來的方向,我想提一下目前很少人去接觸的結構化程序生成。實際上,我們的模型就是一個結構化的模型,并非序列化的模型。但是亞馬遜、谷歌使用的方法其實都是一種序列化的文本,將代碼看做成文本去做。早前我們其實就是采取結構化程序生成的方式,但是在大模型出現后,一切都似乎回去了。
我的設想是未來編程全鏈路的智能化,目前很多模型還停留在寫代碼的階段。其實,現階段程序員大概只有10%的時間在寫代碼,剩下的時間可能在開會或者調試。調試,是非常重要的一個步驟。它不僅對于人而言存在困難,對AI也是如此。因此,我認為調試是未來AI編程的重點。
就自身在做的AI編程工具而言,我覺得需要突破的就是個性化。因為模型越大,個性化越難。尤其是對于企業代碼來說,個性化至關重要。
《開談》: 對踏足AI編程或AI領域的新開發者的建議有哪些?
郝逸洋: 我的建議有兩個。一是了解開發。開發者一定要懂代碼分析,雖然現階段很多人將代碼當文本去做,但是在輸出的信息上會面臨很多問題。只有理解程序和代碼分析,才能更好的解決問題。二是了解AI,包括大模型的訓練之類的事情。
李鐘麒:我認為先是專業知識的補足。對于新入門的開發者而言,可以通過閱讀學術論文、研究資料等方式學習AI相關的知識,幫助大家從小白逐漸成長起來。如果是具備專業基礎的學生,也可以從體驗者的角度出發,使用一些模型后了解它的“源頭”,再進一步進行研究。
以上是郝逸洋和李鐘麒兩位嘉賓對《AI編程的前世今生》的分享。他們從專業的角度出發,讓我們進一步熟悉AI編程的發展脈絡、機遇與挑戰以及發展趨勢。在未來,在新興的AI時代,讓我們拭目以待更多AI編程帶來的驚喜!