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