在之前的讨论中,我提到过要介绍各种 agent 框架和 coding agent 的实现,但一直没能抽出时间。最近,我对 AI 辅助编程的产品进行了深入的探索,想和大家分享一下程序员的 AI 工具这一轻松话题。
自动补全类产品
去年,我订阅了 GitHub Copilot(以下简称 Copilot),使用体验相当不错。然而,随着大模型的降价,我开始对 Copilot 的固定订阅费用产生了疑虑。因此,我迅速调研了市场上其他替代品,寻找性价比更高的选择。
经过一番比较,2024 年 8 月时,最有潜力成为 GitHub Copilot 替代品的产品是 Codeium。在 PyCharm 中安装插件后,我快速体验了一下。功能上,Codeium 与 Copilot 基本一致,代码补全速度较快,但智能程度上仍有差距。不过,Codeium 对个人用户是免费的,因此如果不太在意质量差异,它是一个不错的选择。
在体验过程中,我发现包括 Copilot 在内的这类 IDE 插件,在 VSCode 下的功能明显强于 JetBrains 系列的相同插件。这可能是 JetBrains 插件系统的限制所致。因此,如果不重度依赖 JetBrains IDE 的某些功能,建议使用 VSCode,特别是在 TypeScript、Python、Rust 和 Go 等语言的项目中,VSCode 是一个很好的选择。
我本想体验 JetBrains 自家的 AI Assistant,但发现插件市场评价不佳,还是再等等看吧。
AI 搜索类产品
在之前的文章中,我介绍过一些 AI 搜索和通用聊天类产品,如 ChatGPT、Claude、Perplexity 和 Kimi 等。编程领域还有两个值得一试的产品,分别是国内的 devv 和国外的 phind。
这两个产品可以视为垂直领域的 Perplexity,回答编程开发相关问题的质量明显高于通用搜索问答产品。在这类产品出现之前,程序员解决问题的典型流程是:
- 在 Google 上搜索问题的关键词。
- 人工查看搜索结果,点击最接近的链接,查看具体内容。
- 将网页中找到的解决方案复制过来,根据自身情况进行修改。
- 如果无法解决,再回到 Google 查看下一个搜索结果,或修改搜索关键词,重复这个过程。
有了 AI 搜索的辅助,信息整合和结合自身情况生成特定代码的过程变得高效,解决方案的准确率也显著提高。现在,我大约有 50% 的情况会优先选择这类产品来解决技术问题,而 Google 的作用则更像是明确目标时的跳转工具。
值得一提的是,devv 还提供了 GitHub Repo 搜索问答的功能,我在之前写 DSPy 介绍文章时就尝试过利用它来帮助理解项目库中的一些概念和具体实现。
Cursor 的惊艳之处
在调研自动补全类产品时,我想到了之前接触过的 Cursor。早期的 Cursor 功能较为简单,官方演示通过聊天方式自动写了一段 PyTorch 模型定义的代码,未能给我留下深刻印象。但最近尝试后,我发现这真是一个划时代的产品,每个功能都体现出对程序员工作流程的深入理解,交互设计自然流畅,尤其在大语言模型及相关技术的使用细节上表现出色,值得学习。
自动补全与搜索的问题
如果你已经深入体验过 Copilot 和 ChatGPT,应该会发现它们在程序员日常工作中的改进空间。例如:
- 自动补全只能在光标位置触发,导致需要先删除一些代码,再让 Copilot 补全。
- 自动补全支持多行生成,但常常会出现不需要的内容,需要反复修改。
- 自动补全遵循编程语言的规定,生成的代码一般能运行,但如果前序代码不对,后续生成也会出错。
如何让自动补全时模型获取更好的上下文?这需要了解 Copilot 背后如何组装上下文的原理,才能更好地利用它。
除了写代码,阅读和调试他人代码也非常耗时。此时,聊天工具的优势显现,但工作流仍然割裂。例如,需要将错误信息复制,打开浏览器,访问 Claude,粘贴等待结果,再将相关结果复制回来修改。
此外,工作流复杂,能力上也各有限制。Copilot 的聊天功能一般不支持联网搜索,而在线的 devv 等又无法了解整个代码库,如何结合两者的优势呢?
Devin 的演示给出了一个面向未来的想象:coding agent 能够自己编辑代码、调试运行、上网搜索解决方案,几乎模拟了真实程序员的工作流。但现阶段的模型能力,可能还难以支撑这类产品快速产出稳定和可用的结果。
Cursor Tab
Cursor 通过推出 Cursor Tab 功能来应对这些问题。它的定位不再局限于“补全”,而是更广义的“编辑”。例如,当给函数添加参数时,Cursor Tab 会自动识别出调用该函数的地方,并一次性添加新参数,而不是仅在光标后补全。
这个功能的强大之处在于:
- 多行编辑,不再需要反复触发补全。
- 预测用户下一个改动的地方,自动跳转。
- 自动将伪代码转换为可执行代码。
- AI 支持下的重构,自动生成编辑改动。
这个功能是 Cursor 付费版的核心功能,实在令人期待。
Inline Chat
Cursor 还支持 Inline Chat 功能,用户可以在编辑过程中通过 CMD + K
唤出聊天进行交互。典型应用场景包括解释代码、生成文档、生成测试和修复特定问题。
由于 VSCode 内嵌了终端,用户可以在终端中唤出聊天,帮助编写命令行,避免切换到其他工具,极为方便。
Cursor 在产品体验上优于 Copilot,支持并发聊天,用户可以在多个地方唤起聊天,而无需等待前一个会话结束。此外,用户可以用 @
操作符灵活指定上下文,生成的 diff 效果也明显优于 Copilot。
Chat 功能
Cursor 的 Chat 功能也非常强大,用户可以在 Chat 中发出相关需求,Cursor 会生成一个“pull request”,用户可以直接在编辑器中查看各个改动,进行代码审查和修改。
Cursor Chat 中的功能包括:
- 支持传图片。
- 用
@
指定文件、方法等上下文。 - 支持整个代码库问答。
- 支持 web 搜索。
- 支持引入文档,自动索引新知识。
- 编辑器 lint 等检查出来的错误可以一键发送到聊天中。
AI fix 生成的内容也是一个 pull request,一次性改动多行代码,效率显著提升。
Beta 功能
Cursor 还有一些实验性功能,如 AI review 和 Interpreter mode,后者可以让 Cursor 在聊天过程中执行代码并检查结果。
此外,Cursor 设计了一个 Shadow workspace 功能,让 AI 在后台工作,进行各种尝试,而不会打断用户的正常操作。这一功能尚处于内测阶段,具体效果还有待观察。
展望未来
从以上介绍来看,Cursor 的功能确实丰富强大,每个功能点都体现了对工作流程的深入理解和用户体验的精心设计。在真实项目中尝试后,功能的完成度也相当不错,完全不是那种只能生成简单脚本的 demo 产品,难怪 Cursor 受到了许多开发者的欢迎。
结合 VSCode 的各种功能和程序员的日常工作,我们可以展望 Cursor 的未来可能性:
- 是否能借助 agent 能力帮助程序员 debug?
- 是否能推进 TDD 的极致,由程序员编写测试/功能规范,AI 自动生成代码?
- 是否能根据代码自动生成多层级的文档,提升沟通效率?
如果你对 Cursor 背后的技术感兴趣,他们的博客也很值得一读,了解如何构建强大高效的代码编辑模型。
今天的介绍就到这里,看完后,你是否觉得 20 美元的月费花在 Cursor 上非常值得呢?