通義靈碼實戰系列:一個新專案如何快速啟動,如何維護遺留系統程式碼庫?

阿里云云原生發表於2024-05-07

作者:別象

進入 2024 年,AI 熱度持續上升,翻閱科技區的文章,AI 可謂是軍書十二卷,卷卷有爺名。而麥肯錫最近的研究報告顯示,軟體工程是 AI 影響最大的領域之一,AI 已經成為了軟體工程的必選項,也有研究稱開發者每天的事務性工作可能佔到了七成左右,比如單側編寫等,而這部分恰好是 AI 所擅長的。讓大模型輔助工程師加速編碼和提升質量,可以讓我們更加聚焦於剩下的 30% 的業務和技術創新。

日常工作中經常聽到工程師的一些訴求和痛點。比如說單元測試編寫比較費時間;接手了一個新的程式碼庫,一些祖傳程式碼理解成本比較高;排查問題查資料要跳轉到一些瀏覽器,並且很難找到合適的答案,會顯得焦頭爛額。我作為智慧編碼研究者,同時也是開發者,這次終於能夠華佗打點滴,醫者自醫了。

總結下來,開發者的主要訴求有三點,1)快速編碼,快速解決問題,快速完成需求。2)減少 IDE 跳出,享受沉浸式心流。3)減少重複編碼,排除語言限制。

比如我要做一個網頁,雖然我不懂前端,但在大模型輔助下,可以幫助我編寫 HTML 和 JS 的程式碼,這樣我能夠更加聚焦於業務的實現和創新。一句話概括來講就是開發者來 IDE 只幹三件事,寫程式碼,寫程式碼還是寫程式碼,通義靈碼便是以編碼助手的形態來幫助開發者提質和提效的。

通義靈碼的核心功能有行級/函式級的自動續寫、自然語言編碼、註釋生成、單元測試生成、程式碼解釋、程式碼最佳化、異常報錯、智慧排查、技術文件搜尋等等。同時它也提供了企業化個效能力,比如報表展示以及專有云的各種部署形態。

通義靈碼支援 Java、Python、Go 等 200 多種主流程式語言,目前已經在 VS Code 和 JetBrains 全家桶 IDE 上的外掛市場上架了,大家訴求很高的 Visual Studio 也即將在下個月上架, 並且這些 IDE 的遠端開發模式也都是支援的,比如說 Remote、SSH、WSL 等等。

總體來講通義靈碼是基於通義大模型,結合海量開源知識以及阿里雲的文件 SDK 開發的,從而有了上層的程式碼補全和研發問答的核心能力。再上層便是我們工程側,比如說有問答意圖識別、使用者習慣學習、Prompt 工程、跨檔案學習等等。從基模到垂直領域的模型,再到端側核心能力的整體同步建設,支撐了我們在 IDE 上可以使用通義靈碼這款產品。

通義靈碼能力展示

有同學會問了,紙上得來終覺淺,來點實戰行不行?

01/ 使用 Spring Boot 建立一個新專案

接下來就使用 Spring Boot 建立一個新專案作為案例向大家展示通義靈碼的能力。首先我們向靈碼提問:如何透過 Spring Boot 編寫一個照片上傳下載的 Web 程式?靈碼馬上就能反應過來並開始生成,先是編寫 Spring Boot 的 XML 檔案以及一些資料結構配置檔案,接著寫 controller 層、service 介面以及 service 的實現類,大家會看到 AI 寫程式碼的速度是很快的,並且思路非常清楚,知道需要哪些檔案以及步驟,以及怎麼把 Web 服務給部署起來。

我們可以隨時隨地和靈碼透過問答的方式來互動。 如果你對它的回答有任何的不滿意,或者是想讓靈碼擴充一些比較概括性的程式碼,讓它續寫一下,再或者是遇到了某種報錯或特別的訴求尋找解決方案等等,都可以透過追問的方式進一步和靈碼溝通,靈碼會很樂意在問答的的過程中為你提供幫助。

比如我提問有沒有透過 memory 的記憶體的資料庫來儲存的例子,而不是用 mysql 資料庫,靈碼就可以領會我的意思,並提供一個 redis 的方案來做這個儲存。

02/ 維護遺留系統程式碼庫

另外一個比較常見的場景是我們作為工程師會經常去維護別人留下來的一個老舊系統,可能裡面也會有一些祖傳程式碼。那麼靈碼解釋程式碼這樣一個預知任務的能力就可以更好的得到體現了。

比如說有這樣一段程式碼,if else 非常多,也比較雜亂。我們可以點選方法上方的一個快捷入口,讓靈碼解釋一下。這裡我們有一個設計,就是靈碼會首先給出一個相對比較簡短的 high level 解釋,幫助開發者能更快的理解這段程式碼的意思。如果開發者想要更加具體的一些解釋,可以透過我們底下的追問按鈕有更詳細的回答,英文系統叫 in detail,靈碼會給出更加具體的解釋。

單元測試也是個老生常談的話題,人人都知單測好,但是能真正做到的又不多。單元測試可以提高程式碼的可維護性,讓程式碼更加健壯,並且其他人來接手的時候也可以更好維護一些,但是工程師的日常開發需求會更大一些。

單測客觀上講,在短期內是肯定是相對費時間的一件事情,但很多開發者就會往往追求短期的省事,而拋棄了遠期的利益。而靈碼就可以更加快速的幫助工程師來編寫單元測試,提高單測的覆蓋率,提升程式碼庫的可維護性。

程式碼最佳化也是一個高頻場景,之前有很多使用者的訴求,希望有這樣一個能力。使用者可以透過框選右鍵,也可以點選方法上方的快捷入口來觸發程式碼最佳化。不過客觀上講,程式碼最佳化它是一個很寬泛的詞,它設計了風格最佳化、缺陷修復、程式重構、安全性最佳化等等。所以我們也在盡我們所能來提升程式碼最佳化的模型能力,讓開發者的程式碼質量更高。

最後介紹一下我們的執行除錯錯誤排查能力。當 IDE 遇到一些 runtime 報錯的時候,靈碼會在報錯堆疊中提供一鍵排錯的功能,點選一鍵排錯的按鈕後靈碼會自動的採集報錯堆疊,並定位到出錯程式碼的上下文,幫助使用者生成一個報錯排查的提示詞來提問模型,尋求解決方案。這個功能目前在 IDEA 和 Java 中放開,後續也會在各個端側和各個語言中放出。

通義靈碼的產品亮點及優勢

首先通義靈碼產品特別關注開發者的體驗,開發者是我們的使用者。我們針對 IDE 的原生視覺做了很多互動設計上的努力,來貼合開發者的使用習慣。同時在編碼過程中,透過補全的觸發時機、長度選擇、模型速度等層面都做了處理,助力開發者的編碼心流體驗。

朱熹老先生說過,讀書有三到,謂心到眼到口到。對於靈碼來說,要生成的準,需要:

  • 一是修煉內在,強大模型,學習更多的優質資料,比如阿里雲自身的一些 SDK 跟 OpenAPI。
  • 二是提示詞工程,用精雕細琢的提示詞配合模型訓練,使生成的效果加倍提升。
  • 三是眼觀六路,比如真實的開發者要寫對下一行程式碼,不光要眼看當前檔案的上下文,也要知道一些跨檔案資訊,比如呼叫另一個檔案中的某個方法,這樣可以減少一些幻覺問題的出現。

最重要的,也是開發者比較關注的安全可控因素。通義靈碼在大模型的生成過程中,所有程式碼資料僅會用於模型推理,中間不會做任何儲存,更不會用來訓練。同時我們也提供了兩個模型,一個是雲端大模型,另外一個是純本地執行的小模型,不聯網、速度快。這兩種模型支援一鍵切換,滿足我們在不同網路環境以及不同的補全強度訴求下的編碼需求。

點選此處,快速體驗通義靈碼

相關文章