Copilot和Cursor的代码能力实测

VScode,嵌入式,AI

Views:  times Updated on May 15, 2023 Posted by elmagnifico on March 22, 2023

Foreword

一直听说Copilot已经很成熟,甚至有人没了都不习惯了,所以试一试Copilot。建议先学习一下Prompt,可以大幅提升Copilot的效率

Copilot

https://github.com/settings/copilot

Copilot 是由 Github 提供的AI编码辅助工具,它可以在编码过程中提供基于 AI 学习的编码建议。在很多情况下,只需要有注释或者函数名称,Copilot就可以实例完整的代码。

目前 Copilot 需要支付10美元/月或者100美元/年。首次使用可以试用2个月,按页面提示点击按钮以开通使用权限,当获得开通权限后,就可以在 Github 上使用 Copilot。

目前Copilot可以在VS、VScode、Neovim、JetBrain全家桶上作为插件使用,其他IDE也得要看有没有人写,没有的话就没办法了

购买

首先拿到2个月的免费试用,这必须要绑定信用卡或者paypal才能下一步

image-20230322221550449

image-20230322221838582

image-20230322221918353

VScode+Copilot

我本身不怎么用VScode,不过为了体验Copilot,只能通过这种方式了

安装VScode插件

image-20230515012854143

第一次试用的时候会提示需要登录Github,并且授权

  • GitHub Copilot Nightly 是先行版,新功能测试、实验性功能都在这个版本上,GitHub Copilot是正式版,需要体验最新功能可以使用这个,二者冲突。

GitHub Copilot Chat 是类似ChatGPT的对话框式交换的代码机器人,这种方式需要先拿到体验资格才能使用

https://github.com/github-copilot/chat_waitlist_signup/join

image-20230515013011653

  • 我还没拿到Chat资格,所以就不测了

没资格的话这个对话框是显示不出来的

测试

当代码补全消失以后,会出现下面的灰色内容

image-20230322222313728

但是如果代码补全不消失,他会一直不出现

image-20230322222613696

所以可能需要关闭代码补全以后,再用,设置中搜索intelli然后关闭30个建议提示

image-20230322222946764

对应的Copilot基本没啥设置选项

image-20230322223251265

可能是我测试的是esp-idf的环境,所以Copilot对他学习的比较少?实际写代码提示完全弱于IntelliSense,提示本身就慢几秒,至于演示的那种一下提示很多内容,那更是基本没有,能提醒一个函数名就算不错了。

当我使用Hal作为开头,假装初始化串口,总算获得了超量的代码,只是可惜HAl这都是库已经做好的东西,我为啥还要重写一遍他呢?

image-20230322231301542

或者反过来说,当我需要串口初始化的时候,假装我要写Hal,后面再改成别的名字,仅仅是为了这么个串口初始化,完全不值当

image-20230322231600234

编写整个文件

实际上编写文件或者根据描述编写代码有点不太行,它本身还是基于搜索的,只是显示结果并且帮你过滤了一下而已

image-20230326165315211

如果是用中文描述不太可行,用英文描述所需要写的内容和相关细节,我感觉有点困难

代码预测

可以给他部分代码,让他推断一下后面该写什么内容

image-20230326165754807

对于嵌入式而言,Copilot不是很合适,本身环境就不太兼容,提示也不够好

Pycharm+Copilot

Pycharm这里也是一样,先安装插件,安装完以后需要重启一下

image-20230322224056945

Pycharm这里授权有点麻烦,需要验证设备,输入验证码

image-20230322224743469

image-20230322224729766

授权以后,这里就是这样了

image-20230322224820924

image-20230322224920737

pycharm的选项稍微多了一点

image-20230322230738327

似乎比之前的c或者c++,提示多了一些,至少快了很多,而且明显在我还没输入明显内容的时候,就进行了预测提示

image-20230322224954044

继续测试发现,似乎只对某些关键词会有反应,比如unite test,某些常用的名称会预测提示更多的内容。

比如这里的open_file,会直接提示一大串内容出来,甚至有可能他还是对的。

image-20230322225236104

发现这个以后,我重新去VScode下测试,试用相同关键词,可以看到直接给出了一大串c文件的打开,甚至他print还是用esp的输出,我感动哭了,虽然是没啥用的代码。

image-20230322225459060

同理,我使用比较常用的嵌入式相关的函数名,发现完全没有提示,顶多提示我两括号…

image-20230322225743077

回到Pycharm,基本上常用的关键词,都能联想预测一堆内容出来。

image-20230322225931200

说明Copilot涉及到某些小众的领域或者平台,就不太行了。

VS+Copilot

这个有点懒的测了,实际上如果是C#开发,C#本身的代码预测,我感觉已经非常不错了,很多情况下可以直接预测一个完整的句子,甚至变量都会自动帮你根据上下文推断替换,而Copilot则多数情况都只会复读…而不会自动增加变量的序列。

所以如果是C#开发,那么自带的代码补全就已经非常好用了。

Cursor

https://www.cursor.so/

Cursor是和OpenAI合作基于GPT4的一个IDE,有点类似VScode,但是它可以帮你写代码,并且质量还可以的那种。

智能生成代码

Ctrl+K

询问代码含义

Ctrl+L

测试

输入的内容是基于esp32的串口读写,给出来的却是arduino的类似代码

image-20230326171108341

告诉他平台是什么,再看下

image-20230326171334994

这次给出来就合理了

image-20230326171604685

试了一下我的easycon,直接就开始胡扯了,还是太小众了

image-20230326171519007

小众文件测试

image-20230326171810975

image-20230326171905892

这里就有点胡写的意思了,但是看个大概还是可以的

image-20230326172055085

故意刁难

开源应该是搜不到任何dshot和stm32的dma相关源代码的,所以他也只能写出来dma配置,而pwm的配置完全没有

image-20230326172502301

输出到下面就截至了,代码太长了,从给出来的代码来看,依然是一个简单的pwm,而不是dshot

image-20230326172850264

代码讲解

甚至可以勾选一部分代码让他解释一下什么意思

image-20230326173026914

小结

Cursor的响应速度明显快于Copilot,并且由于有GPT4的语义理解的支持,输出的内容也比较靠谱。当然如果没有现成的代码,可能还是会遇到胡扯的情况

关于他底层到底是GPT3还是4,还有点小争议,但是无所谓,反正我又不用。

https://github.com/getcursor/cursor/issues/34

Prompt

由于Copilot的核心其实也是GPT,所以Prompt在这里也非常有用

可以参考下面的网址给出来的示例,学习如何写Prompt

https://www.clickprompt.org/en-US/github-copilot-samples/

Prompt 可以简单的理解为一种向机器描述你要他完成的任务的语言

主要是4个方面

  • 指令,他具体要干的事情
  • 上下文,给他一个上下文的概念,告诉他一个前提
  • 输出格式,对机器输出进行限制
  • 输入数据,提出的问题

image-20230515021355531

以这个为例子:

首先指令就是translate to i18n

上下文const ROLES = ["天才", "豪门弃子", "修炼废物", "冒险家", "孤儿", "情圣", "幸运儿", "强者", "屌丝", "学者"];

输出格式like: "天才" -> t("genius"), and use Output variable to save key-value: {"genius": "天才"}

你的输入const ROLES = [t("genius")

然后Copilot就会对此进行输出了

image-20230515022216928

实际上不是每个例子都能完美执行的

image-20230515022433204

这里预期输出应该是

const loras = promptMatch[1]
  .split(",")
  .map((item) => {
  const match = item.match(/<lora:(.+):.+/);
    return match ? match[1] : "";
})
  .filter((item) => item !== "");

实际上直接自动给你下一步了

如果每个程序都要先写这么一个Prompt,对于专业的人来说,还是稍微有点多的,特别是这种简单的任务,写Prompt并不见得比直接写代码要少,甚至你还不能保证你写的Prompt就是你想要的内容。

Summary

总结python、java之类的涉及实际业务比较多的,重复度比较高的代码,用Copilot的预测补全,可能确实不错,很多基础代码可以直接写完。但是像是小众一些的,比如嵌入式、插件等等比较小众的领域,Copilot完全不如普通的补全。

也可以让Copilot和自带的智能补全同时工作,从而形成互补,至于他的定价,每月10刀,那估计是赚不了我的钱了

Cursor目前是免费的,IDE比较小,工作起来也非常快速,体验很好,至于是否能用,我的回答其实和Copilot一样,再发展发展吧。

测试还是有不足的地方,可能需要专门学习一下如何写prompt才能更好的让Copilot发挥作用

反思

无论是chatGPT4、还是Copilot,总有人想用他来代替xx。从专业的角度来说,如果你所做的东西,可以被它替代,那说明什么?说明你不够专业,你写的代码还不如Copilot,你是不是该反思一下你的业务水平是不是有问题?某些时候他确实拥有比你更大的数据库,更全的知识库,甚至看过整个Github的代码,但是如果你连写出一个超过他水平的代码都没有,那我觉得你得钻研钻研你的业务水平了。

当一个AI只有10%人类水平的时候,我们只是笑笑,它是个菜逼。

当一个AI有30%人类水平的时候,我们依然只是玩玩,它还不能用

当一个AI有50%人类水平的时候,它能不能帮我做些什么?

当一个AI有80%人类水平的时候,你的业务水平达到剩下20%的人类了吗?

当人类文明水平无法超过对方的时候,还怎么和对方谈平等生存呢?

Quote

https://tutorials.tinkink.net/zh-hans/vscode/copilot-usage-and-shortcut.html

https://blog.csdn.net/jiangjunyuan168/article/details/126960128

https://blog.csdn.net/m0_46495862/article/details/128691032

https://zhuanlan.zhihu.com/p/615818924

https://www.v2ex.com/t/939646#reply0