[论文解读] Context Composing for Full Line Code Completion
本文提出了一种用于全行代码补全的上下文组合技术,采用参数量少于10亿的紧凑型设备端Transformer模型。通过优化上下文组合过程,包括分词、作用域感知的特殊标记符以及代码的策略性重排,该方法实现了高效、低延迟的代码建议,提升了开发人员的生产力,同时不损害隐私。
Code Completion is one of the most used Integrated Development Environment (IDE) features, which affects the everyday life of a software developer. Modern code completion approaches moved from the composition of several static analysis-based contributors to pipelines that involve neural networks. This change allows the proposal of longer code suggestions while maintaining the relatively short time spent on generation itself. At JetBrains, we put a lot of effort into perfecting the code completion workflow so it can be both helpful and non-distracting for a programmer. We managed to ship the Full Line Code Completion feature to PyCharm Pro IDE and proved its usefulness in A/B testing on hundreds of real Python users. The paper describes our approach to context composing for the Transformer model that is a core of the feature's implementation. In addition to that, we share our next steps to improve the feature and emphasize the importance of several research aspects in the area.
研究动机与目标
- 开发一种高效、设备端的代码补全系统,满足严格的延迟和内存约束。
- 通过构建反映程序员当前认知上下文的上下文,提升代码补全的相关性。
- 通过确保所有模型推理都在用户设备上本地执行,解决隐私问题。
- 在不依赖云模型的前提下,提升单行代码建议的质量。
- 探索上下文增强技术,以在不增加模型大小的情况下提升模型性能。
提出的方法
- 通过使用特殊标记符表示作用域变化,对源代码进行预处理,去除空白字符、注释并规范化缩进。
- 对清理后的代码和文件路径应用BPE分词,并通过特殊标记符组合,形成结构化提示。
- 通过拼接文件扩展名、文件路径和光标上方的代码来构建上下文,确保其符合模型的最大上下文长度。
- 使用特殊标记符如<LANG_SEP_CHAR>和<METAINFO_SEP_CHAR>来分隔输入提示中的语义组件。
- 实施一种策略,重新排列类方法和函数,将相关代码片段更靠近光标位置。
- 采用类似GPT和LLaMA的自回归Transformer模型,基于构建的上下文进行自回归标记生成。
实验结果
研究问题
- RQ1如何优化上下文组合以在设备端代码补全系统中最大化相关性和性能?
- RQ2重新排列代码片段(例如,将方法移近光标位置)对代码补全质量有何影响?
- RQ3哪些文件级上下文源(例如,最近打开的文件、相邻标签页)能为代码生成提供最相关的信息?
- RQ4在小型设备端模型的限制下,检索增强或上下文增强技术的有效性如何?
- RQ5在参数量小于10亿的紧凑模型中,哪些最有效的提示工程策略适用于代码补全?
主要发现
- 上下文组合方法在实际使用中显著提升了全行代码补全建议的相关性。
- 通过数百名真实Python开发者的A/B测试证实,生产环境中全行代码补全功能具有实际效用。
- 在离线实验中,采用检索增强上下文的方法实现了目标指标10%的可测量提升。
- 尽管符合开发人员直觉,但将相关方法重新排列至光标附近并未带来可测量的性能提升。
- 从最近打开或相邻文件中检索增强或上下文丰富化技术,展现出未来改进的强潜力。
- 在参数量少于10亿的模型上进行设备端推理仍然可行且高效,支持低延迟、隐私保护的代码补全。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。