最近,JetBrains 官方又发生了一件令人兴奋的事情:JetBrains AI Assistant 代码补全的的接受率上升了
,而明确取消率下降了。
不知道大家是否还记得去年11月份 JetBrains 官方公布的 AI 代码补全现状报告!文中有一张很酷的代码补全图表,就是它:
那现在 JetBrains AI Assistant 的现状如何呢?如何做到代码补全接受率上升的呢?我们一起来看一看!
我们知道 JetBrains AI Assistant 是使用模型的。那如何在现有的模型上,获取更好的结果呢?
重新训练生成模型吗?肯定不是!模型如何何时发布新版本,不是JetBrains 说了算!
下面就来看看 JetBrains 官方如何在不重新训练生成模型的情况下获得结果!
提供代码建议的 LLM,是 AI 驱动的代码完成的核心,但并不是全部。
代码补全的幕后发生了很多事情,尤其是在插件方面,比如决定:
有时侯,定义筛选规则并不那么简单。
简而言之,JetBrains AI Assistant只向我们展示实际使用的建议。
这意味着那些不需要的建议(那些我们可以取消、编辑或删除的建议)不会失JetBrains AI Assistant代码完成功能的强大功能。
JetBrains AI Assistant在指标方面,努力追求:
如何实现上面这一切呢?显而易见的答案是改进 completion 模型
。
改进 completion 模型,就没有那么简单了!
训练更好的模型需要大量资源。这既昂贵又耗时。
官方不存储用户的代码,也就看不到哪里出了问题,也就无法分析不良的建议。
仅靠上下文是不够的。因为用户行为以及建议与附近线路的匹配程度等因素也很重要。
官方没有走上改进完成度LLM的漫长道路,而是采用了不同的方法:轻量级本地滤波器模型
。
轻量级本地滤波器模型
此模型在完成LLM项上运行,并使用匿名日志进行训练。
该模型通过分析以下内容来帮助决定是否应显示建议:
轻量级本地过滤器模型的工作很简单:它根据用户的行为决定是接受还是拒绝建议
。
但是,官方在训练期间对模型进行了一些指导。特别重视明确的用户的行为动作,例如当您明确接受或取消建议时,如果您在接受建议后编辑或删除该建议,我们会将其视为不太成功 - 更改的越多,它的权重就越小
。
从技术上讲,轻量级本地过滤器模型
是使用 CatBoost 构建的,效率高且不需要大量数据。
该模型经过专门设计,采用轻量级设计,经过训练后,它会变成一个紧凑的 2.5 MB 文件,并直接在用户的计算机上以 Kotlin 运行,在 1-2 毫秒内做出预测。
在官方的 EAP 中的 A/B 测试显示出很好的结果,而且它们还在变得更好。
过滤器模型将接受率提高了 ~50%,并将显式取消率降低了 ~40%,同时保持了完成代码的比率稳定。
目前,官方在 JetBrains IDE 2024.1 版本中正式推出了过滤器模型
,适用于多种语言,包括 Java、Kotlin、Python、PHP、JavaScript/TypeScript、Go、CSS 和 Ruby。
JetBrains IDE 2024.1 之后的补全率已经明显提升~ 题外话说一句:最近 AI Assistant 的效果确实不错了,从小二哥这里购买的小伙伴也较之前多了~
官方激活在以后的版本中,介绍 C#、C++、Rust 和 HCL,以及使用 Python、Java 和 Kotlin 中的 Mellum 进行云补全的本地过滤器模型。
同时,本地代码完成模型和轻量级本地过滤器模型都在不断发展和改进。
个人觉得 JetBrains 这一招棋走得非常牛逼!
即使LLM已经做得很好,也总有改进的余地。不然就不会持续又新版本出来啦!
另一个点是:对于我们应用层面来说,并不总是需要庞大、复杂的模型来产生影响。有时,巧妙地使用日志等额外数据可以解决问题。
期待 AI 驱动的代码补全走得更好、更远!
大家可以在下面的评论中分享您的想法哦!