豆包 MarsCode 落地編程助手場景的探索實踐
一、豆包 MarsCode 編程助手起源
1. IDE 智能化探索
早期階段,IDE 智能化萌芽于靜態(tài)代碼分析,基于語法與結構提供預測性建議,初步提升了開發(fā)效率。隨著 AI 技術的逐步成熟,引入了 Machine Learning 與 Deep Learning,使輔助功能顯著增強,如智能代碼推薦與優(yōu)化。
近年,大模型的火熱催生了 AI 助手深度嵌入編程流程,如智能代碼生成與調試等,助力效率飛躍。
AI 編程助手顯著提升了編碼速度,使開發(fā)者能夠更專注于業(yè)務邏輯,擺脫了繁瑣的重復任務,同時降低了語言與框架的學習成本,賦能普通程序員成為全能高手,從而適應多元化項目需求。
2. 開發(fā)者對 AI Coding 的訴求
根據 Stack Overflow 調研,開發(fā)者亟需編程助手支持代碼編寫、調試與文檔注釋,覆蓋全流程開發(fā)周期。
開發(fā)者對 AI Coding 最關心的功能聚焦于:
- 代碼生成:自動化補全、模板填充,大幅提升生產率。
- 理解與解讀:即時解析代碼含義,助于快速定位與修正問題。
- 自動修復:智能識別并解決 bug,如 Auto Debug,Link Fix 等功能,減輕調試負擔。
3. 豆包 MarsCode 進化
自 2022 年起,豆包 MarsCode 開啟了代碼補全領域的探索,自主研發(fā) LLM 評測系統(tǒng),超越離線評測局限,構建了全面工程鏈路與在線評估平臺,加速策略與模型驗證,直面用戶真實體驗。
初始階段雖聚焦于補全產品,但單一工具無法滿足多樣編碼情境,因此引入了對話式編程助手后,拓展服務范圍。近期則瞄準高階自動化,推出了代碼補全 Pro,預知用戶意圖,即時推送代碼建議,實現高效編程。
豆包 MarsCode 始終以用戶為中心,不斷迭代,旨在塑造無縫銜接的開發(fā)流程,助力每位開發(fā)者提升效率與創(chuàng)作自由。
二、豆包 MarsCode 的現狀與發(fā)展
接下來將圍繞代碼補全和代碼補全 Pro 兩個方面展開介紹豆包 MarsCode 的現狀與發(fā)展。
1. 代碼補全
代碼補全是 AI 輔助編程的關鍵組件,要求模型深刻理解現有代碼及其工程背景,以精準預測用戶意圖,實現個性化推薦。
傳統(tǒng)方法借助下拉菜單供用戶挑選代碼選項。近期微軟引領變革,引入了“幽靈文本”(Ghost Text)概念——編輯器內即時展示推薦,只需 Tab 鍵即可確認,極大提升了開發(fā)效率。該方式通過即時反饋,實現了實時編碼協助,尤其適用于多行補全,彰顯了性能優(yōu)勢。
實現這一功能的核心在于高性能模型快速準確推理,捕捉細微編碼語境,精準匹配開發(fā)者需求,顛覆常規(guī),推動編程效率飛躍。同時,理解代碼上下文,準確預測續(xù)寫字符,增強用戶體驗。
(1)工程
Prompt 工程的核心目標是:精確定位開發(fā)者意圖,提供精準代碼建議,增進用戶體驗。
整體流程如下圖所示。
IDE 捕獲代碼屬性(如語言、文件信息),形成完整的 prompt,上下文整合后傳遞給模型作補全依據。模型接收 prompt,進行推理,并反饋結果,實現代碼補全。此外還需要反復迭代,優(yōu)化輸出結果,提升準確度與效率。
上下文信息對推理性能至關重要,因此我們探索了一套基于用戶編碼行為的優(yōu)化策略。用戶編寫代碼時,要調用函數,經常需要打開函數文件查看詳細定義和注釋,打開文件的動作與當前編碼的相關性是比較高的,因此我們對打開文件的上下文進行收集,用于 prompt 構造。另外,編輯器中的歷史內容也會作為上下文給到模型。
因為 prompt 的長度是有限的,我們需要對上下文進行排序和裁剪,還需要對低質量的 Prompt 進行過濾和完善,再提供給大模型進行推理,模型給出結果后,需要過濾掉重復和不正確的內容,以及敏感詞,最終給出補全提示。
(2)科學的評測體系
在優(yōu)化和迭代之外,還需要一套指標體系來進行科學評測。早期我們使用采納率這一指標進行評測,即采納次數/推薦次數。采納率在一定程度上可以體現模型推薦的質量,但只關注采納率很容易被誤導,比如有些場景通過減少推薦來提升采納率,顯然并不能真實反應推薦效果。另外,根據采納率,也不容易拆解分析,不利于歸納出鏈路優(yōu)化路徑。
為此引入了 CPO 這一更為科學的綜合性指標。
CPO 定義:綜合衡量每次觸發(fā)補全機會給予用戶平均字符數。
公式解讀:嘗試率×反饋率×采納率×每次采納平均token 數×token 平均字符長度。
- 嘗試率:每當用戶在編輯器中進行操作,比如輸入新字符或刪除一些代碼時,都是 AI 給出補全建議的機會。嘗試率指標反映了 AI 實際為用戶提供建議的頻率。AI 不進行嘗試可能是由于延遲(如 Debounce)或需要根據上下文情況來決定是否給出補全建議。
例如,用戶敲擊了 10 次按鍵,只有 6 次觸發(fā)了請求,那么嘗試率就是 6/10。 - 反饋率:AI 在給出補全建議時是存在延遲的,包括上下文檢索到網絡開銷,再到實際模型推理,都會引入延遲。如果延遲太高,開發(fā)人員將繼續(xù)在編輯器中執(zhí)行新的操作,觸發(fā)新的推薦機會,并使現有推薦機會變得無意義。此外,在推薦完成后,工具可能因各種原因決定不向開發(fā)人員顯示建議,比如置信度不夠高、觸發(fā)了過濾器等。反饋率代表了有多少比例的建議最終被傳遞給開發(fā)人員以獲得人類反饋。
例如,用戶觸發(fā)了 6 次補全請求,最后只有 3 次被展示,那么反饋率就是 3/6。 - 低值預警:嘗試率和反饋率降低,會使用戶體驗下降,反饋缺失,需審視鏈路延遲與策略合理性。
- 采納率:反映了展示出的建議中有多少被開發(fā)者采納。
- 每次采納平均 token 數:在其它條件相同的情況下,較長和較短的代碼推薦所帶來的價值有很大差異。大模型以 token 的形式處理輸入,并生成輸出,這些 token 通常是一小段字符,因此每個被采納建議中平均 token 數反映了每條被采納建議所傳遞出的實際價值。
- Token 平均字符數:開發(fā)人員看到的是字符而不是 token,不同大語言模型可以有不同的分詞器,因此,如果一個大模型的每個 token 生成了更多字符,實際上它會寫出更多代碼,而每個 token 的平均字符數正體現了這一點。
有了這些指標,還需要一個 A/B 測試系統(tǒng),快速驗證和迭代模型、prompt 策略。首先,要進行離線評測,驗證模型和 prompt 工程的離線效果。但僅有離線評測難以準確判斷用戶體驗和整體性能。因此還需要一套 A/B 系統(tǒng),觀測線上核心指標表現。
2. 代碼補全 Pro
代碼補全適用于編寫全新代碼的場景,而研發(fā)中還會面臨修改已有代碼的挑戰(zhàn)。當前技術趨勢為,在模型訓練語料中加入帶有時間序列的操作,以強化理解邏輯順序。
代碼補全 Pro,旨在于編程助手場景中,準確識別用戶意圖,預測下一次光標位置,下一次行動是新增、編輯還是替換操作,以及下一次需要編輯的內容。
(1)概述
例如,打印日志的場景,開發(fā)者已實現一個 log 函數,并在 do_something 和 do_something_else 兩個函數中調用。
我們?yōu)?log 函數增加 sourceMethod 和 level 兩個參數,用于打印日志觸發(fā)時所在的方法及日志級別。這時開發(fā)者需要同時修改 do_something和 do_something_else 函數。智能解決方案為,由 AI 識別需求,自動完成參數添加,加速了編碼進程。
(2)數據構建
在 Git 倉庫中蘊藏著海量用戶編輯行為數據,可用于模型訓練。但這些數據中也存在很多噪音,需要構建一系列的啟發(fā)式規(guī)則,用于提取有關聯的編輯信息。利用 CT 與 SFT 格式,使模型精準理解數據,優(yōu)化推理與訓練效果。
三、未來展望
1. 編程助手業(yè)界趨勢觀察
編程助手領域發(fā)展非常迅速,模型方面,指令追隨和語義理解能力更強,模型具備代碼編輯能力,并支持更長的上下文,能夠達到百 K 甚至 M 級別。例如,要將中文轉換為 Unicode 編碼,過去可能只是給出冗長的代碼解釋,而現在可以直接給出 Unicode 編碼。
產品方面,IDE 原有交互與 AI 深度集成,比如在編輯器中支持輸入自然語言生成代碼。并且具有更強的代碼編輯能力,支持更長、更多代碼片段的修改和應用。
未來 AI 編程助手將以更精準的理解力與執(zhí)行力,變革軟件開發(fā)領域,促使編程更加順暢與高效。隨著模型持續(xù)優(yōu)化,技術壁壘進一步降低,將助力程序員群體創(chuàng)造力爆發(fā)。
2. 產品形態(tài)展望
(1)NL2Code 能力與編輯器深度集成
當前編程助手已具備 Inline Chat 能力,用戶可以通過快捷鍵喚起一個輸入框,在輸入框中輸入一些自然語言,即可讓模型來生成相應代碼。
JetBrains 支持直接在編輯器中通過自然語言生成代碼。而 VSCode 也通過 Inline Chat 支持了 NL2Code 的能力。
(2)Sketch then Generate
Sketch then Generate 倡導一種迭代式的代碼生成與修改方式,尤其適用于動態(tài)調整需求場合,旨在提升用戶體驗與開發(fā)效率。通過增量式的交互,使用戶可以獲得即時反饋,并可以直接在已有代碼基礎上進行修改。
針對大模型生成速度慢與穩(wěn)定性不足的問題,Sketch then Generate 的解決方案是根據用戶注釋或 prompt 引導模型生成中間態(tài)偽代碼。模型增量式生成,用戶實時調整,無需等待完整結果。偽代碼作為上下文反饋,模型迭代修改。用戶僅需發(fā)送,偽代碼與輸入直達模型,即時更新結果。
四、總結
本次分享介紹了豆包 MarsCode 編程助手的起源與發(fā)展歷程。強調其科學評測指標 CPO,并闡述了代碼補全 Pro 如何高效輔助用戶編碼,預測及推薦下一步代碼。
最后對發(fā)展趨勢進行了展望,未來將進一步強化模型追蹤能力、編輯能力和產品自動化,深度融合 AI 至 IDE 和編輯器,實現 Sketch then Generate 的增量互動。
豆包MarsCode 編程助手代碼補全 Pro 已推出 Beta,歡迎訪問 www.marscode.cn 下載體驗。同時,也歡迎大家關注豆包 MarsCode 公眾號,獲取更多技術干貨分享。
五、問答環(huán)節(jié)
Q:豆包 MarsCode 的定位與未來發(fā)展方向是怎樣的?
A:豆包 MarsCode 是基于豆包大模型打造的智能開發(fā)工具,提供編程助手和云端 IDE 兩種形態(tài),支持代碼補全、錯誤修復、AI 刷題等多種能力。無論你是新手程序員,還是經驗豐富的開發(fā)者,都能在開發(fā)過程中體驗到豆包 MarsCode 帶來的助力和效率提升。
豆包 MarsCode 編程助手兼容 VSCode 與 JetBrains,提供即時編程支持;云端 IDE 目標是通過場景定制提升效率,長期著眼 AI 深度集成,提高代碼自動編輯能力,為用戶提供全方位、低門檻的技術體驗。
面向未來,豆包 MarsCode 雙軌并行,兼顧場景定制與專業(yè) IDE 建設。短期內側重場景優(yōu)化,長期規(guī)劃 AI 驅動的高度自動化解決方案,增強產品力。