slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
AI 驱动下的新 IDE:了解 JetBrains 如何实现
17611538698
webmaster@21cto.com

AI 驱动下的新 IDE:了解 JetBrains 如何实现

人工智能 0 1143 2024-07-22 11:20:24

图片

导读:我们刚刚测试了 JetBrains AI,这是一款新的多层 LLM AI 助手,适用于其集成开发环境 (IDE) 集合。

有使用 Java 的同学一直对IntelliJ 的评价很高,最近他们对 Rider for C# 的评价也很高。

当我有机会尝试JetBrains AI(一种自称为“AI 助手”的 AI 服务)时 ,也感到非常兴奋。这款软件是 “由 OpenAI 和 Google 作为主要第三方AI提供商提供支持”。

当人工智能技术如此频繁地变化时,我不确定哪些大语言模型的能力与某些任务相匹配,或者是否用哪个是个好主意,但是不依赖某个单个供应商确实更加有意义。

现在说到使用某个 LLM,每个专业开发人员的需求都略有不同,没有一种就是单纯光是“为我编写代码”。

开发者的两种突出需求模式是“代码完成”和“解释此代码”,这对于面对不熟悉的代码库的顾问来说非常有用。

生成单元测试也是一种选择项,尽管不对自己的单元测试负责会在某种程度上违反 Agile 原则。比如我个人不喜欢在 IDE 中提供代码示例,因为我可以浏览整体,但我知道有些人却很喜欢。例如,大多数开发者发现时间和日期功能正在变得非常不直观;有时复杂的系统无法变得更简单。这些例子是非常有用的。

本文将是对 AI 助理的评论,但是我第一次在 Mac 上使用 JetBrains IDE,因此需要进行一些管理工作。我有一个该 AI 服务的“许可证密钥”,我还尝试将其移植到社区版本上。

ReSharper 运行在 Visual Studio 上,而 Rider 是一个单独的 IDE,所以我选择了后者,以便方便查看 C#。我希望 AI 服务能够附加到它上面,在这一点上,并不完全清楚。

我最终安装了 Rider 的试用版本。下面从导入设置开始,满分搞定!

图片

在下一节中,我的问题立即得到了AI回答,味道还不错。

图片

这让我更加相信编辑器厂商已经考虑了用户成长路径。它一开始这样做产品,很明显,但是,我在看到其它很多的产品没有给予自己的服务足够的关注。注册完用户后,JetBrains 给我发了邮件,这样就成功注册了一个帐户,这样我便获得了一个免费许可证来做测试了。

图片

LLM 服务现在在很大程度上被视为一种附加组件,这使得“AI”感觉像是一种附加组件。我认为这不是 IDE 制造厂商的错误做法,我相信最终,这种类型的产品将存在于操作系统堆栈或更靠后的位置。

现在,我们必须等待某个大公司争取到 LLM 的主导地位,这时将个人用户推向明确的消费者地位。

代码注释与说明


我打开了一些游戏项目的代码,后面将要求AI做出解释:



static private List archetypes = new List();...public static List FetchArchetypes() { if (!archetypes.Any()) { ArchetypeTemplates tt = BackEnd.DataLoader.LoadGameData("Archetypes.json"); foreach (ArchetypeTemplate t in tt.Archetypes) { archetypes.Add(new Archetype(t)); } }

return archetypes;}


其中,Archetype 是游戏中的结构。最初,我将其作为 JSON 文件中的数组读取,并在本地重新创建该列表结构。

如果列表已经创建,我只需传递该列表即可。

    那么 AI 认为这是在做什么?它返回了一个全面的答案,其中包括以下两个亮点:

    • “最后,该方法返回 Archetypes 列表,其中包含基于 JSON 文件中的模板创建的 Archetype 实例。Archetype 类似乎代表游戏中的特定原型,此方法用于根据 JSON 文件中的数据填充所有原型的列表。”

    • “在这个特定方法中,值得注意的是,只有当原型列表为空时,才会执行数据加载和对象实例化。这意味着一旦原型被提取一次,对此方法的后续调用将返回相同的列表,而无需进行任何额外处理。这是一种常见模式,适用于加载或对象创建是一个繁重的过程,并且生成的数据在应用程序的生命周期内不会发生变化的情况。”


    所以,这里有几个好东西。AI 已经弄清楚了所讨论的 Archetype 可能用于游戏。这非常重要,在快速尝试理解代码时,理解意图和实用性很重要。

    AI 已经认识到我使用了后期实例化,为什么我要使用它,以及它是一个真正的模式。 它甚至还明白读取 JSON 文件是在其他地方完成的,但我们依赖于输入。

    然后,我直接从上下文菜单中请求AI进行代码重构建议:

    图片

    它建议将加载操作分解为单独的方法,以简化代码。我非常认可,几乎每个开发人员都会同意这一有效改进。

    它也可能还会抱怨代码里缺乏错误检测。

    代码完成

    下面让我们再尝试一些代码完成功能。我将使用 C# FlagsAtribute 来尝试Copilot 完成示例。


    下面的一段摘自于一篇技术文章:“当您想要高效地存储标志集(即一组使用按位运算操作的布尔值)时,可以使用 C# 中的 FlagsAttribute。”


    以下是一个简单的代码示例:


    [Flags] public enum Pets{  None = 0,  Dog = 1,  Cat = 2,  Bird = 4,  Rabbit = 8,  Other = 16}


    Flags 值以二进制幂增加,可以构建成一个集合。

    我删除了原有代码,并要求助手使用签名再重新生成它。它给了我生成了相关选项。首先检查标志是否在当前集合中的方法。它给出了这个函数主体:


    public bool CheckFullGameFlags(FullGameFlags flag){ return (InGameFullFlags & flag) != 0;}


    这是原来有的代码:

    public bool CheckGameFlag(FullGameFlags flag) => (InGameFullFlags.HasFlag(flag));


    虽然它没有给出现代级的 C# 方法,但HasFlag 正确地计算出了我想要将传入的Flag与集合进行比较。InGameFullFlags从上面的代码中找到了本地集合。

    然后我给了它 SetFullGameFlag 的免费签名。同样,命名约定中有足够的内容用于提示,我想添加新的 Flag:

    图片


    我再次点击曲线并使用“使用 AI 实现”,它生成了下面的代码,它还附带了完整的解释。

    void SetFullGameFlag(FullGameFlags flag){   InGameFullFlags = InGameFullFlags | flag;}


    这和我所拥有的是相同的(除了表达式主体标记⇒外):

    public void SetGameFlag(FullGameFlags flag) => InGameFullFlags |= flag;

    最后,对 ClearGameFlag 也做同样的操作,这只是对设置进行按位取反。再次,得到了完全正确的结果。

    我很高兴地将结果直接写入编辑器,作为代码完成直接搞定。而通过在侧面板中写入了帮助信息,AI 附带了大量的解释说明文字。

    结论


    总体来说,我认为 AI 助手的表现令人钦佩;对于许多开发者来说,AI 可能只是对 IDE 的一种期待,并不怎么太前实用。现在是时候改变想法了。


    此外, AI 助手的注册登录仍然是一个小麻烦,但这种情况最终会改变。我很快就启动并运行了整个 IDE 与 AI 助手,而且运行速度相当地快。


    在某种程度上,“Hi,看看!我们有人工智能”已经是当前 IDE 的标品了,因为操作环境在不断扩大,而大家的期望一步步在形成。


    相信到明年,其中大部分AI特性将作为 IDE 体验的一部分存在,就像今天使用的剪切和粘贴一样。

    作者:万能的大雄

    评论