前言
作为一个爱好偷懒的程序员,在听说了代码补全工具Copilot的第一时间我就入手并在日常工作中使用了。到目前为止我已经使用了超过半年的 Copilot。这个工具确实能够给我的工作代码编写带来极大便利,能够节省大量的编码时间。这个月初有幸接触到国产的开源项目CodeGeeX(点击阅读原文可以获取中文文档),出人意料的是,这个工具也挺好用的,某些功能甚至超过了 Copilot 的表现。下面我将从门槛等4个方面来比较一下两个代码生成工具的特点。
门槛
作为一款国产开源项目,CodeGeeX 是零门槛的,并且免费提供。而 Copilot 的前身为最近开发 ChatGPT 大火的公司 OpenAI 的 CodeX 项目,现在收费,需要 10 美元/月或者 100 美元/年,有两个月的试用期且对学生免费(GitHub Education Pack)。并且由于 Copilot 使用的是GitHub上的代码及API,可能需要设置代理才能够流畅地访问。另外两者都在 VS Code 及 JetBrain 的 IDE 上提供插件可以非常便利的使用:
vs_code_plugin
jetbrain_pluginCopilot 需要GitHub账号登录,而 CodeGeeX 可以直接使用。两者的快捷键都很完备,都支持使用tab补全代码,还可以使用Option(Alt) + [/] 来切换备选的提示项。不同的是 CodeGeeX 还有一些其他的模式,比如翻译模式(将一种语言的编码转换成另一种语言),也有对应的快捷键。
keymap响应时间
在 VS Code 上加载两个插件,从计时上看,CodeGeeX 的加载时间是要比 Copilot 要长的:
codegeex_initial_time
copilot_initial_time另外,在我日常编写代码的时候,主观上我觉得 Copilot 的反应,或者说给出提示的时间是比 CodeGeeX 要快一些的。
代码生成
在一次重构代码中,分别尝试使用 CodeGeeX 和 Copilot 预测代码,两者的表现几乎相同:
codegeex_generate_code
copilot_generate_code两个工具都在第一行生成了我需要的代码。但是 CodeGeeX 生成的代码差强人意,它提示了一行我根本没有使用的变量。
注释生成
在使用注释生成代码上,CodeGeeX 几乎是吊打 Copilot。首先我用 Copilot 想仿造情人节用最简单的方式绘制爱心中的方式生成一个带爱心桃的网页,尝试了两次都失败了。第一次我只输入了iloveyou作为备注,Copilot 只能生成一段文本代码:
iloveyou第二次我尝试给 Copilot 更多精确提示(generate a heart),希望它能直接生成一个带爱心的网页。结果事与愿违,它给了我一个红色的三角形:
generate_a_heart接着我又尝试通过注释生成一个二分算法,CodeGeeX 能够轻松识别注释并给出代码提示:
codegeex_binary_search但是,在 Copilot 的尝试中,它第一次傻傻的给了我一个二叉搜索树:
copilot_binary_search_tree我决定再给 Copilot 一次机会,按下了enter,结果 Copilot 给我提示了一段意义不明的链接:
copilot_binary_search_link我打开这段注释中的链接,万万没想到,它居然给了一道题,题目是 LeetCode 上的经典第一题,二数之和:
question_link结语
通过上面的比较,我认为 CodeGeeX 是可以作为 Copilot 的平替的,在一些特殊场合还能玩出花儿来。而现阶段在代码生成的方面不如 Copilot 的主要原因很可能是数据收集还不够。如果使用的人数够多,收集到更多的代码用于训练,应该能够比肩 Copilot。
当然如果有机会也可以尝试 Copilot,并且对比一下两个工具生成的代码,不要完全依赖某一个工具。另外还有一点需要提醒的是,两者可能都用到了开源项目的代码训练,有可能会违反某些开源项目的 license,具体有什么影响现在还未可知,有待进一步观察。
推荐阅读: