动态

详情 返回 返回

解鎖!智能代碼助手 Baidu Comate 硬核能力 - 动态 详情

近日,在全球軟件開發大會上暨智能軟件開發生態展上,來自 Baidu Comate 的資深研發工程師分享了精彩的專題演講,小編整理了演講精華,和大家一起玩轉“大模型+軟件研發”。

今天帶來——吳瑋琦《智能代碼助手 Baidu Comate 的核心能力揭秘》,一起解鎖 Baidu Comate 硬核能力。

圖片

AI 如何助推軟件生產領域代際變革

在過去的幾十年裏,軟件發展經歷了幾個重要時代。借鑑行業和學術界的一些思考,我們可以做以下大致劃分:

首先是上世紀五六十年代,隨着軟件複雜度和體積的急劇膨脹,人們發現軟件領域出現所謂的“軟件危機”,軟件的質量問題暴露出來。先驅們開始把建築、水利等“工程手段”,引入軟件的開發和維護過程中,來解決上述問題,這是軟件工程的開始。隨着計算能力的大幅度提升,同時受到互聯網以及開源軟件運動的影響,進入到第二個階段,我們稱之為現代軟件工程。

圖片

來到當下,以 LLM 為代表的人工智能以及相關技術的推動,整個軟件研發的生命週期和 AI 深度融合,我們姑且稱為“未來軟件工程”,也可以叫“AI 原生的軟件工程”,其特點就是從需求定義到研發、測試、運維的整個流程裏,工程師可以通過 Prompt 等技術手段讓 LLM 協助我們工作,大幅提升研發工作的效率和產能。

百度如何應用 Baidu Comate 推動 AI 原生研發範式落地

Baidu Comate 是百度基於文心大模型研發的智能代碼助手,以插件的形式深度集成在 IDE 中,藉助文心大模型強大的文本理解與生成能力,為每一個工程師提供一個7*24小時的 AI 編碼助手。Comate 的能力覆蓋工程師開發工作的全流程,從代碼生成到技術問答、生成單測等,一應俱全。我們簡稱為“三幫”:幫你想、幫你寫、幫你改——需求開始階段,幫我們解釋已有代碼,做一些疑難問題的回答;在編寫階段,結合上下文幫助我們續寫代碼,為代碼生成註釋;最後,還可以幫你改,比如 code review 時結合相應的編碼規範做智能評審,在流水線上根據 Error 信息提供修復建議等等。

圖片

Baidu Comate 有哪些核心能力?

1、專業的代碼領域大模型

在編碼這個垂直領域,需要強化大模型在編程領域的相關知識,通用 LLM 能做,但是做不好。所以需要從模型訓練數據收集階段,開始針對代碼領域做定向增強。我們從開源代碼和百度內部編程現場大數據,用多種手段精確篩選出高質量、高代表性,覆蓋知識面、應用面廣泛的代碼數據,以提升信噪比。

圖片

當然這些已經是同類產品的基本能力,Comate 有哪些特殊之處呢?

首先是 Comate 在文心大模型、PaddlePaddle 框架和應用層的三層架構組合優化後,端到端響應速度可以保持在600ms 以下。當然這也是我們在實踐過程中找到的一個平衡:在保證代碼生成質量的前提下,還可以儘量提升輸出速度,做到代碼生成速度跟上用户編寫的狀態。

其次是位代碼編寫昌吉給你定製的模型能力。Comate 在公司內部大規模落地過程中,我們深入到一線工程師的實際使用中去做調研,發現大家一半以上的時間不是編寫新代碼,而是在反覆編輯與優化已有的代碼。比如:在原有代碼上添加和修改業務邏輯、為變量重新命名、為函數補充註釋。但是以 GPT-3為代表的 decoder-based 的模型,只能根據上文來輸出下文,無法感知下文。所以同時感知上文和下文,做所謂的“填空題”,即 Fill in the middle,這樣的能力才是編碼領域模型提升生成質量最核心的能力。為此我們重構了模型,來支持這種 FIM 的場景。

模型的靈魂是數據。有句數據領域的老話,Garbage in, garbage out。怎麼教模型,模型就怎樣生成。要想有高質量的生成結果,就要有高質量的精調數據。為了獲取高質量的精調數據,我們邀請各技術委員會的語言專家分析、整理、優化訓練和評估數據,確保數據能符合真實的使用場景,並藉助公司內的 iDataset、iEValue 等工具有效的管理和迭代。

2、Prompt 工程,讓模型更懂“你”

Prompt 工程第一個實踐,是應用代碼分析技術。我們觀察用户的使用習慣,從研發現場去收集關鍵信息,得出這樣一個結論:我們認為最近打開的文件和當前文件的引用是信噪比最高的信息。

圖片

首先,因為設計良好的工程中肯定有很多公共模塊被重複引用,這些模塊往往不在當前文件中被定義,但是對模型來説,這些被引用的模塊的定義又非常關鍵,只有知曉某些函數或者類的定義,才能準確的推理出他的使用方法。其次,如果工程師在某幾個文件之間反覆編輯,我們認為這幾個文件內容是和工程師當前作業聯繫最緊密的,也是信息量最高的。

所以 Comate 在推理過程前,通過檢索相關文件、使用 LSP 分析結果等手段,摘取一些關鍵信息送給模型,以生成更符合用户編碼現場的代碼。

Prompt 工程的另一方面嘗試,是關聯工程和模型外的私域知識,讓 Comate 更懂你。

圖片

説到關聯外部知識,其實有不少方法,比較常見的就是 PT、SFT 和 RAG。首先 PT、SFT 成本高昂,假如我是一個個人開發者,肯定沒有那麼多資源來做模型精調。其次,開發相關的數據比如代碼、三方庫更新都很頻繁,PT 和 SFT 有明顯的滯後性。為了讓用户更絲滑地接入外部知識,我們選擇了用 RAG 做 Prompt 工程的另一部分實踐。常見的外掛知識大多是自然語言,但是編程語言擁有嚴格的結構、邏輯和語法,需要定製化的數據處理邏輯,我們詳細聊下 RAG 如何結合代碼數據檢索。

首先,代碼作為結構化語言,有明確的 scope 和關聯關係,通過定製的算法處理保證切分後也擁有完整的信息,提升代碼文本的召回質量。代碼塊的劃分就是根據不同語言的特點,解析代碼的語法樹並將代碼文件切分為類、塊、函數、行等不同級別的塊(chunk)。

其次,Comate 的思考過程採用了與 TOT 和 Agent 的有效結合,形成了一種連續且多步驟的反饋機制。在這個過程中,Teacher Agent 負責對 Agent 的執行結果進行評估,並提供"整改策略"。根據這些策略,Agent 決定下一步的行動,無論是繼續執行還是回溯並重新執行某個步驟。這樣的機制保證了我們的模型不斷調整並優化輸出結果,直至滿足預定標準,從而顯著提升了模型輸出的質量和準確率。

3、更智能、更易用

Comate 還在極致產品力上做了進一步探索,讓 Comate 更智能,更易用。

圖片

首先是更智能。無論你是一位開發者,還是項目經理,我們都知道寫代碼是一項複雜且需要高度專注的任務。現在,你可以通過 Comate 創新的 AutoWork 功能實現從需求到編碼的全流程智能化,包括需求理解確認、複雜代碼庫分析、多編碼任務分解等。

在技術層面,Autowork 結合了文心大模型思維鏈(COT)技術,使其具有了人類級別的思考能力,這意味着它可以像人類一樣聽懂和理解用户的需求,然後按照邏輯順序,逐步完成一系列複雜的編碼任務。另外,藉助先進的 RAG 代碼智能檢索技術,這使得它能夠將掌握的知識庫信息完美地融入到大語言模型中。當用户提出問題時,它將利用這些知識庫信息,讓生成的回答更準確,更具價值。

另一方面是更易用。“Comate+”即開放平台,是指把 Comate 的能力開放給第三方開發者,支持知識擴展與能力擴展,第三方服務可以將能力連接到編程現場,並打造自己的定製化能力,建設更適合自己團隊的研發助手。

“Comate+”開放平台核心主張是通過開放性,可以更好的讓 Comate 來適應不同組織和個人,取得更貼合具體需求的智能化效果。

通過 Comate 插件這一使用形態,可以讓平台能力直接觸達開發人員第一工作現場,無需重複建設即可快速應用大模型能力,無限擴充平台場景,讓 Comate 更適配團隊的業務知識、團隊規範、固化團隊流程等。

——————END——————

推薦閲讀

基於afx透明視頻的視覺增強前端方案

百度一站式數據自助分析平台(TDA)建設

淺析如何加速商業業務實時化

登錄系統演進、便捷登錄設計與實現

一文帶你完整了解Go語言IO基礎庫

user avatar u_15511034 头像 u_15714439 头像 u_16827017 头像 histry 头像 nixideshatanku 头像 explinks 头像 toplist 头像 idiomeo 头像 matrixorigin 头像 smartbidashuju 头像 qqxx6661 头像 xiangchujiadepubu 头像
点赞 17 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.