阿里云通義實驗室自然語言處理方向負責人黃非:通義靈碼2.0,邁入 Agentic AI

通義靈碼是基于阿里巴巴通義大模型研發的AI 智能編碼助手,在通義靈碼 1.0?時代,我們針對代碼的生成、補全和問答,通過高效果、低時延,研發出了國內最受歡迎的編碼助手。

在通義靈碼 2.0 發布會上,阿里云通義實驗室自然語言處理方向負責人黃非分享了代碼大模型的演進。過去一年來,隨著大模型技術的發展,特別是智能體技術的深入應用,通義靈碼也在智能體的基礎上研發了針對于整個軟件研發流程的不同任務的智能體,這里既包括單智能體,也包括多智能體合并框架,在這樣的基礎上我們研發了通義靈碼2.0。

我們首先回顧軟件工程的發展歷史。1960年代中期,軟件開發進入危機時代,因為那個時候軟件開發并沒有固定的方法可循,整個的軟件設計是在開發人員頭腦中完成了一個隱藏的過程,而且軟件維護的成本居高不下,產品質量也比較低。

1968年以來通過 NATO 會議,正式提出了軟件工程這樣一個術語,人們提出了結構化的開發方法,也包括瀑布式的軟件生命周期流程,軟件測試和驗證成為軟件開發的重要環節。

1983年 C++?正式發布以來,推動了面向對象的程序設計方法,面向對象程序設計方法意味著對象的編程、軟件開發的工具都得到了改進,包括軟件開發的環境 IDE 和版本控制的工具也得到了廣泛的使用。同時也有一些 ISO9000、SPICE 等質量標準體系的形成,確保軟件工程的開發滿足標準化的流程。

在90?年代末,進入互聯網時代,由于軟件的快速發展催生了敏捷開發的革命,需要更緊密的團隊協作,需要不同團隊之間有效地應對不同需求的變化,需要軟件的持續構建、持續集成、持續迭代和持續交付。

到2023 年以來,隨著 GPT-4 的推出,大模型對于整個開發帶來革命性地變化。比如說基于大模型的智能輔助開發系統逐漸成為主流,大模型驅動的軟件智能開發助手已應用到軟件開發流程的各個環節中來,也推動了軟件工程以更為智能高效的方式去推動、去發展。

如果仔細來看一下智能軟件工程的詳細流程,我們會看到在2020?年生成式大模型發布之前,其實已經有了一些針對于軟件開發的小模型的工作,包括 CodeBERT、GraphCodeBERT,這些是以 BERT 為框架,但還只主要針對于代碼理解這樣的任務。

到了2021 年,以 CodeX 為代表的生成式大模型為特色,針對于代碼的生成,代碼的補全,已經開始得到了應用。在此基礎上的話,一個非常重要的衡量代碼生成的榜單,HumanEval 也被提了出來。

到了2023 年我們看到包括 ChatGPT、GPT-4,包括 Qwen 這樣的通用模型,以及在此基礎上的 CodeQwen、CodeLlama 等代碼專用模型更廣泛地應用到了軟件開發的過程中,包括代碼的生成、補齊、注釋的生成、單元測試的生成等等,都應用了這方面的能力。

我們也看到在2023 年底,SWE-bench 這樣一個更真實的模擬軟件開發流程的一個 benchmark 也被提了出來,在這個 benchmark 上提供的一些評估能力,也能更準確地評估大模型或者是 AI 編碼助手在真實軟件開發過程中的一個效果。

到了2024 年,我們可以看到更多的代碼模型不斷涌現出來,也更完整地融入到整個端到端的軟件開發流程,從用戶需求的理解,到軟件的設計,到軟件的開發、調試、生成、交付文檔等等一系列流程,都能夠用到智能大模型的技術。

總結來看的話,以大語言模型為基座帶來了整個軟件工程開發新的范式,從早期的智能助手的階段,LLM+Copilot的結合,到中期的基于智能體,每個智能體成為一個單獨的智能專家,能夠自主地用工具完成一個特定的任務。

到第三個階段即多智能體的階段,以大模型為基礎,能夠更好地完成整個軟件流程開發的不同任務,配合來完成更復雜的開發任務。

我們的通義靈碼是在QwenCode2.0?的基礎上建立的,Qwen2.5-Coder 是在 Qwen 的基礎上研發而成,這里包括了適應多場景的全尺寸的代碼大模型。

我們發布了包括7B、32B 等共六款 Qwen2.5-Coder 模型,這六款代碼模型在同等尺寸下均取得了業界最佳的效果,包括代碼生成、代碼推理、代碼修復等等核心場景,其中 32B 的旗艦代碼模型在 10?余項基準評測中都取得了開源模型的最佳成果。同時,代碼模型還在代碼生成關鍵能力上對齊了閉源模型 GPT-4o。

具體來說,Qwen2.5-Coder是基于 Qwen2.5 的基礎大模型進行初始化,使用了包括源代碼、文本代碼混合數據以及代碼合成數據等總共 5.5T tokens 的數據進行持續地訓練,實現了代碼相關下游任務的顯著提升,特別是針對非常有挑戰性的真實世界的軟件工程任務,我們提出了兩階段的文件級別預訓練及倉庫級別的預訓練,增強了 Qwen-Coder 對于倉庫上下文的依賴和理解。

此外,為了適配開發者的多語言需求,Qwen-Coder在接近百種編程語言上進行了預訓練和對齊。在實際評測中,Qwen2.5-Coder 32B 的模型在 40?余種編程語言中表現優異,在 MC-EVAL 基準上取得了所有開閉源模型的最高分,并斬獲了考察多種編程語言代碼修復能力的 MD-EVAL 基準的開源冠軍。

在通義靈碼產品化落地階段,我們看到有兩個步驟,第一階段的話就是 Copilot 的階段。代碼模型作為一個編碼助手能夠幫助程序員在編碼過程中,針對特定任務完成特定的工作。

第二階段的話就是 AI 程序員,更深入地融合到軟件開發的整個流程中來,能夠起到更大的作用。

我們以Test Agent 測試智能體為例來解釋一下,Test Agent 專注于單元測試的相關任務,用戶只需要說出單測的需求,Test Agent 就會自動地幫助你完成單元測試生成的全部流程。

它具備多項能力,比如說用戶需求的分析、計劃的制定、完整分析被測函數中的代碼依賴、使用工具與 code base 進行交互,比如說搜索的工具、編輯器工具等,結合編譯器、執行器的環境反饋完成單元測試的生成和 bug 的修復。

通義靈碼2.0?的 AI 程序員采用的是多智能體的框架,這個框架分為兩個主要的部分,一個是環境的部分,一個是智能體的部分,環境的部分包括代碼倉庫、各種軟件工程工具和 Reward Model 等等。

智能體的部分是系統的核心,這里由 5 個專門的 AI 智能體組成,包括規劃智能體、搜索、生成、單測、調試智能體等等。這些智能體通過 Action 和環境進行交互執行各自的任務,同時它們也能夠接受來自于環境的反饋進行不斷地學習和改進。這種多智能體的架構使得通義靈碼 AI 程序員能夠處理復雜的軟件開發任務,從方案設計到代碼調試,全面覆蓋了開發流程的各個環節。

此外,考慮到現實軟件開發流程中的復雜性,現實軟件開發流程也包括需求分析、系統設計、軟件開發和軟件測試,而且還涉及到開發者自己的思考以及開發者和外部工具的使用,以及不同職能的人之間的交流,這樣一個流程也需要更復雜的一個軟件開發大模型。

我們看現有的代碼大模型,它是在預訓練語言模型基礎上增加了比如說Github 的靜態代碼和文檔數據、網頁代碼問答數據等等,進行了持續地預訓練,形成代碼預訓練模型,同時針對于代碼生成的一些任務,比如說代碼的指令生成數據、注釋、單測等多任務指令、通用問答指令等等數據來進行有監督地微調,進一步地針對代碼的相關任務偏好數據進行對齊,最后生成代碼對齊模型。

這些代碼對齊模型由于缺乏解決實際軟件過程中需要的推理過程數據,所以難以應用到真實的端到端的軟件工程的任務中來,比如說它缺乏解決問題所需要的一個過程數據,比如說針對用戶需求的一個規劃、反思,也缺乏和外部工具的交互的數據,比如說和編譯器的交互和執行器的交互等等。

在此基礎上,我們就提出了面向軟件工程的數據合成的思路,來訓練面向軟件工程的代碼模型,這個過程不僅能夠學習問題和答案之間的映射,更關注學習如何解決問題的過程。

過程數據合成主要包括三個階段,現實軟件工程的理解、故障的定位,包括邊界點的定位以及代碼的生成這三個部分,每個部分通過React 的形式合成解決過程的數據來改進現有模型在實際軟件開發中的應用。

具體來說,倉庫理解階段旨在分析和理解軟件倉庫的結構、文件和相關代碼,形成相應的分析和規劃,為后續步驟提供基礎。而故障定位階段,通過自主調動搜索工具、迭代細化搜索結果并定位引發Issue 的潛在代碼位置,而基于這些故障的位置和數據合成鏈路,可以在補丁生成的階段生成可以直接應用的代碼補丁,交給用戶審查和確認。

我們可以看到上述整個過程,在倉庫環境下,通過React 的形式合成了解決過程的數據,這種方法能夠改進現有模型在實際開發過程中的應用,使得 AI 系統不僅能夠給出答案,還能夠模擬軟件工程師解決問題的思路。

基于這種軟件工程的過程數據合成方法,我們訓練了Lingma-SWEGPT 軟件工程大模型,這個模型旨在解決需要復雜推理的軟件工程任務。Lingma-SWEGPT 接收真實的 Github Issues 和 Reports 作為輸入,通過倉庫理解、故障定位和補丁生成這三個階段,最終輸出了提交的補丁。該模型采用迭代訓練的方法,利用合成數據不斷地優化,模型在每個階段都用了 Chain-of-Thought 推理和觀察行動循環,實現了從問題到解決方案的全流程智能化。

同時通過整合倉庫的導航、精確的搜索這樣的工具,以及使用的 Git 的相關命令和 Pylint 等代碼質量檢查工具,模型能夠處理越來越復雜的軟件工程問題,并且在每個階段生成中間結果,也供進一步地分析和改進,最終模型生成的補丁由人工進行審查和確認,確保其正確性和實用性。

這種端到端的智能化的流程,使得Lingma-SWEGPT 在復雜軟件工程任務中表現出色,能夠模擬專業開發者解決問題的過程,為軟件開發和維護提供強大的 AI 輔助能力。

我們舉一個例子,比如說在單元測試的生成場景中,通義靈碼Test Agent 會在識別到生成單元測試需求之后開始分析你的項目環境,逐一檢查生成單元測試所必要的依賴項是否通過,在前置依賴項檢查通過之后,Test Agent 會列出生成單測計劃待用戶確認,用戶確認之后,Test Agent 會開始按照計劃為每個測試函數開始生成單元測試的代碼,并自動修復其中存在的錯誤,在生成和修復完成之后,Test Agent 會合并生成好的單元測試用例,將合并后的文件作為呈現給用戶的最終結果。

基于用戶的代碼倉庫對用戶的問題進行分析之后,我們可以看到多文件生成也使用了類似的框架,首先,它需要定位需要修改的一個或多個文件代碼或片段,再次,它會給出整體的修改說明,這樣的目的是使得用戶的交互更加友好。第三,生成每個文件的具體代碼修改方案,主要是因為要緩解模型生成速度的慢的問題,不是生成全部的修改代碼,而只是修改方案中僅包括被修改的部分。第四步是根據修改的方案能夠快速生成完整的修改后的代碼文件,這樣的話工程根據修改前后的代碼文件進行渲染,生成Diff 的可視化效果,給用戶友好的交互體驗。

我們下一步來展望一下未來的代碼大模型的發展,首先根據SWE-bench 的這個結果我們來看,在過去一年多以來,這個結果的數據集的評分從?0.4 快速上升到 71.7,它的解決率的速度遠遠超過我們的想象,我們來看代碼的數據其實儲備非常豐富,從第一天開始就是數字化的數據,此外代碼的流行的過程本身就是一個思維鏈的過程,它就是一個解決問題的方法、步驟和過程,這樣的話我們的大模型的推理能力、思維鏈能力,在代碼任務上能夠得到很好地體現和應用。此外代碼本身也有很好的環境交互,比如說編譯器、執行器等等都可以用來判斷代碼的正確性。

所以綜合來看的話,代碼的智能開發很有可能是AGI 最先突破的方向,我們也在業界看到了在這個方向的廣泛地應用和落地,以及大量的產品,如果我們看 Gartner 對于不同技術的發展趨勢來看,我們可以看到,基于 AI 的智能代碼目前正處在發展的頂峰階段,我們可以預見現在和今后未來很近的時間內,基于 AI 的代碼輔助和智能軟件工程的模型和產品會得到巨大的爆發和發展,我們也要積極擁抱人機共生的軟件工程的新的范式。

最后我們來總結,以智能體為核心的AI Agent 將成為用戶和編程過程之間的智能中介,它不僅能夠通過觀察,學習到大模型處理和執行操作來完成更為復雜的編程任務,更重要的是,這個系統能夠持續學習和進化,通過數據飛輪不斷地改進自身的能力。

未來我們期待看到更加智能的、自主的編程助手,它不僅能夠被動地解決現有的編程需求,還能夠持續學習、主動發現并解決可能存在的問題,極大地提升編程的效率和代碼質量。更進一步,以自然語言為交互,它可以讓更多不具備代碼開發能力的泛編程人員通過自然語言和多框架的編程模式,能夠靈活地開發更多的、更個性化的代碼或者是Task 引擎,在廣泛的場景中得到應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66340.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Open3D 最小二乘擬合平面(直接求解法)【2025最新版】

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT。 博客長期更新,本文最近更新時間為:2025年1月18日。 一、算法原理 平面方程的一般表達式為:

超標量處理器設計2-cache

1. cache 介紹 影響Cache缺失的情況有3種: Compulsory: 第一次被訪問的指令或者數據肯定不會在cache中,需要通過預取來減少這種缺失Capcity: Cache容量越大,缺失就可以更少, 程序頻繁使用的三個數據來源于3個set, 但是&#xff…

linux 安裝PrometheusAlert配置釘釘告警

在 Linux 上安裝 PrometheusAlert 并配置釘釘告警的步驟如下: 1. 準備工作 釘釘機器人: 在釘釘群中創建一個機器人,獲取 Webhook URL。示例 Webhook URL:https://oapi.dingtalk.com/robot/send?access_token=your_dingtalk_token。PrometheusAlert 安裝包: 從 Prometheus…

當PHP遇上區塊鏈:一場奇妙的技術之旅

PHP 與區塊鏈的邂逅 在技術的廣袤宇宙中,區塊鏈技術如同一顆耀眼的新星,以其去中心化、不可篡改、透明等特性,掀起了一場席卷全球的變革浪潮。眾多開發者懷揣著對新技術的熱忱與探索精神,紛紛投身于區塊鏈開發的領域,試…

vscode的安裝與使用

下載 地址:https://code.visualstudio.com/ 安裝 修改安裝路徑(不要有中文) 點擊下一步,創建桌面快捷方式,等待安裝 安裝中文插件 可以根據自己的需要安裝python和Jupyter插件

32單片機綜合應用案例——物聯網(IoT)環境監測站(四)(內附詳細代碼講解!!!)

無論你身處何種困境,都要堅持下去,因為勇氣和毅力是成功的基石。不要害怕失敗,因為失敗并不代表終結,而是為了成長和進步。相信自己的能力,相信自己的潛力,相信自己可以克服一切困難。成功需要付出努力和堅…

淺談云計算19 | OpenStack管理模塊 (上)

OpenStack管理模塊(上) 一、操作界面管理架構二、認證管理2.1 定義與作用2.2 認證原理與流程2.2.1 認證機制原理2.2.2 用戶認證流程 三、鏡像管理3.1 定義與功能3.2 鏡像服務架構3.3 工作原理與流程3.3.1 鏡像存儲原理3.3.2 鏡像檢索流程 四、計算管理4.…

RK3568 Android11 鎖屏界面屏蔽下拉狀態欄

參考文章: Android R鎖屏界面屏蔽下拉狀態欄_pulseexpansionhandler-CSDN博客 前提增加狀態欄控制顯隱屬性,以下面文章為前提補充功能 RK3568 Android11 狀態欄和導航欄增加顯示控制功能-CSDN博客 修改文件位置: frameworks/base/package…

彩色圖像面積計算一般方法及MATLAB實現

一、引言 在數字圖像處理中,經常需要獲取感興趣區域的面積屬性,下面給出圖像處理的一般步驟。 1.讀入的彩色圖像 2.將彩色圖像轉化為灰度圖像 3.灰度圖像轉化為二值圖像 4.區域標記 5.對每個區域的面積進行計算和顯示 二、程序代碼 %面積計算 cle…

分布式理解

分布式 如何理解分布式 狹義的分布是指,指多臺PC在地理位置上分布在不同的地方。 分布式系統 分布式系**統:**多個能獨立運行的計算機(稱為結點)組成。各個結點利用計算機網絡進行信息傳遞,從而實現共同的“目標或者任…

深入了解卷積神經網絡(CNN):圖像處理與深度學習的革命性技術

深入了解卷積神經網絡(CNN):圖像處理與深度學習的革命性技術 導語 卷積神經網絡(CNN)是現代深度學習領域中最重要的模型之一,特別在計算機視覺(CV)領域具有革命性的影響。無論是圖…

QT:IconButton的動畫效果

要實現IconButton,需要處理背景。參考: QT之IconWidget-CSDN博客 隨后就是Button的按下動畫效果。實現也簡單。思路就是記錄按下狀態,然后在繪制時偏移一個像素(也可以繪制另外一個圖)。 增加一個字段,記…

Android渲染Latex公式的開源框架比較

對比主流框架,介紹如下幾款 1、AndroidMath 官網:https://github.com/gregcockroft/AndroidMath/tree/master 基于android原生view方式渲染 優點:速度快,開源協議 MIT license 缺點:不支持文字公式混合渲染 2、Ma…

Red Hat8:搭建FTP服務器

目錄 一、匿名FTP訪問 1、新建掛載文件 2、掛載 3、關閉防火墻 4、搭建yum源 5、安裝VSFTPD 6、 打開配置文件 7、設置配置文件如下幾個參數 8、重啟vsftpd服務 9、進入圖形化界面配置網絡 10、查看IP地址 11、安裝ftp服務 12、遇到拒絕連接 13、測試 二、本地…

VS Code--常用的插件

原文網址:VS Code--常用的插件_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹VS Code(Visual Studio Code)常用的插件。 插件的配置 默認情況下,插件會放到這里:C:\Users\xxx\.vscode\extensions 修改插件位置的方法 …

Re78 讀論文:GPT-4 Technical Report

諸神緘默不語-個人CSDN博文目錄 諸神緘默不語的論文閱讀筆記和分類 論文全名:GPT-4 Technical Report 官方博客:GPT-4 | OpenAI appendix懶得看了。 文章目錄 1. 模型訓練過程心得2. scaling law3. 實驗結果減少風險 1. 模型訓練過程心得 模型結構還…

推薦單通道有刷直流電機驅動芯片AT8236

單通道直流有刷電機驅動芯片AT8236 描述應用特點型號選擇典型應用原理圖管腳列表推薦工作條件 atT A 25C電氣特性 atT A 25C,V M 24VH橋控制電流控制死區時間休眠模式過流保護 (OCP)過溫保護 (TSD)欠壓鎖定保護(UVLO) PCB 版圖建議典型應用示例 描述 AT8236是一款直流有刷電機…

聚銘網絡6款產品入選CCIA《網絡安全專用產品指南》

近日,中國網絡安全產業聯盟CCIA正式發布《網絡安全專用產品指南》(第二版)(以下簡稱《指南》)。聚銘網絡憑借突出技術優勢、創新能力以及市場積累,旗下安全產品成功入選防火墻、網絡安全審計、日志分析、網…

將 AzureBlob 的日志通過 Azure Event Hubs 發給 Elasticsearch(1)

問題 項目里使用了 AzureBlob 存儲了用戶上傳的各種資源文件,近期 AzureBlob 的流量費用增長很快,想通過分析Blob的日志,獲取一些可用的信息,所以有了這個需求:將存儲賬戶的日志(讀寫,審計&…

ESP32S3基于espidf接入網絡獲取NTP時間

ESP32S3基于espidf接入網絡獲取NTP時間 📌 相關篇《ESP32S3基于espidf接入網絡配置介紹》📍官方相關SNTP 時間同步介紹文檔:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/system_time.html?highli…