JetBrains IDE 中的 AI 代码补全是怎样炼成的?|技术解析
我们也在 AI 方面投入了大量时间和精力,让代码补全发展成为一个比以往任何时候都更精准、快速和智能的强大功能。
在这篇博文中,我们决定分享 JetBrains IDE 中 AI 代码补全的原理 ,它的 发展历程 以及 即将取得的激动人心的进展 。我们开始吧!什么是 JetBrains AI 代码补全?
JetBrains 通过两种方式提供 AI 代码补全:
- 内置在 JetBrains IDE 中的本地全行代码补全 :直接在您的机器上运行, 无需连接互联网 即可提供实时建议,这种方式可以确保快速提供专门针对您的项目上下文的建议。
- 由 JetBrains AI Assistant 提供的基于云的 AI 代码补全 :使用云资源提供更精确的代码补全,这种方式所利用的计算能力要比本地资源可以提供的计算能力更强大。
2024.2 版本主要是针对全行代码补全的用户体验改进,扩展了整个管道。但我们也改进了质量和红色代码筛选。此外,我们还发布了对 Rider、CLion、RustRover 和 Terraform 的支持。
基于云的 AI 代码补全呢?
此主题涉及的内容过于庞杂,无法一一介绍,因此,我们将尽量总结一些我们收到的主要用户反馈,然后再探讨我们是如何克服客户发现的问题的。
- 问题一:建议频率有限 在之前的版本中,我们采取了保守的方式,即只有用户按下 Enter 键时才会触发代码补全。采用这种设计的原因是大量 LLM 需要相当长的时间进行处理。但我们意识到这种方式不够实用,因为用户在编码过程中不会频繁地按 Enter 键。 🌟 Fun fact:一个开发者一天按 Enter 键的次数平均只有 70 次左右。
- 问题二:难以阅读大段的灰色多行建议 想象一下,您正在编写一小段简单的函数,而补全功能却建议了非常庞大的代码块,这让您很难看到文本光标后的下一行。较长的补全需要更多时间来检查和集成,因此可能打乱工作流。
- 问题三:建议不可预测 除了上述问题之外,还存在的一个问题是,模型有时生成的建议并不完全符合用户预期。虽然很多建议是准确的,但仍存在提供扩展枚举变量创建、中间出错或以对话方式响应的情况。大量 LLM 需要几秒钟才能生成建议,因此用户会察觉到延迟。为了获得高效的体验,代码补全必须快速作出响应。
- 对于 Java 、 Python 和 Kotlin ,从 2024.2 版本开始引入
- 对于 Go ,从 2024.2.1 版本开始引入
- 对于 PHP、JavaScript/TypeScript 、 CSS 和 HTML ,从 2024.2.2 开始引入
我们会在 2024.3 版本中将所有语言切换到高级管道和新模型。
以下是我们已实施的部分基本改动:
高亮显示文本,而不再以灰色显示为了方便阅读模型生成的大段建议,我们现在会高亮显示建议的代码。这一改动旨在减轻开发者的认知负担。通过使用可以感知语法的高亮显示,建议现在的观感与手写代码十分相似,因此更易于快速浏览和评估。
大模型通常更擅长处理各种类型的任务,而定制的代码模型则在处理专门的任务方面表现更优。定制代码模型的优点还包括控制能力更强、无需进行提示工程,以及延迟更低。这些优点在我们这里已得到验证。通过训练相对较小、高度专业化的模型并增强推理机制,我们显著提高了代码补全的准确性和速度。请密切关注我们的后续博文,我们将在其中分享有关此模型的更多详细信息。
我们完全重新设计了多行建议的显示方式,特别是与 IDE 内弹出窗口补全结合使用的情况(之前无法实现这一功能)。
这是我们的用户一直在问的问题!现在,您可以按词例或逐行接受补全建议。
- 逐字接受 – ⌥ → / Alt + Right 。
- 逐行接受 – ⌘ → / Ctrl + Right 。
- 与之前一样,您可以通过 ⇧ ⌥ / / Shift + Alt 明确调用补全。
新的云补全好用吗?
非常好用!
没有什么比在线日志更棒了。根据 2024 年 8 月收集的数据,我们已经通过用户反馈和使用指标看到了一些积极的成果。我们看一下针对 Java、Python 和 Kotlin 的三种不同设置:
- JetBrains AI Assistant 2024.1 中的旧版基于云的 AI 代码补全
- JetBrains AI Assistant 2024.2 中的新版基于云的 AI 代码补全
- 2024.2 中的本地全行代码补全
对新版云补全的接受率普遍高于全行补全,一直优于旧版的云补全。
与旧系统相比,从开始输入到显示建议的整体补全延迟也大大缩短。
2024.2 中显示的每日补全次数已远远超过 2024.1 版本中的次数。通过生成更加相关的建议,它的表现始终优于速度更快的本地模型。
但我们有意缩短了新版云补全的平均补全长度。我们会更加慎重地提供多行补全,确保不会干扰您阅读代码或思考解决方案。我们计划在测试过程中完全确认多行建议会得到正面评价后逐步在更多位置显示多行建议。
后续计划
我们将继续完善本地和云补全,包括为云补全添加更多多行建议、为本地补全引入多行建议、支持更多语言、提高模型质量、增强用户体验等。
我还想借此机会感谢每一位提交过反馈和报告过问题的用户 – 您的贡献直接促成了改进和功能的完善。感谢各位,并希望大家继续提供反馈!您可以在这篇博文的评论中、 AI Assistant 插件页面 上或 YouTrack 上分享您的想法。JetBrains 补全团队全体成员 ❤️
本博文英文原作者: Kirill Krylov
调研报告 2023 开发人员生态系统现状 Python 开发者年度调查 代码审查工具报告
IDE 使用技巧 IntelliJ IDEA 的 HTTP 客户端全揭秘 新 UI 宝藏功能集锦 10个热门 IDE 主题推荐 IDE 中的“快速功能” 最被低估的快捷键 新 UI 宝藏功能集锦