![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
尽管几个月前介绍了一些巧妙的 ChatGPT 壮举,但我没有采取下一个合乎逻辑的步骤来尝试 Github 的 AI 编码支持工具 Copilot。然而,我的兴趣在上周被激发了,因为我的一位同事分享了一张 AI 生成的测试套件的屏幕截图。
提示相当简单,生成的测试用例是相关的;足以让我想要订阅 GC 免费试用并为奇点事件的到来做出贡献。
我将避免详细介绍 Copilot 能做什么或不能做什么:其他人已经预料到了我。对我来说有趣的部分是我如何接受这项新技术。
在这篇文章中,我还将使用 Github Copilot 作为基准来推断今天“用于编码的 AI”可以做什么,因为我认为它代表了该领域的最新技术水平。
在软件领域思考 AI 时,许多自发的问题浮现在脑海中。
有用吗?危险吗?它会夺走我们的工作吗?最重要的是不要让自己陷入局限的心态,让我们的情绪围绕人工智能形成一些奇怪的叙述——无论是作为新卢德主义者还是乌托邦式的技术爱好者。
相反,我发现其他类型的问题更有趣,也更容易回答:这些问题并不意味着回答“是”或“否”,而是通常以“什么”、“何时”和“何地”开头。
例如,如何将 Copilot 集成到我的日常工作中?它促进了哪些任务,需要哪些个人技能?
人工智能在我们工作中的价值对于软件工程师来说是最清楚的。尽管如此,我明白其他各行各业的人可能会严重错误地判断可能性是什么,尤其是因为许多内容创作者或记者喜欢通过建议灾难性场景(或承诺现在任何人都可以使用构建软件)来吸引眼球。
是的,基于 GPT-3 和最近的 GPT-4 的工具确实可以编写代码,是的,生成的代码通常会编译并执行预期的操作。
然而,这并不一定代表对我的工作安全的直接威胁,因为编写代码并不是软件工程师真正做的事情。让我详细说明一下。
我们的工作不是将代码输入文本编辑器。我们不是速记员。这项工作是关于决定编写什么代码。事实上,每当我设计软件并最终开始在我的 IDE 中输入一些东西时,我已经在脑海中记住了下一段代码会是什么样子。
在这一点上,人工智能只是连接点,立即生成我想要的方法或数据结构,减去无意识的拼写错误或其他明显的错误。
即使AI 可以贡献超过 80% 的代码库,给出适当的提示(最初的 20%)也是必不可少的,因为它携带了 GC 正确运行所需的大量信息。如果没有键盘后面的工程师,您将不会得到初始提示。
我相信可以与飞机自动驾驶仪进行很好的比较。 AFCS(Auto-Flight Control System)可以完美地执行各种飞行操作:调整飞行路径,接近机场,甚至着陆。
我仍然不会梦想在没有任何人工监督的情况下跳上商业航班。
计算机能够控制飞机这一事实并不意味着飞行员就可以闲坐在驾驶舱内。
还有很多事情要做:检查前方的天气、与空中交通管制部门沟通、规划备选路线,以及最重要的是,监督自动驾驶仪并在需要时掌控局面。
因此,我们可以看到飞行员仍然是驾驶飞机的人。
以类似的方式, AI 不开发软件,而工程师开发软件。人工智能是一种工具。工程师经过培训可以通过使用自动化来简化他们的工作流程,但他们将始终监控他们的工具在做什么。如果它没有按预期运行,工程师将介入并纠正这种情况。
这是我在使用 Copilot 时的心态:我很乐意将琐碎的任务委派给它,但与此同时,我会警惕它会产生什么样的输出。
如您所知,Copilot 的底层 ML 算法称为 GPT-3,它可以预测最有可能生成的令牌序列。虽然生成的代码通常在语法上是正确的,但这些工具不知道规范是什么以及生成的代码是否有效。
一个可能的对策是帮助 GC 进行一些及时的工程:例如,写一条评论说明下一个片段的作用是帮助 AI 的强大技术。
更好的是,有时甚至可以在输入前几个词后自动生成评论。
然而,必须要说的是,即使在最理想的情况下,Copilot 也不会总是提供有用的建议,或者在这种情况下根本不会提供任何建议。虽然 GC 非常棒,但我认为它作为一种编码工具仍然非常不完善。
目前,我还没有决定是否将 Copilot 完全纳入我的工具集中:其建议的随意性有时会成为一个障碍。
在任何情况下,我都建议每个人都试一试,至少尝试一次:将其视为一种实用工具,就像您的语法高亮器或您最喜欢的 IDE 的自动完成功能一样。
你对 Github Copilot 有什么看法?您是否将它融入了您的日常工作,或者这对您来说是一个艰难的过程吗?不要害羞,请在评论中告诉我!