1、NES 模型训练的探索逐云目录010203040605我们做了什么数据工作模型训练模型评测未来展望01NES场景的探索我们的工作我们做了什么Aone 大图我们做了什么应用入口产品能力基础能力底层依赖常规补全和NES 对比常规补全NES补全的问题无法修改既有代码:补全范围被严格限制在光标位置,对于修改、重构前文代码的需求束手无策。触发方式单一死板:仅在用户输入字符或回车后触发。当用户希望在代码的任意位置(尤其是存在语法错误处)获得智能提示时,往往需要额外输入或删除字符来“唤醒”Copilot。难以应对连续性任务:当一项修改涉及多处代码时(例如,为方法增加一个参数,并更新所有调用点),传统补全需要
2、用户手动跳转、多次触发,过程繁琐且效率低下。数据格式探索格式需要满足以下功能修改范围:由指定位点-全文可控能力范围:续写-增、删、改输入格式:#User Import Files代码片段#Similar snaps:代码片段#User Edits:User edited file_path_1:Edit diff_1#Lint Error:Error信息#User Excerpt:file path-origin code-编辑区域代码-cursor位置-编辑区域代码-原始代码#Response:输出格式:Rewrite code snippet待解决问题有效信息片段选择格式设计选择输出样式满
3、足修改范围和能力要求数据格式探索-输出格式输出格式1:Rewrite code snippet输出格式2:Code diff:-start line num-end line num-code 输出格式3:Rewrite code file主要问题:是否支持多处修改操作模型推理要求模型对数字敏感程度低数据格式探索-输出格式串联组合模型方案:模型由location model+rewrite model并联模型组合方案模型由常规补全模型+NES模型单模型方案单一rewrite模型实现NES功能,同时具备单行补全和多行改写的能力。单行模型NES模型方式FIM(fill in the middle)
4、Rewrite能力续写增、删、改输出tokenavg 20tokenavg 500token单行模型功能是NES功能的子集,续写是改写的特殊情况,其次效果上看,当前模型同时具备查找代码错误并修改代码错误的能力,且rewrite可避免行号偏移问题。推理方式speculative decoding(投机采样)推理速度1000token/s基于字符串/token匹配的投机采样模型方案确定1.有效信息2.推理速度3.迭代方案02NES场景的探索数据构建数据构建关键要素:用户编辑历史(时间序列)完整的代码独立单元(代码操作实现一个功能点)Repo级别代码(跨文件修改代码)NES(next edit su
5、ggestion):根据用户输入的内容,预测代码文件中需要修改的内容,预测的动作是用户时间序列操作队列的延续,同时也是对用户编写代码中引入问题的修正,是一个功能更全面的代码辅助工作模型。数据构建-单行补全扩充方案1.用户pair数据:有用户拒绝数据和用户拒绝之后修改的数据,可以作为多行编辑的修改内容,用户从错误的数据修改为正确数据2.用户采纳数据:1.以行为单位,如果采纳数据是原本数据扩写,我们可以认为是增删改中改场景。2.以行为单位,如果采纳数据是完整行生成,可以认为是NES中增场景3.用户拒绝数据:可以作为删除场景的数据。数据构建-AST 构建方案AST:抽象语法树(Abstract Sy
6、ntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现语言的语法结构,树上的每个节点都表示源代码中的一种结构。场景分类:1.变量名修改2.增加函数体3.函数入参变更优点:快速、规则化缺点:场景泛化能力不够,同意代码表现不佳数据构建-PR 构建方案PR数据:使用高质量pull request数据,每条数据满足单一功能开发需求。问题:如何构建用户编辑顺序如何构建编码顺序优点:方案简单高效、数据源头广缺点:数据不真实、依赖模型能力和数据复杂度数据构建-日志构建方案用户日志数据:数据包含用户编辑历史、代码lint error,可以获取r