原文链接:https://github.blog/2024-02-22-how-ai-code-generation-works
作者:Jeimy Ruiz
本文为机翻并转载(ps:原文广告原样保留
)
探索 AI 代码生成的功能和优势,以及它如何改善企业的开发人员体验。
生成式人工智能编码工具正在改变企业的软件生产。不仅仅是因为他们的代码生成能力——从漏洞检测和促进对不熟悉的代码库的理解,到简化文档和拉取请求描述,他们从根本上重塑了开发人员处理应用程序基础设施、部署和他们自己的工作体验的方式。
我们现在正在见证一个重要的转折点。GitHub Next研发团队首席研究员兼成员Albert Ziegler表示,随着人工智能模型变得越来越好,拒绝采用就像“要求办公室工作人员使用打字机而不是电脑” 。
在这篇文章中,我们将深入探讨人工智能代码生成的内部工作原理,探索它的运作方式、功能和优势,以及开发人员如何使用它来增强他们的开发体验,同时推动您的企业在当今的竞争格局中前进。
人工智能代码生成是指由机器而不是人类开发人员生成的全部或部分代码行。这项新兴技术利用先进的机器学习模型,特别是大型语言模型(LLM),来理解和复制人类生成的代码中的语法、模式和范例。
ChatGPT 和 GitHub Copilot 等人工智能模型支持工具接受了自然语言文本和来自公开来源的源代码的训练,其中包括各种代码示例。这种培训使他们能够了解各种编程语言、编码风格和常见实践的细微差别。因此,人工智能可以根据开发人员的输入生成语法正确且上下文相关的代码建议。
我们的 AI 支持的结对程序员 GitHub Copilot受到55% 开发人员的青睐,它根据您组织的代码库跨数十种编程语言提供情境化编码帮助,并针对所有经验水平的开发人员。借助 GitHub Copilot,开发人员可以通过三种方式使用 AI 生成代码:
自动补全是人工智能代码生成的最早版本。GitHub Copilot团队的 ML 高级研究员John Berryman解释了用户体验:“我将编写代码并暂停思考。当我这样做时,代理本身也在思考,查看相邻选项卡中的周围代码和内容。然后它会以灰色“幽灵文本”的形式出现在屏幕上,我可以拒绝、部分接受或完全接受,然后在必要时进行修改。”
虽然每个开发人员都可以从使用 AI 编码工具中获益,但经验丰富的程序员往往更能感受到这些收益。“在很多情况下,特别是对于熟悉环境中的经验丰富的程序员来说,这个建议可以加快我们的速度。我也会写同样的东西。点击‘tab’(从而接受建议)比我自己写出这 20 个字符要快。” GitHub Next 首席研究员Johan Rosenkilde说道。
无论开发人员是新手还是高技能开发人员,他们通常都必须使用不太熟悉的语言进行工作,而使用 GitHub Copilot 的代码完成建议可以提供帮助。“使用 GitHub Copilot 完成代码确实有助于加快我的学习速度,”Berryman 说。“我经常会接受这个建议,因为这是我自己不会写的东西,因为我不知道语法。”
使用人工智能编码工具本身已经成为一项无价的技能。为什么?因为使用这些工具练习编码的开发人员越多,他们使用它们的速度就越快。
对于在陌生环境中经验丰富的开发人员来说,GitHub Copilot 等工具甚至可以帮助他们唤起记忆。
假设开发人员导入了一种他们以前没有使用过或不记得的新型库。也许他们正在寻找标准库函数或参数的顺序。在这些情况下,通过编写评论让 GitHub Copilot 更明确地了解开发人员想要去往的地方会很有帮助。
“开发人员很可能不记得公式,但他们可以_识别_公式,并且 GitHub Copilot 可以通过提示记住它,”Rosenkilde 说。这就是自然语言注释发挥作用的地方:当开发人员在处理他们需要的代码的前几个字符时,它可以成为解释意图的捷径。
如果开发人员为其函数和变量指定具体名称并编写文档,他们也可以获得更好的建议。这是因为 GitHub Copilot 可以读取变量名称并将它们用作该函数应执行的操作的指示符。
突然间,这改变了开发人员编写代码的方式,变得更好,因为具有良好变量和函数名称的代码更易于维护。通常程序员的主要工作是维护代码,而不是从头开始编写代码。
“当你推送该代码时,有人会对其进行审查,如果代码命名得当,甚至其中有一丝文档的提示等等,那么他们可能会更轻松地审查该代码,”Rosenkilde 说。从这个意义上说,开发者和AI编码工具之间的共生关系不仅对开发者有利,而且对整个团队有利。
借助人工智能聊天机器人,代码生成可以更具交互性。例如,GitHub Copilot Chat允许开发人员通过要求代码解释代码、改进语法、提供想法、生成测试和修改现有代码来与代码进行交互,使其成为管理编码任务的多功能盟友。
Rosenkilde 使用 GitHub Copilot 的不同功能:
“当我想做某事但不记得怎么做时,我会输入它的前几个字母,然后等着看副驾驶是否能猜出我在做什么,”他说。“如果这不起作用,也许我会删除这些字符,然后在评论中写一行,看看副驾驶是否能猜出下一行。如果这不起作用,那么我会转到副驾驶聊天并更详细地解释我想要做什么。”
通常,Copilot Chat 返回的内容比您从 GitHub Copilot 代码完成中获得的内容更加详细和完整。“也就是说,它向你描述了你想要做什么以及如何完成它。它为您提供了代码示例,您可以回复并说,哦,我明白您要去哪里了。但实际上我的意思是这样的,”罗森基尔德说。
但使用人工智能聊天机器人并不意味着开发人员应该放手不管。如果不加以控制,推理错误可能会导致人工智能犯更多错误。Berryman 建议用户与聊天助手的交互方式与与人类结对编程时的交互方式大致相同。“带着它来来回回。告诉助手你正在处理的任务,询问它的想法,让它帮助你编写代码,并批评和重新引导助手的工作,以使其保持在正确的轨道上。”
GitHub Copilot 旨在帮助开发人员执行他们的想法。只要有一些上下文可以利用,它就可能生成开发人员想要的代码类型。但这并不能取代开发人员之间的代码审查。
无论是否涉及人工智能编码工具,代码审查对于维护软件项目中的代码质量和可靠性都发挥着重要作用。事实上,开发人员越早发现代码开发过程中的错误,成本就越低。
普通的验证是:代码是否解析?测试有效吗?对于人工智能代码生成,齐格勒解释说,开发人员应该“对其进行足够详细的检查,以便确保生成的代码正确且没有错误。因为如果你以错误的方式使用这样的工具并接受一切,那么你引入的错误将花费你比你节省的更多的时间。”
Rosenkilde 补充道:“与另一个人的评论是不一样的,对吗?这是两个开发人员之间的对话,讨论此更改是否适合他们在该组织中构建的软件类型。GitHub Copilot 并不能取代它。”
当开发团队在整个软件开发周期中使用人工智能编码工具时,他们会体验到许多好处,包括:
人工智能代码生成可以通过自动执行重复且耗时的任务来显着加快开发过程。这意味着开发人员可以专注于高层架构和问题解决。事实上,88% 的开发者表示在使用 GitHub Copilot 时感觉工作效率更高。
Rosenkilde 回顾了他自己与 GitHub 的 AI 结对程序员打交道的经历:“95% 的时候,Copilot 给我带来快乐,让我的一天变得更轻松。这不会改变我本来要编写的代码。它不会改变我编写它的方式。它不会改变我的代码的设计。它所做的只是让我更快地编写相同的代码。” Rosenkilde 并不孤单:60% 的开发人员在使用 GitHub Copilot 时对自己的工作感到更加满足。
更快开发的好处不仅仅在于速度:它们还可以减轻完成繁琐任务所带来的脑力劳动。例如,在调试时,开发人员必须对出错的地方进行逆向工程。检测错误可能需要挖掘无穷无尽的潜在隐藏位置,从而使其成为重复且乏味的工作。
Rosenkilde 解释说:“有时,当您进行调试时,您只需要创建无法绕过的打印语句。值得庆幸的是,Copilot 在打印报表方面非常出色。”
高达87% 的开发者表示,在 GitHub Copilot 的帮助下,他们在重复性任务上花费的脑力消耗更少。
在软件开发中,上下文切换是指开发人员在不同的任务、项目或环境之间移动,这可能会扰乱他们的工作流程并降低生产力。他们还经常应对处理多个任务、记住语法细节和管理复杂代码结构的压力。
借助 GitHub Copilot,开发人员可以绕过多个级别的上下文切换,留在 IDE 中,而不是在 Google 上搜索或跳转到外部文档。
“当我撰写自然语言评论时,”Rosenkilde 说,“GitHub Copilot 代码补全可以帮助我。或者,如果我使用 Copilot Chat,这是在我所处的环境中进行的对话,我不需要解释那么多。”
使用人工智能生成代码可以帮助开发人员卸下回忆每个细节的责任,使他们能够专注于更高层次的思考、解决问题和战略规划。
Berryman 补充道:“通过 GitHub Copilot Chat,我无需重新陈述问题,因为代码永远不会离开我信任的环境。我立即得到答复。如果有误会或后续问题,很容易与他们沟通。”
在将任何人工智能应用到工作流程中之前,您应该始终彻底检查和测试工具,以确保它们非常适合您的组织。以下是一些需要牢记的注意事项。
此外,在评估 AI 编码工具时,还要考虑客户支持、与现有系统集成的难易程度、性能和用户体验等因素。最后,彻底评估该工具与您组织在每个领域的特定要求和优先级的契合程度非常重要。
请访问 GitHub Copilot 信任中心,了解有关安全、隐私和其他主题的更多信息。
简短的回答是:也许吧。
让我们首先给出这个问题的一些背景。整个代码库并不是真正由人工智能生成的,因为人工智能生成的大部分代码很可能是错误的。标准代码审查流程是避免这种情况的好方法,因为大量完全自动生成的代码对于人类开发人员来说根本无法工作。
对于少量人工智能生成的代码,目前还没有办法真正可信地检测代码中人工智能的痕迹。有些产品旨在对内容是否包含人工智能生成的_文本_进行分类,但代码的等效项有限,因为您需要一个专用的模型来完成此操作。Ziegler 解释说:“计算机生成的代码足够好,不会留下任何特定的痕迹,而且通常没有明确的线索。”
在 GitHub,Copilot 团队使用重复检测过滤器来检测代码中的精确重复项。因此,如果您正在编写代码并且它是其他地方存在的内容的精确副本,那么它会对其进行标记。
人工智能代码生成并不比人类生成的代码更不安全。测试、手动代码审查、扫描、监控和反馈循环的组合可以生成与人工生成的代码相同质量的代码。
当涉及 GitHub Copilot 生成的代码时,开发人员可以使用代码扫描等工具,该工具会主动实时检查代码是否存在潜在的安全问题,并将检查结果无缝集成到开发人员工作流程中。
最终,人工智能代码生成将会存在漏洞,但人类开发人员编写的代码也会存在漏洞。正如齐格勒解释的那样,“目前还不清楚计算机生成的代码是否表现得特别糟糕。所以,答案不是如果你有 GitHub Copilot,就使用漏洞检查器。答案是_始终_使用漏洞检查器。”
观看此视频,了解有关人工智能安全编码最佳实践的更多提示和建议。
虽然使用人工智能代码生成工具的好处可能很大,但值得注意的是,人工监督对于确保生成的代码符合项目目标、编码标准和业务需求仍然至关重要。
技术领导者应该拥抱人工智能代码生成的使用,不仅可以简化开发,还可以使开发团队能够协作,推动有意义的业务成果,并为客户提供卓越的价值。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!