News

JetBrains IDE 中的全行代码补全:您需要知道的一切

Read this post in other languages:

AI 编程仍然是一个众说纷纭的话题,但越来越多的开发者开始将 AI 融入他们的日常工作流中。 无论您是已经在争论中选择了自己的立场还是仍未做出决定,我们在 JetBrains IDE v2024.1 中提供的一项新功能都可能会引起您的兴趣:全行代码补全。 该功能由 AI 赋能,可在本地运行,不会通过互联网发送任何数据。

在这篇博文中,我们将详细介绍什么是全行代码补全、它的运作方式、支持哪些语言,以及您如何向我们提供反馈。

什么是 JetBrains IDE 中的全行代码补全?

JetBrains IDE 在最新的 2024.1 更新中添加了这种新型代码补全。 如下所示,它采用灰色单行建议的形式,根据当前文件的上下文补全代码行:

这些建议由我们专门针对不同语言和框架训练的专用语言模型提供支持。 模型在本地运行,不会通过互联网发送任何代码。

目前为 JavaKotlinPythonJavaScriptTypeScriptCSSPHPGoRuby 在以下相应 JetBrains IDE 中提供全行代码补全: IntelliJ IDEA Ultimate、PyCharm Professional、WebStorm、PhpStorm、GoLand 和 RubyMine。 未来几个月,我们计划将该功能扩展到 C#、Rust 和 C++,因此它也将登陆 Rider、RustRover 和 CLion。

请注意,全行代码补全功能已包含在 JetBrains IDE 的有效订阅中,无需额外费用,只需确保您使用的是 v2024.1 或更高版本即可。 如果您还没有订阅,也可以在 30 天免费试用期间使用此功能。

全行代码补全的运作方式

对于全行代码补全,我们有两个主要目标。 第一个目标显而易见,那就是帮助您节省时间并提高编码速度。 除此之外,我们还希望提供一种解决方案,解决某些组织在使用基于云的 AI 解决方案时所面临的限制。

下面将详细介绍全行代码补全如何帮助实现这两个目标:

  • 它在本地运行,离线也可用。 这意味着即使您没有连接到互联网,也能利用该功能。
  • 它不会通过互联网从您的计算机发送任何数据。 支持全行代码补全的语言模型在本地运行,这有两个好处。 首先,您的代码是安全的,因为它永远不会离开您的计算机。 其次,不会产生与云相关的额外费用,这也是此功能不收取额外费用的原因。
  • 它已深度集成到 JetBrains IDE 中。 所有建议都将采用适当的格式,IDE 将检查中括号和引号是否平衡。 此外,我们还利用静态分析功能和对代码的理解来过滤掉不正确的建议。 每种支持的语言都有自己的一套建议代码正确性检查。 最基本的检查(如未解析的引用检查)已为大多数语言实现,以确保 IDE 不会建议使用不存在的变量和方法。 此外,还支持自动导入功能。
  • 该功能旨在让您的工作流尽可能顺畅。 我们使用智能筛选功能,以避免显示那些往往会在添加后立即被明确取消或删除的建议。

有关更多技术细节,请参阅下文

全行代码补全与 AI Assistant 的比较

在 JetBrains IDE 中,可以通过两种方式从 AI 功能中获益:全行代码补全和 JetBrains AI Assistant。 我们知道这可能会让人感到困惑,所以我们来仔细看看它们的共同点和不同点。

全行代码补全和 JetBrains AI Assistant 都旨在帮助您更快地工作。 它们都超越了 JetBrains IDE 中已存在一段时间的标准补全。 不过,JetBrains AI Assistant 提供了更全面的功能集。它的功能不仅限于代码补全,还能为您提供很多其他功能,包括上下文感知智能聊天和生成测试或编写文档的功能。

请参见下表,了解两种 AI 功能的比较:

请放心,我们绝不会在客户代码上训练任何 AI 功能。 如果贵公司有严格的数据隐私规定,但您仍然希望利用 AI 加快工作流,全行代码补全可能是更好的选择。

为了向用户提供高水准、多元化、本土化的 AI Assistant 服务,JetBrains 目前正在与阿里云通义大模型商洽未来的合作事宜,为中国开发者带来 AI Assistant 服务。敬请期待。由于服务提供商的限制,一些地区的用户目前无法访问 AI Assistant。

内部运作

全行代码补全的骨干是一个编程语言特定的语言模型,该模型使用具有许可的开源代码数据集在内部训练而成。 语言模型的输入是文本光标前的代码,但对于某些语言,我们也会添加相关文件中的内容。 输出是模型建议的当前行的继续,以灰色显示。

语言模型的推理在本地计算机上运行。 为确保最高效的生成,模型推理在单独的进程中运行,并针对目标计算机的架构进行了大量优化。 例如,如果使用的是 x86-64 架构,模型将在 CPU 上运行,而如果使用的是 ARM64 架构,模型将使用计算机 GPU 的功能。

生成建议后,会应用一系列后处理步骤。 首先,我们会检查此建议在语法和语义上是否正确,然后进行智能过滤、格式设置、括号平衡和其他各种处理。 后处理对用户体验至关重要,因此我们会尽力只显示有价值的建议,而不会干扰您的工作流。

最后,您可能还想知道为什么我们决定采用单行建议。 AI 补全建议的长度是一种权衡。 虽然较长的建议往往会减少您的按键次数,但同时也会增加您的审查次数。 考虑到以上因素,我们认为补全一行代码是一个公平的折衷方案。

这一决定使我们能够在不明显降低建议质量的情况下缩减模型的规模。 在 2024.1 版的 JetBrains IDE 中,我们使用的语言模型拥有 1 亿个参数,上下文大小上限为 1,536 个词元,大约相当于 170 行代码。

如何调整功能

您可以在 Settings | Editor | General | Code Completion (设置 | 编辑器 | 常规 | 代码补全)中配置全行代码补全,所有设置都可以在 Machine Learning-Assisted Completion(机器学习辅助补全)部分下找到:

如果想关闭该功能,可以取消选中 Enable Full Line suggestions(启用全行建议)复选框。 或者,您也可以禁用支持此功能的插件。 为此,请前往 Settings | Plugins(设置 | 插件),切换到 Installed(已安装)标签页,然后查找 full line code completion(全行代码完成)。

如何提供反馈

全行代码补全仍在积极开发中,因此我们鼓励您与我们分享您的反馈。 您可以在本博文下方留言。 您也可以在此处为现有问题投票,或登录后点击右上角的 New Issue(新建问题)按钮创建新问题。

今天的文章就到这里了。 请试用全行代码补全,并告诉我们您的想法。 我们将继续进一步完善这一功能,目前的首要任务是支持 C#、Rust 和 C++,并与 AI Assistant 的多行代码补全更好地集成。 敬请关注更多动态!

本博文英文原作者:

Sue

Ekaterina Ryabukha

image description

Discover more