最近我充了500美元一个月的AI编程工具Devin。 他号称是一个全能的实习生,可以做很多传统的AI工具,比如Cursor和Windsurf之类做不了的事情。 在使用了一段时间之后,我确实感到了他和Cursor在设计理念和使用体验上有着巨大的不同,在这篇文章里面总结一下。
要注意的是我这里说的Cursor不是传统的类似自动补全的Copilot,或者类似Copilot Chat那种通过自然语言来编程的工具,这里的Agent Cursor指的是Cursor最近刚发布的Agent模式。在Cursor Composer里面,现在可以把模式从Normal切成Agent,然后在里面提出需求,接着Cursor就会调用各种工具来为你迭代的完成任务。 整个体验和Windsurf极其类似,因此,这里所说的Agent Cursor已经是一种相当先进的,以Agent的方式通过调用电脑上的各种工具多轮完成任务的一种产品形式。
总的来说,我最明显的感受就是Devin的设计理念和目标与Agent Cursor非常不一样。跟Cursor的交互更像是一个与工具的交互。而Devin更像一个人。下面的三个方面都是围绕这个区别的。
局部执行 vs 全局规划:从指令完成到流程主导
在使用Cursor的过程中,我有一个明显的感觉是,它像是一个严格执行具体任务的技术员。 只要给它一个明确的指令,它就可以快速执行,输出结果。 但Davin则更像是一个更有章法的复杂系统或者说实习生。 它会有着更完整的工作流程思维,会先制定一个高层计划,然后再细分步骤执行,验证成果。
虽然Devin和Cursor都会有多轮迭代这个特性,但Cursor的迭代只是为了进行测试,来验证自己有没有完成目标。 而Devin则更像是一个职场老油条,它会先列一个高层的计划,然后一个个打勾,在这个过程中还会不断地调整策略,让你始终知道它做到哪一步了,而且让你相信整个项目的进度也在它的掌握中。 这是一个非常有意思的区别,而且也确实让Devin可以去完成更加复杂多变的任务,提供更加系统的解决方案。
比如我们尝试了让两个AI都去克隆一个网站,Devin在更高层的抽象思考和计划制定方面明显更强,他会知道先调用各种工具,把这个网站下载到本地,然后去观察每一个网页和模块的作用与样式,然后再着手规划网页结构,最后再着手执行。 但Cursor给人的感觉就是明显不是为了这种难度的工程设计的,它的第一次迭代没有想到要先把网站下载到本地,而是直接hallucinate了一个网页出来。 然后,在明确被提醒先把网站内容爬下来之后,他又漏了很多重要的细节,做出来的网页只是一个非常简化的版本。
所以总的来说,二者的设计目的感觉是非常不一样的。Devin的设计的时候更像是把它当做一个有章法有计划的软件工程师来设计,而Cursor则更多的是一个帮助我们快速自动的解决一些明确的相对小的问题的工具。
工具使用的灵活性
他们的第二个差别在于工具使用的灵活性上。 Cursor能调用的agent主要是文件系统、生成代码和执行命令。 但是Devin可以调用更多的工具,比如说它可以启动浏览器,用视觉能力来理解前端的内容,甚至可以做一些跟前端交互的自动化测试。
它还可以调用自己的LLM(对应实习生的大脑?),可以用自己的脑力来完成一些相对独立的更灵活的任务。 举个例子,我的blog有一些链接需要修复。 这些链接错误的模式没有明显的规律,因此Cursor在面对这种问题的时候就显得力不从心。 它没有办法从这些错误的链接中间总结出一些规律,然后写一个程序来批量处理。 换言之,这个问题本身就不适合用编程来解决,而需要更高层次的智能。 而Devin很好地解决了这个问题。它在整个过程中间没有使用任何编程,而就是打开一个个的文件,用它的LLM去理解,找到其中的问题所在,并且把它修复(PR在这里)。 这个不同一方面佐证了在上一点中我们提到的章法的差异。另一方面也说明Devin拥有的这些更多样的能力,可以让它经过组合来完成更加复杂的任务。
但是这种工具使用的灵活性也是一把双刃剑。比如,在另一个例子里,我让Devin和Cursor都去CVPR的网站上,把今年的2000篇文章的作者标题和PDF链接下载下来。Cursor对于这种明确的需要编程的任务表现的一如既往的好。它很快写了一个爬虫,解析了CVPR网站的内容,并且生成了最终的结果文件。 但Devin则选择了另一条意外的手工路线。它首先打开浏览器,在用图像能力阅读了浏览器、阅读了第一页之后,给了我一个只有三篇论文的结果文件。
在被质问"这只有三篇,其他的呢?"以后,它竟然再次选择用浏览器打开网页,一页一页三篇三篇的输出。这个流程真是让人哭笑不得。 从某种程度上来说,也确实像在带一个勤奋但是没有经验的实习生。只是从工具和完成任务的角度来说,Cursor的稳定性和完成任务的能力在这里是更重要的。
Prompt与知识的动态成长
另一个相关的差别是,他们对于知识的管理和迭代。 在Devin的使用中他非常强调知识和经验的总结和积累,比如在上面的CVPR抓取的例子里,我给了他一个反馈是:"你需要先看一下有多少个文章,如果文章数量多的话,你需要选择用程序来批处理。"在我给了他这个feedback以后,他就自动生成一条知识,说下次如果在做网络抓取的时候,需要根据数据的规模来分情况处理。接着当我又让他做一遍CVPR这个任务之后,他就没有再掉到同样的坑里了。
这种动态迭代与进化的设计,让整个过程特别像带一个实习生。 包括我让Devin onboard一个新的Github repo的时候,也是我带着他一起去初始化这个repo、安装各种依赖,以及教他怎么样跑各种测试,在什么情况下说明什么组件没有问题。 带了一遍以后,他也把这些信息都转变成知识,再后来他也就可以非常熟练地处理我的blog repo了。
这种动态进化的设计在Cursor上暂时还没有看到,但是我比较乐观,这个是Cursor很容易实现的。现在Cursor已经可以使用.cursorrule
这样的文件来自定义每个工程特定的知识,所以它的mechanism是已经在那里的,只要接入一个整理知识的prompt应该就可以了。
多一句嘴,在prompt方面,Devin有一个文档,我感觉特别有帮助,他会教你什么样的prompt在与Devin沟通的时候是最有效的。比如你需要明确定义成功的标准,比如要跑通某个测试,或者访问某个链接能对得上等等。这个和我们在builder's mindset课程里面的观点不谋而合,而且当你把同样的原则应用到使用Cursor的过程中间的时候,也会发现Cursor一下子也变得聪明了很多,可以自主验证有没有完成任务并且进行迭代。
可控与场景
正因为这三个设计和产品方面的区别,给我一个很明显的感受:DeVIN设计出来就是为了像一个人一样,有章法、会成长,虽然不可控性更高。 比如有时候他会对着我一个MD文件发呆十分钟,我甚至怀疑他在后台偷偷玩手机。
但是也更擅长做更复杂的项目。相比之下,Cursor是一个更直观的编程工具,你会知道他可能会掉什么坑里去,并且事先加以预防,但这个对Devin来说就更加困难一点,有时候甚至他掉坑里了,事后复盘都不太懂他为什么会犯这个错。
对于实际的使用来看,我目前会更倾向Cursor,因为这两个工具所针对的场景其实相差很大。 Devin更强调对于软件工程进行复杂开发。比如他一个月要500美元,而且跑起来也很慢,一个小项目跑个半小时几个小时很正常。 但如果这个项目可以用Cursor来完成的话,他可能五分钟就跑完了。 所以Cursor更适合做一些更贴近生活、更轻量级的小任务。 而且我相信Devin的很多设计和经验,包括Prompt Engineering的技巧和迭代的思路,都可以被Cursor轻松实现。 所以也许Cursor的竞争对手其实不是Devin,而是ChatGPT。 换言之,如果你想要的其实不是一个代码,而是一个artifact,比如一个图标,一个文档,甚至一个photoshop的图像,都可以用Cursor来做。 只有当最终想要的deliverable是一个复杂的软件工程的时候,Devin才是一个更适合的工具。
下面我也会继续探索Devin有没有什么更好玩的用法,来让我们每天的工作和生活更加便利。
Comments