
精通 Cursor AI 代理:高效编码和解决问题的 5 个基本技巧
Cursor,一个 AI 代码编写和编辑工具,代表了人工智能在软件开发实际应用中的重大进步,主要是因为它提供了“代理”,这些代理不仅可以回答问题,还可以根据自己的想法采取行动。这种强大的新能力需要一种新的编程方法,在这种方法中,您的高级推理技能变得比以往任何时候都更重要。当一个代理被“授权杀戮”时,您作为 Director 的指令至关重要。
这篇文章是我 AI Library 系列的一部分。这些文章按复杂程度排序。它们并非旨在作为先决条件,而是作为这些主题的替代切入点:
- Behind the Curtain | Understanding the Magic of ChatGPT - No math or programming
- Last Night an AI Saved My Life | Debugging with ChatGPT - Programming
- Zero to Hero | Crafting a Custom GPT - Programming
- Something From Nothing | A Painless Approach to Understanding AI - Math and programming
- License to Kill | Coding with Cursor AI Agents - Programming
Cursor 是一个 AI IDE,是 VS Code 的一个分支,它在您的工作流程中添加了一个编程代理。这里的 AI 聊天窗口实际上占据了我的源代码区域的一半,这反映了在这种编程风格中,我们与代理的交互比与代码的交互要多得多。
您的任务,如果选择接受
我想向您展示如何找到 Cursor 最 clever 的功能以及如何充分利用它们,但我并不建议您从那里开始。如果您使用过其他 AI 工具,请从您使用 Cursor 的方式与您上次使用的工具相同的地方开始。对我来说,那是带有 Copilot 的 VS Code。一旦 Cursor 中的任何“差异”被消除,就尝试下一个级别的复杂性。
以下是我们将会涵盖的内容。随意跳过您已经了解或尝试过的任何部分。
- 什么是 Cursor & 为什么?
- 内联补全
- Tab 键补全
- 与代码聊天
- 在聊天中修复
- 代理思维
- 复制您的风格
- 设置
- Token 限制
- 运行一个代理
**最新更新:Cursor 更改了用户界面,将 Chat 和 Composer 选项卡合并到一个聊天框中,因此您的屏幕截图可能与我的有所不同。
Tom Cruise 在 2002 年的电影《少数派报告》中演示的用户界面,肯定可以被认为是今天的 RAG 应用程序,由智能代理按需绘制自定义控件。P. K. Dick 的 小说(基于该电影)实际上写于 1956 年。
1. Cursor 在哪里?
什么是 Cursor & 为什么
Cursor 是第一个真正有用的 RAG 应用程序之一。检索增强生成是一种花哨的说法,意思是“使用 AI 聊天来弄清楚如何控制应用程序的界面,而不是仅仅按下按钮和点击菜单。” 每个 RAG 应用程序都将一些传统的用户界面与一个后端的 LLM 或 大型语言模型 和一个聊天框结合在一起。对于 Cursor,传统的应用程序是 VS Code,一个为编写代码而优化的 IDE 或文本编辑器。
Cursor 也是 agentic 的,这意味着它可以像在您的控制下的代理一样半自主地行动,以完成您事先同意的任务。这种控制可以扩展到创建新文件和一次修复多个模块中的数百行代码——到删除文件、破坏接口以及阻止您的代码运行。因此,本文的标题。
如果您已经习惯了 VS Code,您可以导入您的快捷键和设置。我不得不进行一个小调整,因为我的一个自定义键被 Cursor 占用了,但这很容易修复,因为我的绑定没有被删除。删除 Cursor 绑定后,我的原始绑定仍然存在并起作用。此导入功能使您可以轻松地从 VS Code 迁移到 Cursor,VS Code 是最受欢迎的 IDE,遥遥领先。
您可能已经问过自己,“如果 Cursor 在幕后是 VS Code,为什么不把它做成一个扩展呢?” 对于这个问题,Cursor 开发团队回答说,他们所做的更改仅靠扩展是不可能实现的。在本篇文章结束时,您将看到这是真的。Cursor 以一种任何扩展都无法做到的方式完全控制了 IDE。
安全第一
毋庸置疑,如果我们要让一个代理控制我们宝贵的代码库,我们应该使用 Git 的最佳实践。对我来说,这意味着确保我始终有一个可运行的 repo 的副本,并且在允许 Cursor 运行之前,在正确的位置签入代码(我使用 GitKraken 与 GitHub)。如果我即将要求进行重大更改,请先提交并推送该 repo。如果某些内容运行正确,请再次提交并推送,以便在下一个更改不起作用时可以回滚。
这种思维方式将在代理所需的新编码风格中发挥重要作用。我们过去常常尝试在开始时仔细编写可运行的代码,然后在此基础上进行构建。现在仍然是这种情况,但是有了代理,您会发现许多行代码被编写出来,然后立即被更好(甚至只是正确)的代码擦除,而且没有人关心。
换句话说,编写代码的工作变得如此之快,如此之便宜,以至于它不再是主要工作。主要工作变成了大规模评估这些更改并接受或修改它们。这是一个疯狂的新世界!
我的文章如果没有 South Park 的引用就不完整,这也不例外。在一个值得注意的剧集中,该镇的居民抱怨 Alexa 和 Siri 抢走了他们的工作。我认为 AI 将改变我们作为程序员的工作方式(并且可能在此过程中使软件更好),而不是抢走工作。
他们抢走了‘尔’的工作!
我想让你从这篇文章中得到的一个关键要点是,Cursor(或下一个大事件)不会像经验丰富的程序员那样消除你的工作。恰恰相反。我希望你能看到,作为一个人,一个监督者,一个管理者,一个架构师,一个深度思考者,一个有愿望、需求和感受的人(是的!)将在 AI 辅助编码中发挥比上一代软件开发中更大的作用。
- 当程序员从输入底层语法和连接模块或 API 中的接口的繁重工作中解放出来时,我们留下了更困难的、人类层面的工作,即首先弄清楚应该对代码做什么。
你很快就会发现,007 射击任何东西的能力需要你非常精确的计划才能射击你想要的靶子。你还会看到我们是如何得到关于“我用 AI 在一小时内制作了一个应用程序”的无休止的故事,这些故事声称这些工具将解决一切问题。发生的事情是,那些故事的作者使用像 Cursor 这样的工具来构建一个应用程序,而没有指定任何重要的东西。这就像让邦德去执行一项任务,为了任何原因杀死任何人。在没有任何约束和参数的情况下,你当然可以编写代码。
问题是,没有真正的应用程序是这样工作的。在我们的工作中,我们必须不断地发展和扩展(并替换)具有数百或数千个约束和要求的系统。虽然 Cursor 可以查看你的所有代码,但它无法理解任何内容。它永远不会知道你为什么要做某事或你想要什么——稍后我将向你展示你必须如何用人类的语言提出这些问题。即使在最仔细的指导和提示下,你作为人类程序员的技能也将受到挑战,而且,我敢说,通过与 Cursor AI 级别的配对程序员一起工作,你的技能将得到提升。
2. 主要的脉络
内联补全
AI 编码工具通常被描述为“增强版自动完成”。这是一个很好的起点。Cursor 可以通过将光标放置在某个地方并开始输入来帮助你编写或扩展代码,就像 Copilot 一样。我在这里猜测一下,这个产品被称为 Cursor,因为光标在哪里以及它能做什么这个概念是整个产品的总体驱动原则。在全代理模式中,“光标无处不在”,并且具有我们习惯的自动完成功能……乘以 1000。
上面如何,下面也如何
你首先会注意到 Cursor 的自动完成功能会查看光标上方的几行以及下方的几行。如果你进行更改,这将破坏下方几行中的某些内容,Cursor 也会建议进行该更改。这非常有用,尤其是在它能够查看其他模块的情况下。Cursor 能够找出非常复杂的更改,并以大组而不是一次一行的方式进行必要的更新。节省了大量时间。
1963 年推出的 Tab soda,当时很恶心,现在仍然如此,而且这里显示的现代包装并没有帮助。这可能是世界上第一款健怡可乐,但被来自同一公司的健怡可乐所取代。Tab 过去也是打字机上的一个键,你按下它就可以移动到下一列。由于我们不再这样做,它现在可以在 Cursor 中用于更有趣的用途。
3. 但等等,还有更多……
Tab 键完成
随着代码的发展以适应新功能或进行重构以清理代码,单个更改通常需要在同一模块中进行许多(低级)更改。这些并不难弄清楚。事实上,你可能可以在进行第一次更改之前就弄清楚它们。例如,如果导入的模块或导入语句本身中的某些内容发生了变化,你将不得不调整此模块中的所有用法。
这就是我所说的“驴子工作”的编程。我知道需要做什么吗?是的。我能判断它是否正确吗?是的。我想坐在那里做所有这些吗?不。好吧,你猜怎么着?因为它读取了 linter(在它不满意的行下放置红色波浪线的错误检查器),Cursor 也提前知道了所有错误。
这就是 Tab 键成为你最好的朋友的地方。通过按下 Tab 键,Cursor 将跳转到需要修复的下一行——无论它在模块中的什么位置!现在,驴子正在走向下一堆石头,而不是我。
- 由于阅读代码的速度比编写代码快数百倍,我可以几乎立即查看建议的更改,然后按 Tab 键跳转到下一个更改。
如果 Cursor 只是这样,它仍然值得切换。由于 Tab 键有很多用途,Cursor 并不总是能正确处理。但这没关系,因为你只需撤消你不喜欢的更改(使用你的正常键盘快捷键),然后再次按 Tab 键!有时你需要将光标本身移动到更靠近问题的地方,然后按 Tab 键才能得到修复。这一切起初看起来都很奇怪。你只是将大块代码扔进扔出。你没有编写它们。但是当你意识到你通过只打开文件并按下 Tab 键就完成了跨多个模块的巨大更改时,你会开始认为这可能非常棒!
与 Cursor 的这段对话片段表明它帮助我提升了自己的编码水平。通过询问它提出的解决方案,我了解到你可以在该文件夹中为应用程序放置一个特定的 TS 配置文件。TIL。
使用“代码”一词来指代计算机编程指令可以追溯到第一个存储程序计算机本身,即 EDSAC,它在 1949 年运行了它的第一个代码。用户被指示将每个计算机操作的“代码”输入到机器的内存中。今天,我们将这种编程称为 机器码,比汇编语言低一个级别。
4. 让我们来聊聊代码,宝贝
与代码对话
Cursor 宣传你可以“与你的代码对话”,你可能觉得你一直在用其他工具做这件事。但我可以向你保证,你并没有。Cursor 所谓的“与代码对话”是指通过使用 @ 键引用文件和函数来专门调用它们。如果你想在你的 doSomethingGreat() 函数中进行更改,你可以在提示符中写 @doSomethingGreat()
。
在这里,你可以看到 Cursor 强大的“与代码对话”功能正在运行。通过开始编写 @scriptrunner
,它找到了我正在谈论的模块(甚至在左侧显示了一点它的标头),并将对该源代码采取行动。之前对 @nextLine()
的引用也是通过自动补全的方式编写的。
幸运的是,Cursor 已经知道你所有的文件(和文件夹)和函数名称,所以你不必输入全名,只需输入足够的内容让它自动补全,然后按 — 你猜对了 — Tab 键!你也不必告诉它你的函数或文件在哪里。
当你以这种方式引用你的代码时,你正在将当前源代码包含在提示符中,并确保其内容在答案中被考虑在内。Cursor 在任何时候可以处理多少代码取决于你使用哪种模式与其交互(稍后会详细介绍),但是通过函数、模块、文件或文件夹名称调用代码总是将 Cursor 指向该确切代码。
这意味着我们可以问更复杂的问题,比如,“你能找到 @components
中所有使用通配符导入的地方吗?”Cursor 将仅在该文件夹中查找答案。在最高级别,我们可以编写 @codebase
,Cursor 在生成答案时将考虑整个代码库。在代理模式下, @codebase
包含在所有请求中,我们使用特定的模块或函数名称来限制操作或指向特定的代码结构。
2018 年,洛杉矶原版《The Brady Bunch》房屋的业主将该物业挂牌出售,其外观与 70 年代经典剧集中的外观保持一致。HGTV 以 350 万美元的价格购买了该房屋,该房屋被用作《Brady》家庭装修电视节目的道具,然后以 320 万美元的价格卖给了一位粉丝。希望他们在节目中赚了钱!
5. 修缮者
在聊天中修复
VS Code 在你将光标放在 linting 错误上时,修复 linting 错误的能力非常有限。会出现一个对话框,其中包含针对明显问题的选项,例如缺少导入。但是 VS Code 无法真正分析代码库或找出更深入的修复方法。这就是 Cursor 的“在聊天中修复”选项的用武之地。它取代了 VS Code 在这些错误上的弹出窗口。
当你点击 linting 错误时出现的“在聊天中修复”选项会将问题提交给代理进行全面修复,但通常只需按 Tab 键就足够了 — 而且只要靠近该行就可以了;你不必点击特定的错误。第二个 Tab 键将修复屏幕截图中显示的下一个错误,进一步按 Tab 键将向下进行文件,直到没有 linting 错误为止。太棒了!
当你选择“在聊天中修复”时,你看到的错误将被复制到屏幕右侧的聊天窗口中。聊天会自动看到整个 @codebase
,并且还可以对其他文件进行更深入的调查。
这非常适合解决你在一个模块中看到错误但实际上是在另一个模块中引起的问题。在这里,你可能已经知道出了什么问题,并且你可以自己修复它。拥有 Cursor 这样做的好处是它快速、准确,并且不会在像这样的简单修复上犯愚蠢的错误,而人们会感到疲倦 — 尤其是在重复、详细的工作中,他们的表现会下降。
AI 的性能也会下降,因为你提交的上下文窗口或文本量会随着线程的持续增加而不断增加。这是你的成人监督必须发挥作用的另一个地方。当主题发生变化或结果实现时,你需要切断线程并开始一个新的聊天,以防止 AI 走得太远并引入不相关的材料。你之前的所有聊天记录都会被保存,所以如果你发现你需要回到之前的问题,请重新加载该聊天并继续它,以便包含所有之前的上下文。
这则来自 1927 年美国音乐学校的著名广告以我最喜欢的名言之一开头。当我们在 AI 演奏钢琴前坐下时,有些人笑了… 但是,哦,当我们开始演奏时!请注意,该广告被放置在报纸的“赚钱机会”部分。
6. 当我坐在钢琴前,他们笑了……
Agentic Thinking
Agent 就像 Cursor,需要比我用过的任何 AI 产品都更像人类的聊天方式。对于一般的推理模型来说也是如此,这意味着一个模型会将其自己的输出提交回 LLM,以查看其是否正确。在之前的 LLM 编程中,就像我在其他文章中谈到的那样,我建议将你的指令分解成小的步骤,这样 AI 就只会按照你说的去做。
这种方法不适用于 agents。
要让 agent 为你工作,你必须引入人类的因素。你必须说诸如“我想要”和“我感觉”以及“我担心……”之类的话。就像关系顾问告诉你对你的伴侣说的话一样。这看起来非常违反直觉,尤其是当我通常不喜欢将机器拟人化时,因为它会让我们认为它们是神奇的。但在这里,这是必要的,因为模型的“推理”部分在决定解决方案是否正确时会考虑你的感受(就像一个好的伴侣)。
软件最棒(也最令人沮丧)的事情之一是,有一百万种方法可以做任何事情。软件极客们对所有让软件运行的“正确”方法都有一些最好的争论。而且这 99% 都是废话,因为所有软件和所有计算机在底层都是功能等效的,正如艾伦·图灵所证明的那样。
既然没有“一种正确的方法”,那么你获得许可去杀人的 agent 绝对会想出一些方法来做你要求的事情。保证。 这会是正确的方法吗? 你的应用程序的正确方法是什么? 只有你知道。
你必须非常清楚地了解它i才能让 AI 遵守。你不能在你的要求中模棱两可,否则你会得到其他一些有效的、但对你的应用程序来说不是“正确”的方法。
这就是 AI agent 迫使你作为程序员升级的地方!如果你无法完全描述你的应用程序应该如何工作,它就只会按照 AI 决定的方式工作。而这离蒂珀雷里还很远。
这是一个简单但高度工程化的提示,只能有一个正确的结果。这是一个简单的任务,也是 Cursor 非常擅长的任务,但需要人类来决定是否需要这样做。在这次更改之后,我通过简单地说,让我们对 `@someOtherModule` 做同样的更改,对其他 40 多个文件做了同样的更改。
当“提示工程”这个术语第一次出现时,这有点像个玩笑。但现在不是了。我不得不真正地坐下来思考我的提示——不仅要思考其中会包含什么,还要思考需要多少个提示才能到达终点线,在哪里中断聊天线程,以及该说什么和不该说什么。
对 agentic 提示的思考与对传统编程的思考一样多。唯一的区别是,这种新方法要快得多。
这就是为什么我们作为经验丰富的程序员在这个新时代的工作将变得更加重要。即使我们能够得到一个完全包含应用程序所有规范(视觉设计、JIRA 票据、TDD、QA 等)的提示,也必须由人类来制定该规范,并且这将作为我们的工作交给我们中的一个人。人类将需要编排一个 RAG 应用程序,以构建和维护此类代码。但这个人不会编写很多代码,只是批准或拒绝它,并提出需要进行的额外更改和改进。
公司也不会将这些 agent 编码任务交给初级程序员——正是因为他们缺乏告诉 agent 该做什么所需的整体架构视图。詹姆斯·邦德不是英国情报部门的负责人是有原因的。他没有足够的智能,没有足够的信息,没有足够的全球视野。
1966 年的《碟中谍》电视剧以自毁式录音机为关键的沟通手段,这一梗被沿用到现代电影中。虽然你的代码和聊天不会自毁,但你需要知道何时应该创建和销毁它们。就像任务磁带上的关键警告一样,你可以在简短的提示中包含关键警告和重要的考虑事项。
这条消息将自毁…
当你向一个 agent 提交提示时,你赋予了它进行所有建议更改的权力,包括大规模编写、重写或删除代码,创建和删除文件,彻底修改你的构建设置或运行时环境,或者其他明显涉及破坏性的大规模更改。
你为什么要这样做?嗯,在现实世界中,我们一直这样做。开发人员每天都在进行破坏性更改。在许多情况下,如果不首先破坏应用程序,根本无法扩展它——而且这是设计使然。我们不想尝试为遥远的未来构建,所以我们必须打破我们最初构建的简单设计和连接,以获得更强大的模块,这些模块是可重用的,并且可以以不同的方式部署。
真正发生的事情是,我们通常默默地独自完成所有这些更改。我们大规模地更改我们的前端以适应 API 更改,或者我们更改我们的后端,因为工具需要这样做。这是一个隐藏的时间消耗,我们不会谈论它,因为我们没有更好的方法。
Agents 是更好的方法。如果我们可以在高层次上描述我们需要的大规模更改,并触及所有可能的“陷阱”或更改必须包含的所有重要约束,我们就可以坐下来观看 agent 完成所有这些更改——从一个有效的代码版本移动到下一个,而无需运行中间的损坏版本。
这是一个更改导致意外破坏的例子。我需要添加一些架构指导,而它无法从我的代码中知道或推断出来——就像人类程序员向队友提及一些他们无法自行推断的事情一样。请注意,在我添加此信息后,Cursor 现在“看到了问题”并编写了修复程序,即使它包含拼写错误。如果我没有做自己的诊断性功课并添加该信息,Cursor 可能会建议另一个不起作用的解决方案。
现在,你的一部分人会说这是不可能的,并且它会在中间崩溃。你是对的。但你只需要忽略它。即使你的大修复需要回滚 Cursor 所做的一系列更改(比如从 repo 中转储正在进行中的文件),这也没关系,因为你只是要立即再次发送 agent 来编写新的文件。
这是一个明确的例子,说明我们需要放弃旧的编程风格才能使这项工作奏效。
我们可以让它尝试完成任务并自行评估,而不是在中间停止 agent 并试图让所有内容在你的脑海中融为一体。如果它不对,我们将其转储出来并更改我们的提示,告诉它我们不喜欢什么或出了什么问题。
当我们必须自己编写每一行代码时,仔细考虑它们每一个都是有意义的。但有了 agent,这样做就没有意义了。通常,Cursor 会提出一个解决方案,并在实施过程中决定它并不好。然后它会自行纠正!
其他时候,如果它忘记了重要的事情或走上了明显的错误道路,我会按下停止按钮。但这应该怪谁呢?不是 Cursor。如果我在最初的提示中包含了约束或问题,我就不会一开始就遇到这个问题。在这里,宏大的“人类思考”和架构观点才是王道。
那些“修订”对话看起来最像婚姻咨询。我发现自己会说,“我担心我们忽略了某某事”,或者“我真的不喜欢更改那个,因为这件事”。但就像人类伴侣一样,除非我直接表达出来,否则 AI 无法知道我的担忧。我经常惊讶于,在解决更困难的问题时,这些“沟通遭遇”才是导致修复工作的原因。
Mrs. Slocombe,英国百货公司喜剧《你被服务了吗?》中的资深售货员,以她的口头禅“而且我对此表示一致!”而闻名。它通常像“皇家我们”一样被拖出来,暗示她自己(显然是不寻常的)品味至高无上。你应该像对一切都表示一致一样与 Cursor 交谈,让它复制你的编码风格,从函数签名到名称再到注释。
7. 而且我对此表示一致
复制你的风格
在 AI 编码的早期,人们担心这些建议会从别人的代码库中提取出来。从我已经说过的话中应该很明显,虽然在现有代码上进行训练为 Cursor(实际上是 Claude Sonnet)提供了大部分基础理解,但在我的代码上采取行动并复制我的代码才是赋予它力量的原因。
考虑到这一点,我尝试多次引用我自己的代码和我自己的风格。我会说,“将 @someFolder
中的所有注释更改为使用 @myModule
中建立的模式。”或者,“我想开发一个模块,以与 @app-node-images
处理图像文件相同的方式来处理我的游戏中的音频文件。音频文件将在 @mp3
文件夹中。”然后让它编写新模块。所有风格、模式,甚至注释都将取自我现有的模块,并为音频进行更新。诸如键名之类的东西将自动调整……整个过程!
我一直相信复制我自己的工作代码,然后编辑它以适应新的场景。现在,我可以直接告诉 Cursor 这样做。扫描它编写的模块并自己定制它比从旧模块中复制粘贴并进行最少的手动编辑要快得多!我可以在一个模块中进行重构,然后说“以相同的方式重构 @someOtherModule
”,Cursor 将打开另一个文件,并向我显示更改,其中绿色线条表示添加内容,红色线条表示删除内容。
8. 抛开规则
设置
Cursor 与 AI 聊天机器人的诸多不同之处起初可能会让人不知所措,而其众多设置也并非一目了然。为了向早期通过定义严格规则运作的 Custom GPTs 致敬,Cursor 确实允许你为聊天和项目设置规则——比如“始终使用库版本 so-and-so”,或者其他你想要添加的总体约束。但根据我的实践,这并非必要,因为 Cursor 已经能够弄清楚你正在处理的内容,而且它不太可能建议一些与你当前应用相差太远的内容。例如,我不需要解释我正在使用 Lit 或 Vite,就可以谈论我的 Web 组件或构建问题。
让我们来了解一下最重要的设置……
在第一个设置面板上,你可以验证你的订阅级别,并从 VS Code 导入你的快捷键绑定,这只需要做一次。理论上,你可以像 OpenAI 的 Custom GPTs 那样制定规则,但当代理拥有完整的代码上下文时,我还没有看到这有什么直接的用处。
你可以完全免费地使用 Cursor,但你的请求都将以慢速模式进行,并且在达到每月限制后会被截断。它们仍然可以完美运行,你只需要等待那些付费购买额外配额的人先排队处理他们的提示。这绝对可用,我建议你在这种免费模式下进行所有实验。你可以扩展到 Pro 模式(目前为 $20/月),每月获得一定数量的快速请求和无限量的慢速请求。除此之外,如果你认为购买更快的速度有价值,你可以购买额外的代币。
在这里你可以更改模型,但不要动。它已经正确设置好了。如果你喜欢,可以为特定的提示选择模型。Claude 3.7 Sonnet Thinking 是最先进的。我在本文中完成的所有操作都没有选择模型,我认为这是未来趋势。(工具本身会选择模型。)
在这里,你可以输入你自己的 LLM 后端 API 密钥,但你不需要这样做。我认为你需要大量的请求才能低于 Cursor 的收费标准。你的情况可能会有所不同。你必须使用 Sonnet 模型才能获得代理行为,这很好,因为它在所有标准编码测试中都表现最好。
猜谜游戏…
在 Cursor 设置的“模型”选项卡中,你可以打开和关闭模型,稍后在页面上,看起来你可以输入你自己的 API 密钥,也许可以绕过这些限制。也许你可以,但你需要 OpenAI 和 Anthropic 的密钥,老实说,我怀疑除非你加入了这两家公司的大型计划,否则节省不了多少钱,但值得尝试一下。复杂的代理请求需要 Claude Sonnet,这是目前 AI 编码测试的领导者。
Mtume 创作的精彩的 80 年代 R&B 歌曲 Juicy Fruit 已经被采样了 119 次,其中包括许多顶级艺术家。而这“采样”了 Wm. Wrigley Jr. 公司于 1893 年推出的口香糖品牌,这个名字在 130 多年后仍然为 99% 的美国人所熟悉。这首歌还包含了许多其他的糖果引用,就像你的代码一样,在很大程度上是自引用的和相互关联的。它从自身采样以进行工作。
Juicy Fruit
最后,在“功能”选项卡中,我们得到了好东西。我已经打开了所有我提到的制表和预测功能。我还允许它对提示中未提及的文件采取行动。这让它可以修复因我请求的更改而涉及的所有必要文件。
为了获得最大的自动补全能力,请在此处打开 Cursor Tab 和 Cursor Prediction。同时打开“自动应用于上下文之外的文件”,以允许代理更广泛地进行修复和更改。
你会看到我没有勾选底部的 YOLO 模式框。默认情况下,Cursor 会在聊天中的每个操作(已完成的请求)处停止。当你提交给代理时,大多数操作会自动完成,但诸如文件删除之类的操作会等待你的批准。YOLO 模式会关闭该功能,而我还没有准备好这样做。:-)
9. 撞砖头,孩子!
代币限制
在免费模式使用了几天,然后使用了几天 $20/月的计划后,我决定尝试一次大型重构,并为快速完成付费购买了一些额外的代币。我设置了 $20 的限制,并在三天内消耗了 $12.64。就 AI 聊天而言,这相当贵。为了在这三天内完成的工作,这是否值得?绝对值得。
在订阅了 Pro 级别(每月 500 个快速请求)之后,获得额外快速代币的唯一方法是按次使用。除此之外,你将回退到速度较慢的请求,这些请求具有相同的功能,但在付费代币用户之后排队等待。
如果没有付费,或者仅仅支付 $20/月的基本计划,我本可以在稍长的时间内达到相同的结果,但任何雇主都会很快看到为这个工具每月为每个程序员支付数百美元的价值,如果他们真的用它来生产产品的话。
如果我必须在上次工作中证明这一点,这很容易,仅仅基于我可以完成多少张工单、积压项目和新功能,以及完成的速度。这就像问你在工厂的雇主是否会为你支付额外的一只手臂。是的,他们会的。
Cecil B. DeMille 1923 年的史诗巨作《十诫》需要世界上最大的电影布景和数千名演员来建造和填充。尽管它的制作风格“不惜一切代价”,但这部电影取得了巨大的财务成功,并帮助激发了电影制作人对更精美的布景和活动的思考。AI 代理及其“数千名演员”也将让你对自己的代码产生伟大的梦想。
10. 灯光,摄像,开始!
运行 Agent
在聊天窗口中,在新的聊天中提交第一个提示之前,选择左下角的 Agent
。这将为整个聊天启用 agent。当它思考并输出想法或代码时,您将看到一个停止按钮,以便在必要时中断。对单个文件进行每组更改后,您将看到该文件已打开,并突出显示了更改。您可以单独接受它们,也可以一次全部接受。一旦整个任务完成,聊天会提供一个“全部接受”按钮,以保存所有文件中的所有更改。
Cursor 中的新聊天界面允许您在左下角切换到 agent。您的聊天不会在 60 秒内自毁。它们会永远保留,如果您想继续使用相同的上下文、问题或解决方案,您应该再次调用它们。为每个新主题、问题等开始一个新聊天。
Cursor 确实会设置回滚点,并且可以撤销其自己的操作,但我不使用它来撤销我想要撤销的更改。我更愿意依赖我的 Git 仓库,在那里我可以看到一个命名的提交,并且我知道它里面有什么。Cursor 可以执行自己的回滚以完成我交给它的任务,但如果我要撤销,那将来自 Git(或只是在模块中使用 Ctrl-Z),而不是要求 Cursor 撤销某些操作。每当我这样做时,我都会确保告诉它我恢复了该模块以及原因——就像您与人类结对程序员所做的那样。
我使用 Cursor 对我的 Watson 游戏引擎所做的更改极大地改善了它的架构、可维护性和速度,并将构建大小减少了一半。由于这种类型的大量更改会引起如此多的破坏性更改,如果没有 Cursor,我不太可能解决它们。
我利用 Cursor 中大规模的重构能力,极大地改进了我的 Watson 游戏引擎 的基础,而没有中断游戏本身的发布时间表。我现在已经切换到 Cursor 作为我的日常 IDE。我想你也会喜欢它!