AI编程利器:Cursor 唤起程序员的危机意识


www.cursor.com/

起初接触 cursor的时候是在去年年初,ChatGPT和GitHub Copilot等AI概念产品开始流行。当时我注意到cursor主打的是无文件迁移功能,即可以将VSCode的所有插件一键转移至cursor,界面几乎相同。它的体积小、启动快,编程效率高。同时它支持免费的AI模型进行提示。

后来我又体验了新的版本。我发现它与之前的版本有很大不同,并且彻底改变了我对它的看法。我已将编程工具切换到了cursor,完全心甘情愿地选择了它。

原理

首先说明一点,一切事情有因就有果,有果就有结果,cursor的好用功能很多,但最重要的是它的一个功能。关于这个功能的原理,我要详细解释一下。

市面上有许多AI编程助手类工具,比如说GitHub Copilot、字节豆包的marscode和阿里通义灵码等。

大家都知道,这些工具背后是各家的大模型。提示质量高低主要取决于这些大模型的能力。所有的工具都基于当前文件的内容。无论是代码解释、优化还是生成注释,都是基于当前文件内容的。无论是针对文件、类、方法。

你对代码提问的codeBase是一个单文件,上下文自然也是这个单文件。

这就是现在的AI编程工具运行逻辑:从当前文件中获得代码的上下文再结合你的提问(prompt),一起发给LLM,最后得到结果。其实这已经能解决不少问题了,在没有cursor之前感觉很不错,写程序确实能提高效率。

我们觉得上面那些工具不错是因为没有用过更好的工具:

codeBase 是整个工程

codeBase是整个工程

codeBase是整个工程

Cursor的逻辑如下:首先,会对工程内部的所有代码进行索引和向量化处理(embedding),然后对用户提出的任何问题,都会将这些问题与整个工程中的所有代码联系起来。在这种情况下,LLM会根据这两个因素综合给出答案。

主要使用的模型包括:

1. **GPT-3** - 这款强大的预训练语言模型能够理解和生成人类语言。在Cursor中,它用于处理和理解用户的问题以及工程的代码。

2. **Qwen** - 作为一种专门针对知识问答任务优化的语言模型,Qwen特别适合于回答有关工程或技术的特定问题。

3. **LLaMA(大型语言模型)** - LLaMA是一系列预训练语言模型的一部分。在Cursor中,它被用于理解和生成文本,特别是在处理代码和工程相关的问题时。

4. **T5** - T5是一种多模态预训练模型,能够同时理解文字内容和视觉数据,并且可以用于生成高质量的文本。在Cursor中,它有助于将代码转化为更易于理解的语言形式。

5. **BART(双向注意力编码器)** - BART在处理长序列任务时表现优异,尤其适用于需要跨领域知识的问答场景。在Cursor中,它有助于连接不同部分的工程信息,并给出综合答案。

6. **XLNet** - XLNet是一种大型预训练语言模型,特别擅长处理自然语言生成和理解的任务。在Cursor中,它用于分析代码并提出问题的答案。

7. **MPT(多模态预训练)** - 这款模型能够同时处理多种类型的输入,包括文本、图像等,并且可以进行跨领域的知识迁移学习。在Cursor中,它有助于解决涉及多个模块的工程问题。

通过这些模型,Cursor能够更好地理解和处理用户的问题以及工程中的所有信息。

基于 RAG 方法论的系统实现,尽管它的外挂知识库是代码库而非传统的深搜寻或索引,但其核心功能——即自动代码补全——仍然具有极高的价值和实用性。

简单来说,RAG(Relevance-Augmented Generation)是一种利用相关性进行生成的方法。这种方法基于一个强大的知识库,通过理解输入的上下文信息来提供更准确、相关的建议。相比传统的LMM(Language Modeling),这种方法能够更加精准地预测用户可能的需求。

代码补全功能的核心优势在于其全面性和精准度。传统工具在代码补全时可能会受限于当前文件的上下文,而RAG系统则能分析整个工程的代码基础,为用户提供更广泛的建议和优化方案。这不仅提高了代码编写的速度和效率,还减少了人工错误的发生。

举个例子,想象一下在一个大型项目中,用户只需要通过简单的“tab”键,就能自动完成代码补全。这种便捷性几乎接近于自动化编程,使程序员能够更加专注于业务逻辑的实现而非繁琐的代码编辑工作。

此外,基于RAG方法论的系统还可以解决其他复杂问题,例如代码重构、错误检测等。这些功能共同构成了一个高效、智能的开发环境,大大提升了软件开发的工作效率和质量。

因此,我认为最激动人心的部分,并非仅仅是代码补全本身,而是这个系统的广泛应用和潜在的价值。它不仅能够提升编程工作本身的效率,还可能改变整个软件开发行业的运作方式。

这个代码你放心去写吧。一旦你开始编写时,如果出现错误,它会立即在你输入时自动为你校正。

它为什么能纠正错误,它又是如何知道我写错了?没错,就是 codeBase,你的整个工程都掌握得如此之详尽。

聊天功能非常基础,但在 codeBase 的帮助下,它变得无比强大。首先,你可以针对当前文件中特定部分提问,比如重构一个方法等。

它能很好地重构代码。这是因为它的代码库覆盖了整个工程项目。

你可以单独启动一个新的聊天窗口。

在询问问题时,您可以只针对以下内容提问:当前文件、文件夹、图片、文档或网络资源。如果您想涵盖整个代码库,请明确说明这一点。

最重要的是这个 Codebase,它可以发挥无限想象力的空间。由于篇幅原因,我不会把所有的细节全部通过图片或视频的形式呈现出来,因为内容太多了,但你可以通过我的描述体会到 Cursor 的强大之处。在这里,我举几个例子来说明它的优势:

我是项目的主要开发者,现在想对某个功能进行重构,这次是整个功能的重构,并不局限于一个类或文件。我让 Cursor 为我提供具体的建议和修改的代码。它实现了,非常具体、清晰、详细且正确率高达 95% 以上(Claude 模型)。这个例子中,我已经通过测试并且在工作中使用过。

我还有一个陈旧项目,代码中几乎没有注释,也没有接口文档。现在我想从代码中分析出一份 API 接口文档,要包括地址、请求类型、请求和响应字段,以及示例 JSON。这个需求也得到了实现,内容完全正确,100% 正确。

我还有个小白同事,刚进入项目组,对他负责的功能模块完全不了解流程是什么,不巧的是整个项目也没有什么文档。现在需要他去看代码自己梳理。让他让 Cursor 帮他梳理出项目中有关 OAuth2 认证、鉴权的完整流程。从第一个请求开始到最后一个请求数据返回,包括所有相关的代码片段和执行路径。Cursor 瞬间完成了。

我还有一位测试同事,想写关于某个重要模块的测试用例及测试报告。让他让 Cursor 基于整个项目的 codebase 一步一步实现。这个需求也得到了满足,正确率达到了 100%。

我还有一个前端同事上传了一张别人设计的不错的界面图片,他需要 Cursor 帮他根据 Vue2 项目的情况自动生成页面代码。Cursor 瞬间完成了,与图片相似度达到 85%。

我还有一个大数据开发同事,他正在重构之前写的 SQL。他把建表语句告诉 Cursor 后,让他把一批 SQL 文件根据他的要求进行了重构。Cursor 很快就完成了这个任务。

我还有一位运维同事,他以前将所有运维的工作全部代码化了,并且在一个仓库里。现在基础设施有一些变动,他让 Cursor 根据现有的运维脚本和代码进行重构。Cursor 瞬间就完成了。

最后还有一位产品同事,现在不怎么用 Axure 画原型了。他说和 Cursor 交流一下基础上就能出前端代码,这让他学了一些基础知识,仅花了几分钟时间就搞定了原型。

我还有个朋友,他想将 .NET 项目转成 Java,并且他原先估计要组一个团队至少 5 个后端一起干。现在他自己一个人正在一步一步地用 Cursor 帮助他实现。这个需求得到了满足。

我还有个朋友……

我先总结一下重点:如果你使用 cursor,它包含两部分费用。一部分是软件费用,比如一个月20美元是由cursor支付的;另一部分则是模型使用的费用,这部分是你给像OpenAI这样的模型提供商支付的。总的来看,这大约需要30美元以上的成本。然而,关于模型的部分,因为cursor可以添加deepseek的coder模型,所以模型使用成本已经被打下来了,因为deepseek模型API的价格非常便宜。

不但是白菜价,首次注册人家还送 500万 tokens

总结起来,除了优点都是缺点。包括成本高和数据安全问题。

这些问题加在一起对很多人来说都是一大障碍。当然,网络问题是需要解决的。我认为国内的公司肯定不会坐以待毙,很快就会推出类似的产品。到时候网络问题就不是问题了。

未来看来,因为看到了 cursor 的出现,我感觉到程序员确实面临着危机。特别是对于初学者和新手程序员而言。因为我使用工具虽然可能会有一点错误,但可以瞬间完成一些基础的工作。完全可以替代人来做那些脏活累活,我不需要招那么多的人来干这些工作。只需要几个高级且会使用高级工具的人就可以了,他们创造的人效是原来的 10 倍以上。

再进一步,自动化编程是不是有可能实现?也就是说,把一个清晰的需求描述给 AI,他能自动写出程序,有公司正在做:www.cognition.ai/。原先我觉得他在吹牛,但自从使用了 cursor 后,我感觉可能不远了。

我最近几年一直在思考一个问题:很多公司缺乏业务知识库,即使有也文档不全且未及时更新,这使得所谓的内部业务知识库形同虚设。那么当需要了解业务时怎么办?比如进行大版本更新或重大业务调整时,又该如何操作呢?

找开发查看代码是最直接的途径,然而这些辛苦的工作又不得不转由开发承担。我想我并没有找到一个完美的解决方案,尽管可以借助RAG(Reinforcement Learning for Automated Generation)解决一部分问题,但并未完全解决问题。

虽然可以用RAG来解决部分问题,但没有完全解决的问题在于:只要文档不是最新的,文档有问题,一切基于知识库的分析都是错的。直到出现了cursor,我感觉这个问题还可以以另外一种方式解决。

因为代码是准的,即使代码写错了也是正确的,只要它是代码的bug,那么线上就是什么样业务就是什么样。

于是整个企业的业务知识就隐藏在代码里了,只需要从代码仓库中提炼出来就可以了。我们可以借助cursor或者以后出现的其他类似工具进一步加工以提取准确、实时可用的企业业务知识。

而这个“知识”才是企业真正的业务资产。代码即使消失了,根据业务重建也可以进行;反过来,如果你对业务不了解,则给代码也没用。