1、DataFunSummit#2024DataFunSummit#2024豆包豆包MarsCode 落地編落地編程助手場景的探索實踐程助手場景的探索實踐李文超/開發工具技術專家豆包豆包MarsCode 編程助手起編程助手起源源豆包MarsCode 的現狀與發展未來展望01豆包MarsCode 編程助手起源 IDE 智能化探索 開發者對 AI Coding 的訴求 豆包MarsCode 的歷程IDE 智能化探索開發者對 AI Coding 的訴求豆包MarsCode 的歷程 2022 年初代碼智能團隊開始探索 LLM 驅動的代碼補全產品 自研代碼 LLM 評測集和自動評測系統 構建數據鏈路和線上
2、A/B 測試體系 引入基于對話的編程助手 更高自動化編程能力 引入代碼補全 Pro 編輯推薦功能 更多.豆包豆包MarsCode 編程助手起編程助手起源源豆包豆包MarsCode 的現狀與發的現狀與發展展未來展望02豆包MarsCode 的現狀與發展 代碼補全 代碼補全 Pro Prompt 工程 科學的測評體系 概述 數據構造 產品交互代碼補全-Prompt 工程代碼補全-科學的測評體系 代碼補全的采納率不是好指標 只關注采納率進行優化,容易被誤導 采納率=采納次數/推薦次數 不容易拆解分析,歸納可指標鏈路優化路徑 更適合作為體驗指標代碼補全-科學的測評體系 CPO-更科學的指標(Codei
3、um)嘗試率:每當用戶在編輯器中進行操作,比如輸入新字符或刪除一些代碼時,都是 AI 給出補全建議的機會。嘗試率指標反映了 AI 實際為用戶提供建議的頻率。AI 不進行嘗試可能是由于延遲(如Debounce)或需要根據上下文情況來決定是否給出補全建議 CPO(Character per Opportunity)=(嘗試率)*(反饋率)*(采納率)*(每次采納平均 token 數)*(token 平均字符長度)例子:用戶敲擊了 10 次按鍵,只有其中 6 次觸發了請求,那么嘗試率是 6/10代碼補全-科學的測評體系 CPO-更科學的指標(Codeium)反饋率:AI 在給出補全建議時是存在延遲的
4、,包括上下文檢索到網絡開銷再到實際模型推理都會引入延遲。如果延遲太高,開發人員將繼續在編輯器中執行新的操作,觸發新的推薦機會并使現有推薦機會變得無意義。此外,在推薦完成后,工具可能因各種原因決定不向開發人員顯示建議:比如置信度不夠高、觸發了過濾器等。反饋率代表了有多少比例的建議最終被傳遞給開發人員以獲得人類反饋。CPO(Character per Opportunity)=(嘗試率)*(反饋率)*(采納率)*(每次采納平均 token 數)*(token 平均字符長度)例子:插件發起了 6 次請求,最后只有 3 次被展示,那么反饋率是 3/6代碼補全-科學的測評體系 CPO-更科學的指標(Co
5、deium)采納率:即使補全建議已經給到開發者,他們也可能覺得建議并不完美而拒絕。接受率反映了展示出的建議中有多少被開發者采納。CPO(Character per Opportunity)=(嘗試率)*(反饋率)*(采納率)*(每次采納平均 token 數)*(token 平均字符長度)如果展示的 3 次推薦,最后只有 1 次被采納,那么采納率是 1/3代碼補全-科學的測評體系 CPO-更科學的指標(Codeium)每次采納平均 token 數:在其它條件相同的情況下,較長和較短的代碼推薦所帶來的價值有很大差異。大型語言模型以 tokens 的形式處理輸入并生成輸出,這些 tokens 通常是
6、一小段字符,因此每個被采納建議中平均 token 數反映了每條被采納建議所傳遞出的實際價值 CPO(Character per Opportunity)=(嘗試率)*(反饋率)*(采納率)*(每次采納平均 token 數)*(token 平均字符長度)代碼補全-科學的測評體系 CPO-更科學的指標(Codeium)token 的平均字符數:開發人員看到的是字符而不是 token,不同的大語言模型可以有不同的分詞器,因此,如果一個大語言模型的每個 token 生成了更多字符,實際上它會寫出更多代碼,而每個 token 的平均字符數正好體現了這一點 CPO(Character per Opport
7、unity)=(嘗試率)*(反饋率)*(采納率)*(每次采納平均 token 數)*(token 平均字符長度)代碼補全-科學的測評體系 通過 A/B 快速驗證和迭代模型、Prompt 策略代碼補全 Pro-預測下一次動作代碼補全 Pro-概述舉個例子:打印日志的場景開發者實現了一個 log 函數,并在 do_something 和 do_something_else 兩個函數中調用代碼補全 Pro-概述接下來我們給 log 函數增加 sourceMethod 和 level 兩個參數,用于打印日志觸發時所在的方法及日志級別。這時開發者需要同時修改 do_something()和 do_som
8、ething_else 函數代碼補全 Pro-概述為什么不讓 AI 完成修改的操作呢?當我們在 log 函數增加兩個參數,自動在 do_something 和 do_something_else 兩個函數中,將參數補齊代碼補全 Pro-產品交互代碼補全 Pro-數據構建 Git 倉庫中海量的 commit 歷史記錄是個巨大的數據寶庫,包含了豐富的用戶編輯行為信息 Git commit 信息中的噪音也是很多的,需要構造一系列的啟發式規則,用于提取出有關聯的修改記錄 通過 CT 和 SFT 模型能夠理解 diff 格式數據豆包豆包MarsCode 編程助手起編程助手起源源豆包豆包MarsCode
9、的現狀與發的現狀與發展展未來展望03未來展望 編程助手業界趨勢觀察 產品形態的展望編程助手業界趨勢觀察 模型模型 指令追隨和語義理解能力更強 模型具備代碼編輯能力 更長的上下文支持,百 K 甚至 M 級別長度 更多.產品產品 IDE 原有交互的深度集成,比如在 Editor 中支持輸入自然語言生成代碼 更強的代碼編輯能力,支持更長、更多代碼片段的修改和應用 更多.產品形態的展望 NL2Code 能力與 Editor 深度集成 VSCodeJetBrains產品形態的展望 Sketch then Generate總結代碼補全代碼補全 Pro 已已 beta,歡迎訪問歡迎訪問 (國內國內)起源 MarsCode 編程助手的歷程 現狀與發展 科學指標-CPO 代碼補全 Pro 預測下一步要編輯的代碼 展望 模型有更強的推理和代碼編輯能力 AI 能力深度集成到 Editor 與 Sketch then Generate關注公眾號,獲取更多技術干貨關注公眾號,獲取更多技術干貨DataFunSummit#2024DataFunSummit#2024THANKS