有点标题党,不要太介意。我想表达的是不应该过于关注使用的工具。很简单的逻辑,只有自己工程能力不如 Cursor,才会觉得 Cursor 厉害,干什么都行。当然这句话属于比较空的废话。
事实上,Cursor 的代码补全能力没有比 GitHub Copilot 好多少,底层使用的模型是一样的,不是 Claude 就是GPT。而在工程化调教方面,Cursor 和 Copilot 都是在把一些文件作为 context,继续后面的对话。
Cursor 比 Copilot 好一点的地方在于,会自己去当前工程目录下,搜索和参考其他文件的写法,这一点确实有用,你不需要告诉他具体引用那哪些文件,他自己会不断的尝试,Copilot 这种插件是不具备这种能力的,这确实是好的一面,如果项目下存在大量可复用的代码,Cursor 可以比较好的发挥出它的能力。
但有时候又会觉得 Cursor 过度智能,它甚至会自己在你的工程下面创建新文件,而不需要经过你同意,这就导致在用 Cursor 的时候需要时刻关注,他是否改变了你预期之外的代码文件。相比之下,(GoLand 下的)Copilot 只是插件的形式,只会给出代码片段,用不用是你自己的事情。VS Code 下的 Copilot 现在和 Cursor 倒是有类似的体验了,会给你一个接受或不接受更改的选项。
所以相比来说, Cursor 和 Copilot 使用了一样的大语言模型(不会有人觉得 Cursor 自己训练了个模型出来吧),然后 Cursor 拥有更大的、项目级别的控制力,而 Copilot 像他的名字一样,只是辅助级别的能力,这是它们最大的区别。
回到模型本身,o1 是迄今为止最厉害的模型,在日常工作中深有体会,我经常用 o1 来精准定位编程中遇到的 bug,而对于相同的问题,其他模型往往给出错误或者不准确的解释,包括 o3-mini-high 和 4o。
比如,在调用智能合约的时候,原本的命令是
cast call requestPrice(string) "BTC" —-rpc-url=http://eth:8545
现在需要调用另一个函数,比原本的函数多了一个入参,我就直接复制代码写成
cast call requestPrice(string) "BTC" "USD" —-rpc-url=http://eth:8545
不知道你有没有第一时间看出问题?其实 4o 倒是给出了正确的分析,只是没有特别精准,给出了 3 种有可能的错误原因,而 o1 直接就说对了。
当然大模型之间的差异不会体现在这么微小的问题上,只是正好有印象就随便提一下,我想表达的是,从日常体验来看,o1 是最好用的模型。
我严重怀疑鼓吹 Cursor 的人,都是之前没有使用过 AI、体会过 AI 强大能力的人,在用到 Cursor 之后,才明白原来现在的生成式 AI 已经这么强大了,欣喜若狂。而当需要使用生成式 AI 的时候,他们的第一反应不是打开 ChatGPT 的聊天框或者 Gotk3 的界面,而是打开了 Cursor 的代码框,开始去聊天。
所以鼓吹 Cursor 的人,实际上是把生成式 AI 的能力,误以为是 Cursor 的能力,才因此觉得 Cursor 异常强大。
我在工作中就不止一次被强烈推荐使用 Cursor ,让我别再用 GoLand,还说出 “GoLand 就是垃圾” 这种话,Cursor 最好用什么的。
首先我一直觉得喜欢用什么编辑器是个人的选择,管这个干啥。其次如果觉得使用什么编辑器会给使用者带来鄙视链和优越感,未免有点小儿科。最后就是我喜欢用 GoLand 的理由,只有两点:1.箭头非常直观的表达了接口的实现关系。2.前进后退快捷键很好用。基于这两点,我才可以比较快速的读懂和理解代码。
也因此带来一个差异是,使用 GoLand 的人,往往更加关注代码逻辑,比如在寻找代码位置的时候,喜欢通过代码之间的跳转,例如接口的实现关系等。而使用 Cursor(VS Code)的人,更加关注项目的目录结构、文件名、文件的位置,因为 Cursor 没有提供很好的代码跳转功能,所以不得不更加依赖通过项目结构来梳理代码功能。
代码的自动补全方面,GoLand+Copilot 插件能应付日常场景,需要补全的往往是打日志之类的内容,简单用用就可以,我不太敢用 AI 写侧重逻辑的代码。
给我推荐使用 Cursor 可能还有一种心理就是,觉得我不知道怎么使用 AI,或者觉得我不知道怎么使用 Cursor (?),也挺奇怪的。我在 2023 年(ChatGPT 开始大火的那段时间)就试用了 ChatGPT,还写了《不要小瞧 ChatGPT》,而现在不论是日常工作还是生活,都在高频率使用 ChatGPT。
总的来说,我的意思是,你可以喜欢 Cursor,也可以使用 Cursor,但最好不要鼓吹 Cursor。