京東的AIGC革新之旅:通過JoyCoder實現研發提效 | 新程序員

【導讀從需求分析、設計編碼到測試運維,AI已經逐步滲透到軟件開發的各個環節,如何切實針對研發場景進行提效,是業內每個企業都在思考的問題。本文作者詳細分析了AI在研發中的實際應用,並分享了JoyCoder與京東內部工具結合的實際案例,展示了AIGC在提升研發效能方面的巨大潛力。

本文出自2024 全球軟件研發技術大會中的演講,同時收錄於《新程序員 008》。《新程序員 008》聚焦於大模型對軟件開發的全面支撐,囊括 Daniel Jackson 和 Daniel Povey 等研發專家的真知灼見與「AGI 技術 50 人」欄目的深度訪談內容,歡迎大家點擊訂閱年卡。

作者 | 劉興東

責編 | 鄭麗媛

出品丨新程序員編輯部

近年來大模型特別火熱,諸多公司在這一領域投入了大量的研究精力,各種基於大模型的應用場景也應運而生,涵蓋了健康、金融、教育等多個領域,當然也包括軟件行業。在這場由生成式AI技術引領的軟件行業革命中,京東也正在進行一場前所未有的AIGC革新之旅。

在這場技術驅動的變革中,京東自主研發的智能編程助手JoyCoder,成為了推動研發效率飛躍的關鍵力量。接下來,我將深入解析京東如何通過JoyCoder實現研發提效的具體實踐,以及這一過程中所展現出的技術創新。

AIGC對軟件行業的影響

自從AIGC成為熱點以來,它對整個軟件行業都產生了深遠的影響。無論是軟件的開發、測試、部署、維護還是使用方式,都在不同程度上發生了變化。例如在代碼層面,AI技術已經能夠生成軟件代碼,包括代碼審查在內的許多環節都與AIGC密切相關。同時,在軟件質量和安全性方面也因AIGC的出現,發生了相應改進。例如,自動化的單元測試以及軟件漏洞分析技術能夠幫助開發者提高效率,儘早發現並修復相關漏洞。

總體而言,AIGC在開發成本、效率和用戶體驗上都帶來了顯著提升,有助於促進行業發展——但同時,這個過程中也伴隨著一系列的風險和挑戰:

  • 使用AIGC後,如何確保其生成的內容準確可靠,成為了我們必須面對的問題。這要求我們在技能上做出相應的迭代和提升,以更好地管理和使用AIGC的輸出能力。與此同時,我們也需要提升工具的能力,以實現與內部工具的良好兼容。

  • 若過度依賴AIGC生成的內容,可能會忽視對其準確性和創造性的審查。因此,我們要不斷完善並補充自身技能,以確保在使用AIGC時能提升生產力,而不是因過度依賴而導致生產力下降。

如何借助AIGC進行研發場景提效

如上文所說,AIGC與我們最為相關的場景還是在研發領域中的應用。如圖1所示,以DevOps為例,它涵蓋了從需求開始直到產品上線和部署發佈的全過程。那麼,AIGC如何在DevOps工具中發揮生產力呢?這是整個行業都在思考和探索的問題。

圖1 研發全流程AIGC提效圖1 研發全流程AIGC提效

從需求分析開始,我們可以通過AIGC與大模型交互,使用自然語言生成需求文檔,嘗試讓大模型理解文檔內容,區分功能性需求、非功能性需求和安全性能需求。基於對需求的前期理解,大模型能夠更準確地幫助用戶定位需求,使需求文檔更加清晰,從而在需求階段和理解階段做得更為細緻。

到了系統開發階段,這是一個從準備、開發到完成直至上線的迭代過程。基於對需求的理解,AIGC可生成相關代碼文檔和代碼解釋;在開發過程中,可利用AIGC生成代碼片段,減少手動編寫的工作量;此外,編寫單元測試時常讓研發人員感到頭疼,這部分也可借助AIGC來完成,以節省大量時間和精力。在研發後期,AIGC還能幫助檢測代碼中的安全漏洞,快速定位和修復調試過程中的報錯。哪怕是幾年後的系統迭代更新,AIGC也能協助進行代碼優化工作,例如從Vue 2升級到Vue 3,或者從Java轉換到其他編程語言。

到了系統測試階段,AIGC可以根據前期對需求和代碼片段的理解,生成自動化單元測試、測試文檔和測試用例,提高測試效率和準確性。在缺陷分析時,也能更快地找到並修復缺陷。

最後在系統上線後,我們還需要考慮如何在後期提供輔助。AI Office這一概念在行業里已提出多年,如何基於系統日誌的產生來進行指標聚類,進而通過人工標註來快速識別指標是否異常,這也是AIGC可以發揮作用的地方。通過指標之間的關聯性,比如發現502報錯,不一定是前端網關問題,也可能是後端服務故障,AIGC可以幫助找到問題的具體根因。

若進一步聚焦到DevOps流程中的編程環節,AIGC也展現出了它強大的應用潛力。舉例來說,在軟件開發早期,我們常需編寫大量重覆的增刪改查(CRUD)操作和工具類代碼。面對這些重覆性高的工作,如何提升效率並避免傳統開發中的低效和錯誤,成為了亟待解決的問題。

在沒有智能代碼生成和代碼標準的情況下,開發者可能因缺乏輔助工具而編寫出錯誤代碼,同時也不易瞭解公司內部的最佳實踐或通用代碼規範。這不僅造成了信息孤島,也影響了新成員融入團隊的速度和效率。

然而,AIGC的引入為這一困境帶來了轉機。利用自然語言生成技術,AIGC能夠輔助生成相關的代碼片段,從而加速開發過程。在代碼重構、優化和合理性檢查方面,AIGC同樣能發揮重要作用。通過深度理解內部文檔和代碼庫,AIGC能在開發者編寫代碼時,迅速定位並推薦公司內部或外部的相似通用能力,有效避免重覆開發。

此外,AIGC還能根據代碼庫和上下文進行智能推理,為開發者提供代碼輔助,使編寫過程更加高效和合理。這一轉變不僅有助於提升開發效率,也能推動從傳統低效開發模式向基於AIGC的高效開發模式的轉變——在這種思考下,京東推出了基於大模型的智能編碼應用JoyCoder。

JoyCoder的產品架構與能力介紹

如圖2所示,從京東JoyCoder的產品架構圖來看,其底層服務主要分成兩個部分:大模型和行雲DevOps平台。

圖2 JoyCoder的產品架構圖2 JoyCoder的產品架構

在大模型層,主要包括JoyCoder Lite、JoyCoder Pro和JoyCoder-Base模型。其中JoyCoder Lite和JoyCoder Pro負責關於會話方面的大模型應用,JoyCoder Lite以7B的輕量級設計為用戶提供快速高效的操作體驗,JoyCoder Pro專注於提供更精準的服務。至於JoyCoder-Base,則是一個用於代碼推理的模型。

尤為值得一提的是,JoyCoder支持配置接入其他模型,即不局限於自有模型,允許接入來自不同供應商的各種大模型,如百度文心、清華智譜以及GPT等。這種開放的態度不僅豐富了JoyCoder的應用場景,也使其能夠為用戶提供更加精準和多元化的服務。

引入更多模型後,如何有效管理這些模型成為了一個挑戰。為此,我們創新性地為JoyCoder封裝了一層模型網關:在模型對接層面直接與大模型進行交互,而無需關註上層應用,以此簡化管理流程,同時確保用戶信息的安全與合規。同時,模型網關還具備用戶鑒權、涉黃涉暴信息攔截以及日誌記錄等功能,為未來的審計和內容規性檢查提供了有力支持。最後如果有相關報警,也可以通過網關來進行處理。

在兼容性方面,JoyCoder同樣表現出色,其插件已支持多系統平台(如Windows、Android、鴻蒙)以及多種編輯器和主流編程語言。此外,在代碼智能生成、人機交互和DevOps平台上,我們也進行了詳細的場景化劃分。最終,通過管理後台的用戶管理和數據統計,我們可得到用戶活躍度、採納率和調用次數,以此對大模型進行更有針對性的調整和優化,進一步提升其採納率和優化效果。

基於以上的產品架構,JoyCoder在整套研發流程(從需求、設計、編碼、測試到上線)中,幾乎每個環節都能幫助開發者提高效能:

  • 通過人機會話,能將需求描述更加標準化,幫助用戶更好地整理和明確需求。

  • 在設計階段,能通過自然語言生成對應的代碼模塊。

  • 在代碼編輯區,可以用代碼補全功能對編碼過程進行輔助,減少重覆勞動;代碼註釋功能能自動生成註釋內容,減輕開發者負擔;代碼解釋和代碼評審能讓研發人員快速理解代碼,讓新成員快速熟悉代碼,提高工作效率。

  • 在測試階段,JoyCoder能快速生成單元測試和接口文檔,減輕開發者寫單測和文檔的負擔。它還能對問題代碼提出修復建議,並將安全掃瞄和規約檢測左移到編碼階段。

當然,對於AI編碼應用來說,安全防控也是不可忽視的一環。在內容安全方面,JoyCoder能夠識別並過濾敏感詞和不良信息;在數據安全方面,它則通過大模型統一網關對上傳的數據進行嚴格把關,防止身份信息、銀行卡號等敏感信息的泄露;在安全審計方面,JoyCoder會生成安全日誌記錄,記錄輸入敏感信息的用戶標識、用戶IP、設備號和輸入的敏感詞,並提示管理員該用戶的操作涉及數據安全。

基於以上AI能力,目前京東內部已有約12,000名研發人員在使用JoyCoder,佔整體研發人員的70%。這些用戶在代碼續寫、自然語言片段生成、單元測試和推理等方面的採納率達到了30%以上。整體提效達到 20%以上,大大提升了研發效率和標準化程度

JoyCoder與京東內部工具結合的最佳實踐

然而,無論是產品架構還是能力建設,均仍屬於理論層面——AI本身如同一座孤島,要想真正發揮其作用,需要與工具進行結合併實踐。

縱觀整個開發過程,例如需求理解、編譯、構建和部署等方面,實際上都需要AI能力的下沉。於是在京東內部,我們借助JoyCoder在DevOps過程中進行了全新的能力建設。

首先在需求理解這個環節,我們做了一些有效改進。以前,我們只是簡單地拉取需求列表,但發現這種方法並不受歡迎,因為它未能給研發團隊帶來實際效果,需求列表過長導致研發人員往往不會仔細查看。為此,我們與研發團隊進行了深度調研和訪談,以瞭解他們的具體需求。現在,我們借助AI將需求與代碼分支關聯起來,以便研發人員確定其開發工作是基於哪個具體需求而展開的。

其次在開發過程中,研發人員可能需要查看日誌、部署自測環境、更新調試等,其中有一項重要能力是代碼提交時的描述。通常情況下,人們在提交代碼時可能會簡單地寫「bug fix」,但這種描述不僅沒有實際意義,還會影響後續的代碼審查和維護。通過大型語言模型的幫助,我們可以自動生成代碼提交信息,不僅減輕了研發人員的負擔,還能讓內部信息更標準化。

一般情況下,AI主要幫助我們生成代碼,但無法處理後續的事情,如一鍵部署和調試。例如去年,我們已將京東內部的構建速度提高到了平均2分鐘以內。然而,在進行聯調工作時,仍需要大量的調試時間。每次完成調試後,我們需要修改代碼並提交至代碼庫,接著進行編譯構建,然後再次發佈。即使構建速度已經控制在2分鐘之內,但發佈過程仍需大約5分鐘,並且這5分鐘還會隨著調試次數的增加而累積成更長的時間。

為瞭解決這個問題,我們開發了本地化插件的一鍵部署功能,提交代碼後,AI工具會自動生成commit message,並直接構建為鏡像。此外我們還增強了熱部署能力,使得研發人員可直接將更改發佈到需要調試的地方。這樣一來,我們將每次調試所需的時間從5分鐘縮短到了秒級,極大地提升了開發效率。

從以上這些優化和實踐不難看出,JoyCoder的目標正如其名:希望能通過這些工具和平台,提高研發人員的幸福感和工作效率,更好地服務於他們,使其在開發過程中獲得更多的滿足感和快樂。

最後,對於生成式AI這個領域,還有很多值得探索的地方,包括基於需求的理解、對於AI與Office應用的整合,以及與內部工具的結合等方面,目前業界都仍在探索之中。等到這些難題被逐個攻破後,相信未來AI在軟件開發中的應用和效率提升勢必會達到一個新高。

大模型刷新一切,讓我們有著諸多的迷茫,AI 這股熱潮究竟會推著我們走向何方?面對時不時一夜變天,焦慮感油然而生,開發者怎麼能夠更快、更系統地擁抱大模型?《新程序員 007》以「大模型時代,開發者的成長指南」為核心,希望撥開層層迷霧,讓開發者定下心地看到及擁抱未來。

讀過本書的開發者這樣感慨道:「讓我驚喜的是,中國還有這種高質量、貼近開發者的雜誌,我感到非常激動。最吸引我的是裡面有很多人對 AI 的看法和經驗和一些採訪的內容,這些內容既真實又有價值。」