如何讓AI代碼補全更懂開發(fā)者?
中興通訊團隊提出了兩個新的評測指標,以及一套倉庫級代碼語料處理框架。
按照團隊的說法,這套方法論不僅為評測代碼大模型提供了新視角,也為提升模型在真實工業(yè)場景中的代碼補全性能開辟了新路徑。
目前在編寫代碼時,智能補全工具如GitHub Copilot和Cursor等,極大地提升了程序員的開發(fā)效率。
然而這些AI工具給出的建議經(jīng)常“差了點火候”,不完全符合用戶預期。
對此團隊認為,這實際上暴露了當前代碼大模型使用中的兩個關鍵痛點:
- AI的“我覺得好” vs 用戶“真的好用”:目前評價AI代碼補全效果的指標,和開發(fā)者實際使用時的真實感受、采納意愿,往往存在一條“隱形鴻溝”。
- AI的“局部視野”:多數(shù)模型在學習代碼時,更側重于理解一小段上下文的序列關系,對于整個代碼倉庫中,跨越不同文件、不同模塊的復雜結構和深層語義依賴,常常“力不從心”,導致補全建議的質量和實用性大打折扣。
這些問題,無疑限制了代碼大模型在復雜工業(yè)環(huán)境,尤其是在ZTE-Code-Copilot(中興通訊自研的通信領域代碼開發(fā)助手)這類專業(yè)場景中的應用潛力。
那么,如何使AI的補全建議更符合開發(fā)者的需求呢?
兩個新指標+一套新框架
事實上,開發(fā)者們苦惱于AI的“自說自話”久矣。團隊認為要解決這個問題,必須回答兩個靈魂拷問:
① 何謂高質量的代碼補全,能夠讓開發(fā)者愉快地按“Tab”鍵采納?
② 如何教會AI“高瞻遠矚”,理解整個代碼倉庫的復雜結構和內在邏輯,而不是只盯著眼前的一畝三分地?
針對上述挑戰(zhàn),團隊祭出了兩大“法寶”:
更貼近用戶真實感知的評估“新標尺”:LCP與ROUGE-LCP指標設計
團隊發(fā)現(xiàn),開發(fā)者在用“隨手補全”功能(指代碼補全中的單行補全任務和行內補全任務)時,下意識地會從左到右看AI的建議,特別關注建議的開頭部分是不是對的。
就是說,只要開頭那段對了,哪怕后面有點小問題,也很可能就接受了,再自己改改。
基于這一核心洞察,團隊提出了兩個與用戶感知更契合的新評估指標:
(1)最長公共前綴長度(LCP, Longest Common Prefix)
定義:LCP(S, R)指模型輸出序列 S=s1, s2, …, sT與參考序列(即用戶期望的代碼)R=r1, r2, …, rT從起始位置開始連續(xù)匹配的最大字符數(shù)。
核心價值:LCP強調從第一個字符開始的連續(xù)匹配性,這恰恰是交互式代碼補全場景中用戶最為關注的特性。它比那些允許不連續(xù)匹配的指標(如基于LCS的指標)更能反映用戶在實際操作中的體驗。
(2)ROUGE-LCP
定義:在LCP基礎上,借鑒ROUGE-L的歸一化思想,提出ROUGE-LCP: ROUGE-LCP(S,R)=LCP(S,R) /∣R∣。 其中∣R∣是參考序列的長度。
核心價值:通過除以參考序列長度,ROUGE-LCP實現(xiàn)了對不同長度補全樣本的公平比較,同樣能有效反映模型輸出的實用性。
賦予AI“全局視野”的“導航系統(tǒng)”:SPSR-Graph倉庫級代碼語料處理框架
為了讓大模型能真正理解復雜代碼倉庫的結構和語義,而不只是“管中窺豹”,團隊設計了一套倉庫級代碼語料處理框架。
其核心是構建和利用一種特殊的代碼知識圖譜——SPSR-Graph(Structure-Preserving and Semantically-Reordered Code Graph)。
目標是,通過顯式建模代碼的結構信息和跨文件的依賴關系,讓預訓練語料本身就蘊含更豐富的結構化知識,從而提升模型對整個代碼倉庫的理解深度。
下圖為SPSR-Graph框架圖,展示了從原始代碼到高質量SPSR-Graph訓練語料的完整流程。
圖中核心組件解讀:
1、語料預處理:對海量原始代碼進行嚴格的數(shù)據(jù)過濾、清洗和去重,確保輸入“干凈”。
2、AST結構切割:利用AST將代碼分解為函數(shù)、類等具有完整語義的結構化單元。
3、結構感知圖譜構建與樣本生成:以上述語義單元為節(jié)點,以它們之間的調用、依賴關系為邊,構建代碼知識圖譜。然后通過遍歷圖中的路徑,將路徑上的代碼片段(包含必要的結構注釋)拼接起來,形成富含全局結構信息的訓練樣本。
主要步驟如下:
其一,基于AST的語法感知語義單元抽取(Syntax-Aware Semantic Unit Extraction via AST)。
團隊首先使用AST(抽象語法樹)解析工具(如Tree-sitter)將源代碼切割成具備語義封閉性的基本單元,例如函數(shù)體、類定義、條件分支等。
這確保了每個單元在結構上的完整性和上下文的連續(xù)性,避免了傳統(tǒng)基于Token的隨機或滑窗方法可能帶來的語義割裂。
其二,SPSR-Graph構建——結構保持與依賴排序。
- 語義單元抽取與圖初始化:將從代碼庫中抽取出的所有頂層語義單元(如函數(shù)v)作為圖Γ=(V,?)中的節(jié)點V。這些單元具備語義完備性。
- 關系抽取與圖構建:分析這些語義單元之間的依賴關系,如函數(shù)調用、成員引用、類型依賴等,作為圖中的有向邊??V×V。圖的邊可以標注類型,節(jié)點可以增強屬性(如定義位置、模塊歸屬)以承載更豐富的語義。
- 圖結構遍歷與訓練樣本構建: 在構建好的有向圖Γ上,采用有向廣度優(yōu)先搜索(BFS)等策略,找出所有深度不超過預設值D的語義路徑。
每一條路徑pk都被映射為一個訓練樣本:Sample(pk)=νk1⊕νk2⊕…⊕νkm,其中⊕代表結構感知的拼接操作。
在拼接過程中,會插入文件路徑等結構化注釋信息,以增強模型對跨文件結構的建模能力。
整個過程不僅保留了代碼的語法結構完整性和上下文一致性,更關鍵的是,它在調用路徑的維度上對語料進行了重排序,使模型在訓練時能顯式地學習和建模跨函數(shù)、跨模塊的結構性依賴。
通過這套“組合拳”,團隊期望AI模型能練就“火眼金睛”,洞察代碼的深層奧秘。
實驗效果
接下來,團隊進行了一系列實驗來驗證新指標的“含金量”和新方法的“戰(zhàn)斗力”。
LCP與ROUGE-LCP:真的和開發(fā)者“心有靈犀”嗎?
團隊收集了ZTE-Code-Copilot在2025年3月3日至4月24日期間,超過10000條真實用戶的“隨手補全”數(shù)據(jù)記錄進行分析。
以下為LCP分布及其與采納次數(shù)和采納率的關系圖(即LCP的“用戶緣”):
團隊發(fā)現(xiàn)LCP的分布呈現(xiàn)明顯的長尾特性,與理論推導高度吻合。
最亮眼的是,LCP值與用戶實際“采納率”之間存在顯著的正相關。
表1顯示,皮爾遜相關系數(shù)r值在不同時間段均高于0.69,最高達到0.91,且P值均小于0.05。
簡單說,LCP越高,用戶越愿意用AI的建議。在LCP=1時,會出現(xiàn)一個明顯的尖峰,這是因為當AI給出句尾需要補全標點符號(,.;)的建議時,人們會有更高概率采納。
ROUGE-LCP分布及其與采納次數(shù)和采納率的關系圖(即ROUGE-LCP的“洞察力”)如下:
團隊表示,ROUGE-LCP的分布也符合其混合模型預期。隨著ROUGE-LCP值增加,用戶采納率整體上升,在AI建議與用戶想法完全一致(EM=1)時達到頂峰。
新老指標大PK
團隊計算了LCP、ROUGE-LCP,以及傳統(tǒng)的評估指標——EM(完全匹配)、LCS(最長公共子序列)和ROUGE-L的每日平均值,并同時統(tǒng)計了采納率的每日平均值。
通過將時間窗口擴展至兩個月,進一步分析了LCP等評估指標與采納率之間的相關性。
原論文表2清晰顯示,在與用戶采納率的相關性方面,LCP和ROUGE-LCP明顯勝出,r值普遍更高,LCP與用戶采納率的相關性甚至超過了0.7,遠好于傳統(tǒng)的評測指標EM。
下表為評估指標(LCS、LCP、ROUGE-L、ROUGE-LCP、EM)與用戶采納率之間的皮爾遜相關性分析:
但也發(fā)現(xiàn)了一個現(xiàn)象,ROUGE-LCP與采納率的相關性要低于LCP與采納率的相關性。
這兩個現(xiàn)象說明,用戶在是否接受AI提供的代碼補全建議這個點上,與AI提供的答案從首字母起正確的字符的絕對數(shù)量相關,而不是相對占比,這反應了用戶編輯有一定的隨意性。
并且,用戶并不完全追求AI提供的答案和預期完全一致,只需要AI在符合用戶編輯習慣的基礎上,提供盡可能正確的答案。
這充分證明,新指標更能捕捉到用戶真正的采納行為和使用意圖。
SPSR-Graph:“武裝”后的AI有多強?
團隊選用Qwen2.5-7B-Coder作為基礎模型,使用了約0.6B token的通信領域C/C++代碼語料進行預訓練,并輔以約6萬條精調語料。
(1)“三級跳”式性能提升
然后,團隊比較了不同預訓練語料策略的效果:基礎的Pipeline處理→ 增加AST語義切割 → 構建函數(shù)級代碼圖譜(KGF) → 進一步引入結構體級圖譜(KGFS)。
下表為不同預訓練語料策略在隨手補全任務中的性能比較:
結果顯示,采用KGFS策略訓練的模型,在C++和C語言上的EM(精確匹配率)、LCP和BLEU等多個核心指標上均取得了最佳性能。
尤其在C語言上,相較于僅使用AST切割的策略,KGF使EM提升了2.66%,BLEU提升了2.74%,證明SPSR-Graph帶來的全局上下文理解能力效果顯著。
(2)知識圖譜的“最佳有效半徑”
下圖為代碼知識圖譜廣度對代碼補全性能的影響:
團隊還探索了SPSR-Graph的“遍歷廣度”(即一個代碼節(jié)點在圖中連接多少“鄰居”)對模型性能的影響。
實驗發(fā)現(xiàn),當廣度k=4時,模型表現(xiàn)最佳。廣度過小,信息量不足;廣度過大,則可能引入過多無關噪聲,反而導致性能下降。
未來展望
通過本次研究,團隊系統(tǒng)地探討并實踐了如何讓AI代碼補全更懂開發(fā)者:
一是提出了更精準的“尺子”:LCP和ROUGE-LCP這兩個新評測指標,能夠更真實地反映用戶對“隨手補全”建議的采納意愿,為模型優(yōu)化指明了更靠譜的方向。
二是打造了更智能的“教材”:基于SPSR-Graph的倉庫級代碼語料處理框架,通過保留代碼結構、重排語義依賴,顯著增強了模型對復雜代碼結構和跨文件依賴的感知與利用能力。
本文作者來自中興通訊AIM團隊。團隊致力于推動通信領域和垂直領域的智能化發(fā)展,研究范圍包括星云通信領域大模型,星云Agent框架(NAE),以及星云精調流水線等。
未來,團隊表示將繼續(xù)深化對LCP和ROUGE-LCP指標在更多代碼生成任務、不同類型模型上的適配性研究。
同時,SPSR-Graph方法也將進一步探索與強化學習等技術的結合,以挖掘模型更深層次的推理能力,并嘗試擴展到更復雜的軟件工程領域。
論文鏈接:https://arxiv.org/pdf/2505.13073
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.