Copilot 使用体验

我可能是全网最后一个体验 Copilot 的用户了。由于最新又在做一些好玩的小项目,而其中的很多基础逻辑都跟以前的项目很类似,因此摆在我面前的有两个选择:从以前的代码库中把相关代码抄下来,或者重新写一遍逻辑近似、但不完全相同的代码。

话说回来,虽然在不同的项目中要实现的逻辑是类似的(例如都要实现用户登陆的功能),但由于每个项目的具体应用场景存在区别,因此具体到每个项目中,相似功能的实现也存在较大差别,无法简单地复用先前的类似代码。我想到了 Copilot。

一张来自 Visual Studio Code 代码编辑器的屏幕截图,展示了用户在编写少数上下文的情况下,Copilot 插件能够根据用户上下文提供代码建议
Copilot 能够根据上下文自动提供代码建议,这是基于 OpenAI Codex 实现的

自从 Copilot 结束公众测试阶段、提供给所有开发者使用后,GitHub 对于 Copilot 的功能开始收费:除了特定开源项目维护者、学生以及教师之外,所有用户可以选择 10 美元/月或者 100 美元/年的两种不同订阅选择。这其中有趣的一点是,“开源项目维护者”的标准似乎是由 GitHub 通过一套未知的算法判断的。也就是说,有些用户进入 Copilot 的订阅页面之后,会收到“符合免费试用资格”的提示,从而可以免费使用 Copilot 12 个月的资格。当 12 个月过后,如果用户仍然是一名活跃的开源项目维护者,他/她仍可能有资格获得另外 12 个月的免费资格,以此类推。

而我显然不是上述人士。而不出意料,我点击进入 Copilot 的订阅页面后,也没有任何的免费试用提示。由于涉及到基础逻辑的开发并不是特别多、开发周期也不是特别长,我只订阅了 1 个月的 Copilot 用于体验,对 Copilot 有一些有趣的印象。

Copilot 使用体验

Copilot 能够实现一些简单、常用的逻辑建议。由于 Copilot 的训练数据主要是公开的代码仓库中的代码逻辑,所以对于常见的业务逻辑来说,Copilot 都能给出适当的代码补充建议。举个例子,对于后端应用程序来说,当一个用户成功登陆系统后,系统应当记录用户的登录会话(Session)数据。下次用户尝试继续进行操作时,需要传入对应的会话标识符(Identifier)或会话令牌(Token)以作鉴权。这中间可能出现的问题是,用户可能会传入一个过期或不正确的令牌。而当我写出一个名称为 def check_user_session_token( 的方法后,Copilot 能够根据实际情况生成下一行或者下一大段代码,其中通常就会包括一些对于上述场景的检查逻辑。

对于已有一些开发经验的程序员来说,在实际撰写代码之前,我们的脑海里就已经有关于如何正确撰写下一段代码的蓝图。在编写常见逻辑的场景下,Copilot 能够辅助程序员快速构造代码架构。而对于几乎没有经验的程序员来说,正如产品名字 “Copilot” 一样,Copilot 能够通过从公开代码仓库中学习到的知识来“指导”这些新手程序员撰写符合业务逻辑的代码。

但在我的使用体验中,Copilot 能做的所有的事情也仅仅是“辅助”程序编写。除了能生成一个“看起来正确”的程序架构以外,Copilot 没有考虑到一些常见的安全检查,也没有表现出理解复杂特定业务相关逻辑的能力。在我看来,虽然每个程序都有涉及到数据操作(CRUD)的部分,为计算机编写程序的乐趣在于对于每一个具体的问题,如何在不同条件中进行取舍,编写出能够快速、高质量解决问题的程序代码。人工智能程序学会根据代码库中的代码生成解决问题的“模版”,但对于特定具体业务的理解,以及如何在实际场景下通过代码逻辑来对问题进行思考和取舍,是我认为编写程序的乐趣所在。而对于这些细节的思考显然是目前像 Copilot 这样的工具无法完成的,也是人类程序员的价值所在。

人工智能辅助程序设计

Copilot 是基于 OpenAI Codex 构建的,这是基于 GPT-3 模型的一个变体。在撰写本文的前两天,OpenAI 刚刚发布了 GPT-4 模型。这几年最令人兴奋的事情就是在看似机器学习领域又走向了又一个瓶颈的时期,有几家行业领先的公司通过不断发布的改进模型向大家证明着机器能够实现的智能:从机器视觉、图片生成、对话、翻译,到通用自然语言任务处理,机器能够实现的本领越来越多。而更多的行业工作者愿意在日常的工作和生活中通过这些增强的人工智能模型来辅助他们的工作,比如代替一般目的的翻译工作,或者(像程序员一样)通过机器学习模型辅助撰写代码等。

GPT 系列模型已经向我们展示了机器学习模型能够达到的可能性。我相信总有一天,机器能够通过文本、推理等方式理解更复杂的问题,并且能根据机器对这些问题的理解,构造出更复杂的程序。这样的一天也许很快就会到来。而我正在思考的问题是,当这一天来到的时候,对于人类程序员来说,这个职业存在的价值在哪里?我们会变成给 AI 发送命令来操纵它们写程序的“操作员”,还是将更多时间解放出来,把注意力放在解决特定复杂问题的算法工程师,或者称
“问题解决者”?

这个世界对于技术的更迭速度远比我们想象中要快。当我们还在讨论用户发布内容的短视频平台是否已经代替以文字搜索为主要载体的站点(例如,Google)的时候,很多 ChatGPT 用户已经通过文字互动这一形式与人工智能生成的内容进行对话、学习了。就在几年前,计算机系的博士生论文还在争先恐后地在计算机视觉(CV)、自然语言处理(NLP)以及生成对抗网络(GAN)等领域进行研究时,更大、更通用的人工智能模型就像降维打击一样将这些特定领域用于一般目的的机器学习模型席卷到一丝都不剩:现在的通用语言模型在翻译任务上的表现比前几年最佳的翻译模型的得分还要高。因此保持一颗开放的心态,接纳变化,不断学习,才是重中之重。