本文是“理解和部署智能体 AI”系列的一部分:
- 智能体 AI 系列 1:Devin 和 Agent Cursor 之间的比较
- 智能体 AI 系列 2:从思考者到执行者 —— 智能体 AI 的范式革命和技术架构
- 智能体 AI 系列 3:将 20 美元变成 500 美元 - 一小时内将 Cursor 变成 Devin (本文)
- 智能体 AI 系列 4:使用 Cursor 作为 AI 的通用入口
在前一篇文章中,我们讨论了 Devin,一款能够完全自动编程的智能体 AI 。与 Cursor 和 Windsurf 等其他智能体 AI 工具相比,它在流程规划、自我进化、扩展工具使用和完全自动化操作方面具有一些核心优势。这使得 Devin 看起来像是下一代工具,使其与现有的智能体 AI 工具区分开来。
然而,在使用了一段时间后,我的“构建者心态”再次被激发,促使我修改 Windsurf 和 Cursor,以实现 Devin 90% 的功能。我还开源了这些修改,让你可以仅用一分钟就将 Cursor 或 Windsurf 转换为 Devin。本文主要介绍这些修改的具体方法,并通过这个例子来演示在智能体 AI 时代,构建和扩展的效率有多高。为了简化我们的讨论,我们将使用 Cursor 来指代此类工具,最后,我们将讨论如果你想使用 Windsurf,需要进行哪些细微的调整。
工具 | 流程规划 | 自我进化 | 工具扩展 | 自动化执行 | 价格 |
---|---|---|---|---|---|
Devin | 是 (自动, 完成) | 是 (自学习) | 很多 | 支持 | $500/月 |
Cursor (修改前) | 有限 | 否 | 有限的工具集 | 手动确认 | $20/月 |
Cursor (修改后) | 接近 Devin | 是 | 接近 Devin,可扩展 | 仍然需要确认或变通方法 | $20/月 |
Windsurf (修改后) | 接近 Devin | 是, 但间接 | 接近 Devin,可扩展 | 支持在 Docker 容器中完全自动化 | $15/月 |
流程规划和自我进化
正如在前一篇文章中提到的,Devin 一个有趣的方面是,它的行为更像一个有条理的实习生。它知道首先创建一个计划,然后在执行过程中不断更新计划的进度。这使我们作为 AI 管理者更容易跟踪 AI 当前的进度,同时防止它偏离原始计划,从而实现更深入的思考和任务完成质量。
虽然此功能看起来令人印象深刻,但实际上使用 Cursor 实现起来非常容易。
对于 Cursor,在打开的文件夹的根目录中有一个名为 .cursorrules
的特殊文件。它的特殊之处在于,它允许你修改 Cursor 发送到后端 大语言模型 的 prompt。换句话说,此文件中的所有内容都成为发送到后端 AI (如 GPT 或 Claude) 的 prompt 的一部分。这为我们提供了很大的自定义灵活性。
例如,我们可以将计划的内容放在这个文件中,这样每次我们与 Cursor 交互时,它都会收到最新版本的计划。我们还可以在此文件中给出更详细的说明,例如让它在任务开始时进行思考并制定计划,并在完成每个步骤后更新计划。由于 Cursor 可以使用 agent 修改文件,而 .cursorrules
本身就是一个文件,这就形成了一个闭环。它每次都会自动读取文件的内容,了解最新的更新,并在思考后,将更新后的进度和后续步骤写入此文件,确保我们始终获得最新的更新。
可以使用类似的方法来实现自我进化功能。在 .cursorrules
文件中,我们添加一些 prompt,使 Cursor 在被用户纠正错误时反思自己的错误,并考虑是否有任何可重复使用的经验需要记录。如果有,它会更新 .cursorrules
文件的相关部分。这样,它就可以积累特定于项目的知识。
一个典型的例子是,当前的大语言模型由于知识截止日期相对较早,很多都不知道 GPT-4o 模型。如果你要求它们调用 GPT-4o,它们会删除 'o',认为这是一个错别字。但如果你纠正它们:“这个模型实际上存在,你只是不知道它”,它们会将这个经验教训记录在 .cursorrules
的相关部分,并且不会再犯同样的错误,从而实现学习和改进。然而,这仍然取决于 prompt 是否有效 - 有时它可能会遗漏一些要点,并且不一定会记录我们认为应该注意的知识。在这种情况下,我们也可以使用自然语言来提示它,直接告诉它记下这一点。这种更直接的方法也可以实现 AI 的经验积累和成长。
因此,仅通过使用 .cursorrules
文件以及一些 prompt 技巧,我们就可以将 Devin 令人印象深刻的流程规划和自我进化功能添加到现有的智能体 AI 编程工具中。
如果使用 Windsurf,则有一个区别:可能出于安全原因,它不允许 AI 直接修改 .windsurfrules
文件。因此,我们需要将其分成两部分,使用另一个文件,如 scratchpad.md
。在 .windsurfrules
文件中,我们提到:在每次思考过程之前,你应该检查 Scratchpad 并更新那里的计划。这种间接的方法可能不如直接将其放在 .cursorrules
中有效,因为它仍然需要 AI 调用 agent 并根据反馈结果进行思考,但它在实践中有效。
扩展工具使用
与 Cursor 相比,Devin 的主要优势之一是它能够使用更多的工具。例如,它可以调用浏览器进行搜索、浏览网页,甚至可以使用自己的大脑,利用 大语言模型 智能来分析内容。虽然 Cursor 默认不支持这些,但好消息是,由于我们可以通过 .cursorrules
直接控制 Cursor 的 prompt,并且它具有命令执行功能,这就形成了另一个闭环。我们可以准备预先编写好的程序,例如 Python 库或命令行工具,然后在 .cursorrules
中介绍它们的用法,让它可以即时学习并自然地理解如何使用这些工具来完成其任务。
事实上,这些工具本身可以使用 Cursor 在一两分钟内编写完成。例如,对于网页浏览功能,我在开源项目中提供了一个参考实现。有一些技术决策需要注意,例如使用像 playwright 这样的浏览器自动化工具而不是 Python 的 request 库来处理 JavaScript 繁重的网站。此外,为了更好地与 大语言模型 通信并方便它理解和抓取后续内容,我们不只是简单地使用 beautiful soup 来提取网页的文本内容。相反,我们按照一定的规则将其转换为 markdown 格式,从而保留更多详细的基础信息,如类名和超链接,支持 大语言模型 在更基础的层面上编写后续的爬虫。
类似地,对于搜索工具,有一个小的注意事项:无论是 Bing 还是 Google,它们的 API 搜索质量都远不如它们的客户端搜索,这主要是由于历史原因,不同的团队处理 API 和 Web 界面。然而,DuckDuckGo 没有这个问题,因此我们的参考实现使用了 DuckDuckGo 的免费 API。
关于 Cursor 使用自己的脑力进行深入分析,这相对更复杂。一方面,Cursor 确实具有一定程度的这种能力 - 在上述两个工具中,当我们向 stdout 打印网页内容时,它会成为 Cursor 发送给 大语言模型 的 prompt 的一部分,使其能够对该文本内容进行智能分析。但从另一个角度来看,Devin 具有一种独特的能力,可以使用 大语言模型 对相对大量的文本进行批量处理,而 Cursor 无法做到这一点。因此,为了赋予它这种能力,我们实现了一个额外的工具 - 非常简单,只是预先在系统中设置我们的 API 密钥,然后让这个工具调用 GPT 或 Claude 或我们本地的 大语言模型 API,从而使 Cursor 能够使用 大语言模型 批量处理文本。在我的参考实现中,我使用我自己的本地 vllm 集群,但修改起来非常简单 - 只需删除 base_url 行即可。
然而,即使经过这些修改,由于 Cursor 的限制,我们仍然无法实现两个工具:
- Devin 似乎具有图像理解能力,这就是为什么它可以执行前端交互和测试,但由于 Cursor 的限制,我们无法将图像作为输入传递给后端 AI - 这需要对其实现进行更改。
- Devin 神秘地不会在数据收集过程中被反爬虫算法标记为机器人,但我们的 Web 检索工具经常遇到 CAPTCHA 或被阻止。这可能是可以解决的,我仍在探索,但这绝对是 Devin 的独特优势之一。
完全自动化执行
最后一个有趣的功能是完全自动化执行。由于 Devin 在完全虚拟化的云环境中运行,我们可以安全地让它执行各种命令,而无需担心 大语言模型 攻击或错误地运行危险命令。即使你删除了整个系统,只需启动一个新的容器,一切就又恢复正常了。然而,在本地主机系统上运行的 Cursor 具有很强的安全隐患。这就是为什么在 Cursor 的 agent 模式下,我们需要在执行每个命令之前手动确认。对于相对简单的任务来说,这是可以接受的,但现在我们有了复杂的流程规划和自我进化能力,Cursor 也可以处理长期的复杂任务,这使得这种交互方法似乎不适合 Cursor 的能力。
为了解决这个问题,我还没有找到基于 Cursor 的解决方案(更新:在 2024 年 12 月 17 日,Cursor 也添加了此功能,称为 Yolo 模式,但它仍然不支持在 Docker 中进行开发),但 Windsurf 已经考虑到了这一点,我认为从它的设计中,你可以看到它从一开始就旨在打造类似 Devin 的产品形式,当前的代码编辑器只是一个中间形式。更具体地说,Windsurf 具有直接连接到 Docker 容器并在其中运行的功能,或者如果我们有配置文件,它可以帮助你启动一个新的 Docker 容器,进行一些初始化,并将本地文件夹映射过去。因此,它执行的所有命令,除了对本地文件夹的更改外,都在 Docker 容器中执行,对主机系统没有影响,从而大大提高了安全性。
在此基础上,它还引入了黑名单/白名单机制,自动拒绝黑名单上的命令,允许白名单上的命令。对于既不在列表中也不在黑名单上的命令,大语言模型 会智能地判断是否存在对主机系统的风险 - 例如,如果它想删除文件夹中的文件,它会要求用户确认,但像 pip install
这样的通用命令会被直接允许。请注意,此功能似乎仅在 Docker 容器中运行时才启用。如果我们在主机系统上运行命令,体验仍然类似于 Cursor,需要频繁确认。此外,需要在配置中启用自动命令执行。
总结
因此,我们可以看到,虽然 Devin 的产品形式和设计理念确实非常先进,但从技术壁垒的角度来看,它与现有智能体 AI 工具之间的差距并不像我们想象的那么大。使用每月花费 15-20 美元的流行工具,如 Cursor 和 Windsurf,我们可以在一小时内实现 Devin 90% 的功能,并用它来完成以前不可能完成的复杂任务。例如,我给 Cursor 分配了一个任务,分析过去 5 年热门科技股的回报率,进行深入的数据分析,它提供了一份非常详细而全面的报告。此外,我让 Windsurf 抓取我博客上排名前 100 的文章的发布时间,并以 GitHub 贡献图表的形式将其可视化,它可以完全自动完成。这些类型的任务是传统的 Cursor 和 Windsurf 无法完成的 - 只有 Devin 可以完成它们,但在进行了这些简单的修改之后,我们可以用每月 20 美元的工具实现每月 500 美元工具的效果。我甚至做了一个更深入的实验:作为一个完全不熟悉前端开发的开发者,我花了一个半小时创建了一个招聘网站,包括前端和后端。这种效率非常接近甚至高于 Devin。
最后,本文中提到的所有文件都可以从 Devin Cursor Rules 下载 - 只需将内容复制到您当前的项目文件夹中即可使用。