1、豆包豆包 MarsCodeMarsCode 在在 AI AI Coding Coding 上的實踐與探索上的實踐與探索演講人:王城波目 錄01AI Coding的發展史02AI Coding的落地實踐03AI Coding帶給IDE的變革04AI Coding未來展望01AI Coding的發展史Code Copilot的過去已經接近 20 年的歷史基于靜態分析和規則,通過分析代碼的語法和結構來進行預測使用機器學習提取特征進行缺陷分析,預測潛在問題使用深度學習模型進行預測,例如 LSTM和Seq2Seq使用預訓練大模型進行預測,誕生了CodeCopilot,2022年火爆全球早期使用規則機器學
2、習時期深度學習時期大模型時期LLM 時代下的 AI CodingCursor+Claude 3.5 Sonnet,8歲小女孩45分鐘打造聊天機器人AI 已經可以合作驅動一些簡單項目的開發,人類開發軟件的方式正在發生變革IDE 與 AI 良好的人機交互體驗成為開發者選擇 AI IDE 的重要因素在 AI Coding 的輔助下,程序員的“門檻”會大大降低,開發效率將得到較大提升AI Coding 的機遇與挑戰LLM 在 AI Coding 領域的潛力和可能性毋庸置疑AI 正在給 IDE 帶來新的交互革命AI Coding 的落地仍需要腳踏實地,從效果出發如何從工程和算法側去優化已有的 AI Co
3、ding 能力?在 AI Coding 時代背景下,如何去設計一款 AI IDE?未來 AI Agent 能力的思考與探索02AI Coding落地實踐開發者對 AI Coding 能力的訴求代碼生成代碼理解問題修復知識問答代碼補全代碼補全NL2Code單測生成注釋生成代碼問答代碼問答代碼評審代碼搜索代碼總結代碼問題檢測Auto FixAuto FixLint問題修復配置錯誤修復通用知識聯網搜索三方庫問答代碼補全-原理如何定義一個好的測評體系來指導鏈路優化?代碼補全-測評體系1.構建合理的模型 離線評測集HumanEval不是一個好的測評集,不匹配真實項目代碼場景,刷分嚴重影響實際效果。自研評
4、級集的重要性自研評級集的重要性:引入真實項目中的跨文件上下文,針對性挖孔 進行評測,評估模型合理利用項目上下文的能力,文本+執行結果驗證。引入公司內部代碼數據作為評測題目,開源代碼和內部代碼的的差異往往很大。代碼補全-測評體系2.使用更合理的業務效果指標-CPO(Character Per Opportunity)不能只看采納率=采納次數/推薦次數,容易被誤導,無法指導后續優化CPO=(嘗試率)x(反饋率)x(采納率)x(每次采納平均token數量)x(token平均字符長度)CPO越高,代表Al貢獻越大,但也不能一味追求采納率表現用戶對Al推薦的感知價值在采納率不降低的情況下去持續優化CPO
5、3.建設完整的 A/B 測試能力用于參數和策略驗證如何去優化CPO?代碼補全-訓練優化1.高質量數據清洗(LLM Filter)2.Repo-Level 文件拼接3.挖孔策略優化原理:相比單文件形式的代碼數據,具有更 完整的語義信息,從中學習到 前后依賴關系,更有利于提升大模型邏輯推理能力。問題:如何篩選 開源項目 和 內部項目 中 高質量的代碼 進行訓練?常見策略:隨機字符、Token、AST 節點等 通用模型(如 GPT-4)構造 Prompt 對開源項目 代碼質量打分代碼質量打分 (結合可靠性、圈復雜度、可讀性等)根據標注數據訓練自研打分模型,篩選高質量代碼 用于訓練補全模型。MarsC
6、ode 的做法:先用隨機字符挖孔訓練補全,再挖掉完整的 AST 節點進行訓練補全 效果:模型更容易補全完整的代碼片段代碼補全-性能優化1.推測解碼2.多Token 預測補全性能是影響代碼補全非常重要的指標:好的性能指標:模型推理 300ms,端到端 500ms3.量化代碼補全-性能優化4.工程側 流式早停/截斷:達到完整 AST 節點即可截斷無需等模型完整輸出補全內容越“少”,用戶接受度越高代碼補全-上下文感知優化在有限的 Context Length 放入更高質量的 Context:1.Context Search2.Ranking Strategy倉庫內上下文倉庫外檢索增強構造用于檢索/排
7、序repo context的 Query根據補全位置,提取用戶意圖的關鍵信息排序算法,選取更適合的Context構造 Prompt代碼補全-前后處理鏈路優化前后處理鏈路重點是合理的發起補全請求,展示補全內容:1.前處理鏈路優化2.后處理鏈路優化降低 Debounce,配合 A/B 驗證效果低質量 Prompt 過濾線上 Bad Case 分析 識別并標注 低質量的 Prompt 數據 基于質量評估模型評估 Prompt 質量,過濾低質量Prompt流式 AST 截斷過濾策略優化,A/B 驗證效果線上 Bad Case 分析 過濾用戶已輸入的 過濾重復度高的代碼補全Pro-從預測下一個字符到下一
8、個動作代碼補全代碼補全 解決的是編寫全新代碼的問題,利用模型預測下一個字符模型預測下一個字符代碼補全代碼補全ProPro (多點編輯多點編輯)利用模型預測下一個光標動作模型預測下一個光標動作,解決多個新增、刪除、編輯替換動作Code editEdit propagationEdit generation代碼補全Pro-原理1.Git倉庫中海量的commitcommit歷史記錄歷史記錄是個巨大的數據寶庫 包含了豐富的用戶編輯行為信息用戶編輯行為信息3.基于LLM,通過 CT 和 SFT,模型能夠理解 diff 格式數據2.數據清洗:構造啟發式規則,提取關聯的修改記錄關聯的修改記錄和時間序列時間序
9、列4.基于LLM,推理預測下一個光標需要修改的行為5.原理論文:https:/arxiv.org/pdf/2408.01733代碼補全Pro-原理Subsequent edit analysis兩段編輯定位;粗粒度:文件級別細粒度:行級別Edit generation選擇在語法上和語義上相關的先前編輯Prior edit analysis生成編輯內容代碼補全Pro-原理Likelihood of file depends on edit Semantic similarity between file and edit 估算編輯 e 影響到文件 f 的概率:編輯 e 影響文件 f 的可能性編輯
10、 e 和文件 f 語義相似性代碼補全Pro-原理預測每一行的 Edit Operation基于 Masked language modelling(MLM)遮蔽每一行,預測 標記計算 3種類型的 Edit Operation:代碼補全Pro-原理Likelihood of target code depends on prior edit Semantic similarity between prior edit and target code Code distance between prior edit and target code 估算相關的編輯歷史用于 Prompt 構造:編輯歷
11、史影響目標代碼的可能性語義相似性代碼距離代碼補全Pro-原理基于 LLM 最終生成編輯操作Input:Code window,每行帶有 作為 beforeUser edit promptSelected Prior editsOutput:Edit ContentAI 倉庫問答-原理倉庫問答效果與相關代碼召回質量強相關,如何去設計整個代碼召回能力?AI 倉庫問答-基于 CKG 優化問答效果1.基于靜態分析建模2.自動構建 CKG基于 Control Flow Call Graph 建模靜態分析算法:CHA、PTA、k-CFA 全量 CKG 構建:切片,定期運行增量 CKG 更新:緩存更新.適配
12、多種語言,無需額外安裝LSP等依賴AI 倉庫問答-基于 CKG 召回策略1.多路召回2.Rerank3.實體關系召回通過query的多種特征進行實體召回,保證召回信息完備性對召回實體進行精煉和過濾,以保留最相關上下文實體關系召回:通過召回實體,進行實體語義關聯信息抽取(函數調用關系、類型依賴信息)模型基于 CKG 定義的數據結構訓練,效果較好AutoFix Agent場景需求配置錯誤編譯錯誤程序錯誤使用大模型+程序分析SWE-bench lite的分數正在快速被改寫技術趨勢預計很快就會達到50+%AutoFix AgentMulti-Agent Collaborative Framework0
13、3AI Coding帶給IDE的變革IDE 的發展趨勢更遙遠未來?IDEAI IDE代碼編輯器AI 加持(插件/Native)代碼編輯器AI IDE的設計要素良好的開發體驗AI原生加持隨時隨地的開發,支持跨終端跨終端和多場景多場景研發提效研發提效,更快的完成編碼集成化開箱即用開箱即用的開發環境,輕量化、極速性能良好的 AI AI 人機交互形態人機交互形態輔助決策輔助決策,提供高質量回答人人都有一個 AI 搭檔一站式部署能力研發系統集成多人協作IDE 的組件化架構組件化架構:跨終端支持跨終端支持:IDE Server 支持多種RuntimeClients 支持瀏覽器、本地IDE、iPad組件自由
14、組裝組件自由組裝:支持 Coze Plugin、Lite IDE場景等組合支持 AIAI 功能擴展和集成功能擴展和集成,靈活調用 IDE 組件IDE 的組件化架構通信協議優化:Server Rust實現:基礎通信協議不復用 VSCode 的 VSBuffer使用更高效的 msgpack_rpcmsgpack_rpc對 IDE Server 均用 Rust 進行實現相比 VSCode Node 版本,內存占用可降低 80%+04AI Coding的未來展望AI 會取代程序員嗎?不,但會出現超級程序員,特征是全棧,任何語言和框架都沒有門檻使用AI輔助工具可以完成極具挑戰的任務日均代碼量極高從AI輔助編程-AI驅動編程Copilot WorkspaceDevin.aiTHANKS大模型正在重新定義軟件Large Language Model Is Redefining The Software