英语轻松读发新版了,欢迎下载、更新

Tabnine 从构建 AI 代码助手中学到了什么

2024-12-18 16:06:45 英文原文

作者:Mary Branscombe

开发商继续两者兼而有之好奇和怀疑了解 AI 编码工具,但也准备好使用它们。加特纳说14% 的企业开发者三分之一的开发人员已经在使用人工智能编码助手Docker 的 2024 年人工智能趋势报告正在使用人工智能进行编码,43%的编码员(特别是前端、全栈和云基础设施开发人员)Stack Overflow 2023 开发者调查已经在使用人工智能工具。

许多使用人工智能进行编码的开发人员从 ChatGPT 复制并粘贴(其优点是免费)。说到集成代码助手,虽然许多其他助理从那时起,GitHub Copilot(清晰的Gartner 近期魔力象限中的领导者) 曾是最受欢迎的去年 Stack Overflow 调查中的工具。

第二受欢迎的是可以被认为是原始人工智能代码助手的 Tabnine。它比 GitHub Copilot 早大约四年,每月拥有超过 100 万活跃用户,并承诺了企业所说的他们看重的一些东西:隐私和保密

您可以将 Tabnine 作为服务部署在您自己的云租户或您自己的基础设施上,在您自己的代码库上对其进行训练(Copilot 可以使用这些代码库作为上下文,但不会对其进行训练或微调)并让它使用信息从开发人员的 IDE 添加上下文(包括当前选择的代码、当前和其他打开的文件连接的存储库、对话历史记录、Git 历史记录、导入的库、项目元数据以及编译、语法和运行时错误等详细信息)。您还可以在多个 IDE 和不同的源代码管理平台中使用它。

组织可以选择 Tabnine 使用哪种大型语言模型(选项GitHub Copilot 有最近介绍的)。这包括该公司仅使用经过许可的开源代码进行自我训练的模型。

指出,这些都是企业表示关心的事情彼得·瓜根蒂,塔布宁总裁。– 他们关心隐私,因为他们担心对其系统的访问会被用来对付他们。或者至少,他们允许供应商泄露真正关键的客户和员工见解及其代码,而当这种情况发生时,他们就会失去对此的控制。”

“企业利益相关者要求以负责任的方式使用人工智能代码助手,”Gartner 在其报告中指出AI 代码助理研究的关键能力。同样,首席信息官在调查中说版权和许可侵权问题甚至可能阻止他们采用生成式人工智能代码助手,或者至少使他们无法使用花钱保护自己来自索赔。但在实践中,这些良好的意图似乎让位于表现。

“当我们创建法学硕士时,我们只接受许可的开源代码的培训,”Guagenti 说道。– 我们知道我们正在做的事情会逊色于其他事情,但我们认为对于我们正在做的事情来说这是正确的事情,并且我们可以使用私有技术来缩小其能力上的差距访问客户代码。

– 每个人都认为法学硕士是国王,但他们不是。其实,他们它们只是房子的地基。”
– Peter Guagenti,Tabnine 总裁

他声称,使用客户自己的代码库作为上下文并微调模型可以很好地提高性能,至少对于大型工程团队来说是这样。

– 每个人都认为法学硕士是国王,但事实并非如此。事实上,它们只是房子的地基。事实上,人工智能代码助理的价值不在于法学硕士本身所做的事情,而在于其应用的背景,”他说。

让代码库了解开发人员 IDE 中打开的内容,可以将程序员接受 Tabnine 助手建议的速度提高 40%。他指出,通常情况下,客户会因为隐私问题而选择 Tabnine,但由于版权问题,受保护的模型往往是他们首先询问的问题。

– 我们的受保护模型的最新版本的性能与 GPT 3.5 一样好,尽管它是在相当小的数据集上进行训练的,而且我们实际上可以告诉您 – 它—一切都允许。 –但 GitHub Copilot 现在使用

通用技术4(和 GPT-4o 用于聊天和拉取请求摘要)。– 他们将 Tabnine 和受保护模型的性能与 Claude 或命令 R+或者其他非常强壮的人之一,他们接受过一切他们能刮擦的训练。”

Guagenti 将受保护模型的性能描述为“十分之七”。 - 克劳德和其他人的得分是十分之八半,如果你真的突破了界限的话,可能是十分之九,但是并不是一个巨大的差异。但是,即使是性能上的微小差异也往往比潜在的道德问题更重要。– 当他们看到差异时,我会告诉你,令人惊讶的数字会说, – 啊,实际上,我们不不再关心许可证合规性。 –

这种实用主义(也出现在 LinearB 的研究中他认为,(尤其是在组织部署了 genAI 编码工具之后)不应责怪组织,因为这些问题涉及社会认为什么是可以接受的,而 IT 团队则被要求以最实惠的价格提供高生产力和高性能价格可能。

“选择这些工具和使用这些工具的内部动机与我们谈论人工智能道德时所面临的情况不一致,这与之前的任何其他技术没有什么不同。”

这种差异并不令人意外凯特·霍尔特霍夫RedMonk 的高级分析师,它强调需要了解这些工具如何影响开发人员工作流程及其生成的代码。

– 我们当谈到代码助手时,我们仍然处于产品开发的“把意大利面条扔到墙上,看看什么能粘住”的阶段。
– RedMonk 高级分析师 Kate Holterhoff

“人工智能代码助手供应商预期开发人员想要的内容与从业者实际使用的内容之间存在真正的脱节,”她解释道。– 我们当谈到代码助手时,我们仍然处于产品开发的“把意大利面条扔到墙上,看看什么能粘住”的阶段,这就是为什么它—关注在线论坛和会议走廊等渠道中表达的真实开发者情绪非常重要。”让AI编码助手更成功

使用人工智能代码助手时还存在其他悖论,因为它更了解您自己的代码库,而不是其他人代码的集合,因为您拥有的代码可能不是您获得所需结果所需的代码。

组织希望对自己的代码进行培训以获得最相关的建议,但这几乎肯定包括您不想复制的遗留编码实践,因此您必须选择代码库中能够按照您想要的新代码方式工作的部分去工作。

——[想象]我在一个组织中,我有 3000 万行代码, – 假设埃兰·亚哈夫Tabnine 联合创始人兼首席技术官。– 其中 700 万是我不希望任何人看到的遗留代码。我不想让你连接到那个,我不想训练那个;我不想让你连接到那个。我不想让[代码助理]知道它们的存在,除非可能是作为一个反面例子。”

他警告说,对于大多数组织来说,遗留代码、过时的库、过时的工件和已弃用的编码模式的示例可能比您希望助手建议的代码类型要多得多。代码不仅比几代员工的寿命更长——公司里没有人知道 20 年前的代码是做什么的——而且它是否如果员工或生成人工智能盲目地复制最多的例子,很容易最终得到他所说的“新遗产”。

“新遗留代码是公司的新人通过查看遗留代码并模仿其中出现的内容来创建新的遗留代码,”Yahav 解释道。– 架构师或开发工程师经理试图消除某些库或某些 API 或某种做事方式,但因为人们看到它突然出现,无论是通过人工智能还是搜索,并不断模仿,他们正在创造新的遗产. –

如果开发人员不知道要使用哪个版本的库(因为团队还没有策略或精心策划的工件存储库),他们可能会选择其他代码中已有的版本他们一起工作,训练和微调人工智能模型也是如此。– 如果你使用人工智能助手并将其连接到所有遗留信息,那么每当人们询问如何做某事时,他们总是会得到旧的答案,因为那有最多的例子。除非你小心翼翼地被遗留下来的木星级引力所吸引。”

即使这不会引入在新版本的工件中修复的漏洞,或者意味着您违反了编写原始代码时不存在的法规,您最终也可能会混合使用新旧方法,并且得到与两者都不一致的东西。

新近度可以是一个信号,但最安全的选择是在开发团队已经熟悉的相对较新的代码上进行培训并获得 AI 帮助,这样他们就知道如何评估建议,然后继续进行他所说的工作 –遗产和旧代码的摇摇欲坠的领域——

采用在您自己的代码上进行训练的人工智能助手可以让对该代码进行更改以使其作为训练数据变得更好是值得的,因为人工智能的投资回报更加明显(特别是如果您在工具中跟踪一整套工程指标)喜欢法罗斯或者线性B)。

一些 Tabnine 客户已经完成了重要的代码重构和文档方面的大量工作,以使代码帮助更好地工作。

“保持秩序并不是一个优先事项,但现在它会进入另一个流程 [AI 助手],并且变得更加优先。”
– Tabnine 联合创始人兼首席技术官 Eran Yahav

“帮助人工智能的同时也帮助了人类,所以这不仅仅是为 Tabnine 完成的工作,”Yahav 指出,“它的工作已经完成,因为我们进来时竖起了一面镜子,反映了代码库的状态。代码质量不仅仅意味着错误更少:它还意味着提高开发人员生产力,因为它更容易使用,但通常会优先考虑将代码发布出去。

他很清楚,这并不是批评现有代码或编写代码的开发人员,而是批评优先级、截止日期和可用资源。– 代码不干净的原因并不是因为人们愚蠢或懒惰,而是因为他们必须发布它并且它有效。使其井然有序并不是一个优先事项,但现在它会进入另一个流程,并且变得更加优先。”

最后优先考虑文档

文档是经常资源不足且通常过时的领域之一:开发人员可能会抱怨文档缺失,但很少将其视为优先事项,并且交付文档通常不会得到足够多的认可例如编写代码或修复错误。借助 AI,您可以清楚地看到添加文档的价值。

——我Yahav 说:“我们看到人们开始向零文档的关键组件添加文档。”– 这对人工智能有帮助,但也有助于任何冒险进入这个项目并试图了解什么的人事情还在继续。通过添加这些文档,宇宙[对人类]变得更好,但这不是动机。如果检索系统对什么内容有额外的解释,它会做得更好—正在发生的事情无法从代码中推断出来,只有编写这段代码的人才知道。”文档需要解释特定设计选择的基本原理,而不是代码的作用。

文档需要解释特定设计选择的基本原理,而不是代码的作用。

– 人工智能知道代码的作用:但做出这个设计决策的原因是一些额外的信息,可以帮助使用人工智能的人全面了解这个东西是什么或者为什么它看起来像这样。 –

Yahav 建议,该文档中的信息变得更有价值,因为它可能会间接地出现在不同的上下文中,更多的人会发现它有用,而不仅仅是寻找如何做某事的开发人员。

以 JIRA(或任何工作管理系统)为例,其中问题作为要完成的工作的隐式合同。– 人们 [在 JIRA 中] 编写的问题通常不是很复杂。显然,开发人员讨厌编写它们,而产品经理(取决于组织的规模)也讨厌编写它们,因为它确定了功能,然后开发人员说,“嘿,这比你告诉的要多得多”票上有我,我不会那样做。”每个人都讨厌 JIRA 问题的合同。”

塔布宁罐头自动生成代码以匹配 JIRA 问题例如故事、错误或任务(或者验证代码是否确实捕获了问题中的需求,如果没有,则建议代码改进),使用问题中的文本作为生成的代码的上下文。– 这是开发者第一次真正在为人工智能提供足够信息的问题上拥有既得利益。票证中包含的信息越多,人工智能就越能为您提供帮助。这会改变人们使用该系统的方式,因为现在有明显的动机来确保系统的准确性和全面性。Ø

Guagenti 很快指出,这种“问题到代码”自动化并不是试图取代开发人员,并将其描述为适合简单的用例,例如简单的 React 应用程序。– 它不会为您提供 DoorDash;它不会给你真正创新的东西。”

是的,人工智能代码助手已经可以为他们非常适合的任务提供他所说的“荒谬”的改进。– 他们现在花费的时间是以前的 20%;如果你做得好的话,某些任务有 80% 的自动化因素,90% 的自动化因素。”—这意味着您需要更少的开发人员;这意味着开发人员可以将时间花在更重要的事情上(并花时间学习如何充分利用他们使用的人工智能编码工具)。

Gartner 发现使用代码助手的好处与基本生产力一样重要的是开发人员体验:减少任务切换和维护流程状态,通过帮助扩大单元测试覆盖范围来提高代码质量和可维护性,编写更一致的代码注释和更清晰的拉取请求 - 这反过来又可以减少技术债务和让开发者将更多的时间花在高价值的工作上。

– 任何认为软件开发人员将完全消失的人都是在自欺欺人。”
– 瓜根蒂

Guagenti 表示,人工智能“只是推动技能设置,让我们能够制作更大、更复杂、更有趣的应用程序。”充分利用人工智能代码助手的组织和团队将通过以下方式做到这一点:投资于他们的开发商。– 我们我们会期望他们更有创造力、更有创新性、更有能力、花更少的时间在黑客活动上。”

– 任何认为软件开发人员将完全消失的人都是在自欺欺人。有很多很多事情我们可以完全自动化,但仍然需要有人来设计系统。仍然需要有人接受用户需求或业务需求,并将其转化为实际解决该问题的愿景。”

团体 用草图创建。

关于《Tabnine 从构建 AI 代码助手中学到了什么》的评论


暂无评论

发表评论

摘要

将人工智能代码助手集成到软件开发工作流程中,有望显着提高开发人员的生产力和体验。然而,实现这些好处需要一种强调文档和开发人员技能重要性的战略方法。### 要点:1. **文件事项:**- 文档经常被忽视,但在使用人工智能代码助手时变得至关重要。- 向关键组件添加全面的文档有助于人类开发人员理解复杂的系统,并使人工智能能够提供更准确和与上下文相关的建议。- 设计决策的详细原理应包含在文档中,而不仅仅是代码功能的描述。2. **开发者体验改进:**- 使用AI代码助手可以减少任务切换,并通过自动化重复任务来帮助维护开发人员流程状态。- 改进评论、拉取请求和单元测试的一致性,从而提高代码质量并减少技术债务。- 开发人员可以更加专注于创造力和创新等高价值工作。3. **自动问题到代码生成:**- Tabnine 等 AI 工具可以根据 JIRA 问题自动生成代码,使这些票据中的文档变得更有价值。- 通过为全面的问题描述提供明确的激励,这改变了开发人员使用工作管理系统的动态。4. **对开发商的战略投资:**- 充分利用人工智能代码助手的组织投资培训和提高开发人员的技能,以有效地利用这些工具。- 这包括培养创造力、创新和更好的系统设计,而不是完全自动化开发人员的角色。5. **维护开发人员角色:**- 虽然人工智能可以自动化许多任务,但它并不能取代对熟练软件开发人员的需求,他们可以设计系统并将用户需求转化为功能应用程序。- 开发人员的角色将演变为更多地关注高级问题解决而不是常规编码。### 实际步骤:1. **加强文档实践:**- 鼓励提供带有基本原理和上下文的完整文档,而不仅仅是代码描述。- 使用人工智能从现有代码库生成的见解来识别文档中的差距并确定改进的优先顺序。2. **利用问题到代码自动化:**- 将 Tabnine 等工具集成到您的工作流程中,以根据详细的 JIRA 问题自动生成代码。- 确保激励开发人员编写全面的票证,其中包含自动生成的所有必要详细信息。3. **提高技能的开发人员:**- 为开发人员提供有效使用AI代码助手的培训和资源。- 专注于培养设计思维、创造性解决问题和高级系统架构等领域的技能。4. **评估和优化工作流程集成:**- 持续评估人工智能工具与您的开发流程的集成。- 寻找机会通过自动化来简化任务、保持流程状态并减少技术债务。通过战略性地集成人工智能代码助手,同时强调文档实践和开发人员技能提升,组织可以显着增强其软件开发能力。这种方法不仅提高了生产力,而且还培育了更加创新和高效的开发环境。