光标是一种AI代码编写和编辑工具,它代表了在软件开发中实际使用人工智能的重大进步,主要是通过提供“代理”,而不仅可以回答问题,而且可以按照自己的想法采取行动。这种强大的新能力需要一种新的方法来编程,其中您的先进推理技能比以前更重要。当代理人被“许可杀人”时,您的指示作为董事都会有所不同。
本文是我AI库的一部分。这些文章按复杂性顺序列出。它们并不是说明这些主题的先决条件,而是替代入口指向:
- 幕后|了解chatgpt的魔力
–没有数学或编程 - 昨晚一个人工智能挽救了我的生命|与chatgpt进行调试
–编程 - 英雄零|制作自定义GPT
–编程 - 一无所有的东西|一种理解AI的无痛方法
–数学和编程 - 杀人许可证|使用光标AI代理编码
–编程
我想向您展示如何找到光标的最聪明的功能以及如何利用它们来获得最大优势,但我不建议您从那里开始。如果您使用其他AI工具,请在使用光标的点上潜入与使用最后一个工具相同的方式。对我来说,那是与Copilot的VS代码。一旦光标中的任何“差异”平滑,请尝试下一个复杂级别。
这是我们要介绍的。可以随意跳过您已经知道或尝试过的任何零件。
- 什么是光标,为什么?
- 内联完成
- 选项卡要完成
- 与代码聊天
- 修复聊天
- 代理思维
- 复制您的风格
- 设置
- 令牌限制
- 运行代理
晚更新:光标已将用户界面更改为将聊天和作曲家选项卡组合到一个聊天框中,因此您的屏幕截图可能因我的而异。
什么是光标,为什么
光标是第一个真正有用的抹布应用程序之一。检索增强生成是一种奇特的方式,可以说“使用AI聊天来弄清楚如何控制应用程序的界面,而不仅仅是按下按钮并单击菜单。”每个RAG应用程序都将一些传统的用户界面与Backing LLM或大型语言模型和聊天框相结合。对于光标,传统应用程序是VS代码,用于编写代码的IDE或文本编辑器。
光标也是代理商,这意味着它可以像您所控制的代理一样执行半自主的行动,以完成您两个事先同意的任务。该控件可以从创建新文件并在多个模块上立即固定数百行的扩展 – 删除文件,打破接口并防止您的代码运行。因此,本文的标题。
如果您已经习惯了VS代码,则可以导入密钥绑定和设置。我不得不进行一次小调整,因为我的一个自定义键已由光标接管,但是很容易修复,因为我的装订没有删除。卸下光标绑定使我的原件在那里工作。此导入功能使您可以轻松地从VS代码转移到光标,VS代码是最受欢迎的IDE。
您可能在这一点上问:“如果光标是引擎盖下的vs代码,为什么不只是将其作为扩展名?”在这个问题上,光标开发团队回答说,仅仅扩展就不可能做出的更改。到本文结尾,您会看到这是真的。光标以无法扩展的方式接管对IDE的全面控制。
不用说,如果我们要对我们有价值的代码库进行代理控制,那么我们应该使用GIT的最佳实践。对我来说,这意味着要确保我始终拥有运行的存储库的副本,并且我在正确的位置(我使用gitkraken与github使用gitkraken)在正确的位置,让Cursor用枪支奔跑。如果我要寻求重大变化,请首先提交并推动该回购。如果事情正常工作,请再次提交并推动,这样我可以回滚,如果下一个更改不起作用。
这种思维方式将在代理商所需的新编码样式中发挥重要作用。我们过去试图在开始时仔细编写工作代码,然后以此为基础。仍然是这种情况,但是对于代理商,您会发现许多代码都会被编写并立即以更好(甚至是正确)代码清除,没有人关心。
换句话说,编写代码的工作变得如此快,便宜,以至于不再是主要工作。主要工作将评估这些变化,并接受或修改它们。这是一个狂野的新世界!
我希望您从本文中获得的一个关键要点是,光标(或下一件大事)不会消除您作为经验丰富的程序员的工作。恰恰相反。我希望您看到成为人类,监督员,经理,建筑师,深层思想家以及具有需求,需求和感受的人(是的!)在AI辅助编码中的作用比上一代软件开发中的作用更大。
当程序员摆脱键入低级语法和连接模块或API中连接界面的贪婪工作时,我们将拥有更艰苦的,人类级别的工作,即首先弄清楚应该对代码做什么。
您将很快发现007射击任何东西的能力需要您零件的精确计划才能射击所需的目标。您还将看到我们如何获得有关“我在一个小时内与AI制作应用程序”的无尽故事,该故事声称这些工具将解决所有问题。发生的事情是,这些故事的作者使用了像光标这样的工具来构建应用程序,而无需指定任何重要的内容。这就像出于任何原因将邦德派出一项杀害某人,任何人的任务。没有约束,没有参数,您当然可以编写代码。
问题在于,没有现实世界的应用程序可以使用这种方式。在我们的工作中,我们必须通过数百或数千个约束和要求不断发展和扩展(和替换)系统。尽管光标可以看到您的所有代码,但它无法理解任何代码。它永远不会知道您为什么要做某件事或您想要的事情 – 稍后我将向您展示如何以人类的方式提出这些问题。即使有了最仔细的指导和提示,您作为人类程序员的技能也会受到挑战,我敢说,通过与AI级别的一对程序员合作来升级。
内联完成
AI编码工具通常被描述为“在类固醇上自动完成”。这是一个很好的起点。光标可以通过将光标放置在某个地方并开始输入来帮助您编写或扩展代码,就像Copilot一样。我在这里猜测该产品被称为光标,因为这个光标在哪里以及它可以做的是整个过程背后的总体驾驶原则。在完全代理模式下,“光标无处不在”,并且具有我们习惯的自动完成功率。
关于光标的自动完成的第一件事是,它在光标上方几行以及下方的几行上查看。如果您进行的更改将在下面打破几行,光标将继续并建议更改。这是非常有用的,尤其是其研究其他模块的能力。光标能够找出非常复杂的更改,并在大型组中进行必要的更新,而不是一次。大时空。
选项卡要完成
随着代码的发展以适应新功能或被重构以将其清理起来,单个更改通常需要在同一模块中进行许多(低级)更改。这些不难弄清楚。实际上,您可能可以在进行第一个更改之前将它们弄清楚。例如,如果您要导入的模块中的某些东西发生了变化,则必须在此模块中调整所有用途。
这就是我称之为“驴工作”的节目。我知道需要做什么吗?是的。我可以告诉它是否正确吗?是的。我想坐在那里做所有这些吗?不,好,你猜怎么着?由于它读取了衬里(将红色弯曲的错误检查器置于其不满意的线条下),因此光标也会提前知道所有错误。
这是标签键成为您最好的朋友的地方。通过击打选项卡,光标将跳到需要修复的下一行 – 无论它在模块中有多远!现在,驴子正走到下一个岩石上,而不是我。
因为读取代码比编写代码要快数百次,所以我几乎可以立即查看建议的更改,然后按标签跳到下一个。
如果这都是光标,那仍然值得切换。由于TAB键具有很多用途,因此光标并不总是正确的。但这没关系,因为您只是撤消了自己不喜欢的更改(使用普通键盘快捷键),然后再次按标签!有时,您需要将光标本身更接近问题移动,然后按选项卡以获取修复程序。一开始这一切似乎都很奇怪。您只是在进出大块的代码块。您不是在写它们。但是,当您意识到自己通过打开文件并按下标签键完成了多个模块的巨大变化时,您会开始认为这可能很棒!
与代码聊天
光标宣传您可以“与代码聊天”,而且似乎您一直在与其他工具一起这样做。我可以向你保证,你没有。它们与光标的含义是通过使用 @键引用文件来专门调用文件和功能。如果您想更改DosomethingGreat()函数,则可以在提示中编写@doSomethingGreat()
。
幸运的是,光标已经知道您的所有文件(和文件夹)和功能名称,因此您不必键入全名,足以使其自动完成,然后按 – 您猜对了 – TAB!您也不必告诉它您的功能或文件在哪里。
当您以这种方式引用代码时,您将当前源包含在提示中,并确保答案中考虑其内容。您可以使用多少代码在任何一个时间点弄乱的代码取决于您使用哪种模式与之交互(稍后会详细介绍),但是按函数,模块,文件或文件夹名称始终将光标指向该准确的代码。
这意味着我们可以提出更多复杂的问题,例如“您能找到我有通配符导入的@components
中的所有位置吗?”光标只会在该文件夹中寻找答案。在最高级别,我们可以编写@codebase
,并且在生成答案时将考虑整个代码库。在代理模式下, @codebase
都包含在所有请求中,我们使用特定的模块或函数名称来限制操作或指向特定的代码构造。
修复聊天
当您将光标放在它们上时,VS代码可以解决覆盖错误的能力非常有限。出现一个对话框,其中包括丢失导入等明显内容的选项。但是VS代码无法真正分析代码库或找出更深层次的修复程序。这就是光标在聊天选项中的解决方案的帮助。它替换了这些错误上的VS代码弹出窗口。
当您在聊天中选择FIX时,您看到的错误将复制到屏幕右侧的聊天窗口。聊天会自动看到整个@codebase
,还可以对其他文件进行更深入的研究。
这非常适合解决一个模块中错误的问题,但它确实是在另一个模块中造成的。而且,在这里,您可能已经知道了什么问题,并且可以自己适合。让光标做的很棒的是,它是快速而准确的,并且不会对这样的简单修复,而人们却累了,尤其是从重复的,详细的工作中疲倦,并且其性能下降。
随着您提交的上下文窗口或文本量的数量,AI的性能也会降低,随着持续线程的增加。这是您成人监督必须发挥作用的另一个地方。您需要切断线程,并在其主题更改或达到结果时开始新的聊天,以防止AI乘坐桥梁太远并带来无关紧要的材料。所有以前的聊天都保存了,因此,如果您发现需要返回上一期,重新加载聊天并继续进行,以便包含所有以前的上下文。
代理思维
像光标这样的代理需要我使用过的任何AI产品的最人性化聊天水平。一般而言,推理模型是正确的,这意味着将其自己的输出提交给LLM的模型,以查看其是对还是错。在以前的LLM编程中,就像我在其他文章中谈到的那样,我建议将您的说明分解为小步骤,以便AI只能对您所说的话采取行动。
这种方法不适合代理。
为了让代理为您工作,您必须带来人类的方面。您必须说诸如“我想要”,“我感到”和“我担心的……”之类的话,关系顾问告诉您对您的伴侣说的话。这似乎是非常违反直觉的,尤其是当我通常不喜欢拟人化机器时,因为它使我们认为它们是神奇的。但是,这是必要的,因为在决定解决方案是对还是错(例如好的合作伙伴)时,模型的“推理”部分将考虑到您的感受。
关于软件的最好的事情之一(也是最令人沮丧的)是,有一百万方法可以完成所有操作。软件书呆子对使软件工作的所有“正确”方法有一些最好的论点。它是99%的BS,因为所有软件和所有计算机在引擎盖下都在功能上等效,正如Alan Turing所证明的那样。
由于没有“一种正确的方法”,因此您的代理人被许可杀死的经纪人绝对会提出某种方式来做您的要求。瓜尔河。这是正确的方法吗?您的申请的正确方法是什么?只有你知道。
您必须非常了解它才能使AI遵守。您的需求不能保持渴望,否则您将获得其他不适合您应用程序的“正确”的工作方式。
在这里,AI代理迫使您升级为程序员!如果您无法完全描述您的应用程序应该如何工作,则只有AI决定应应有的工作,它将仅起作用。距蒂珀雷里(Tipperary)还有很长的路要走。
当“及时工程”一词首先问世时,这是个玩笑。不再。我不得不真正坐下来思考自己的提示 – 不仅需要多少,而且需要多少才能进入终点线,何处打破聊天线程,该说些什么,不说些什么。
正如进入传统编程的代理提示中的许多想法一样。唯一的区别是,这种新方法要快得多。
这就是为什么我们作为经验丰富的程序员的工作在这个新时代将变得更加重要的原因。即使我们可以达到一个提示,该提示完全包括应用程序的所有规格(视觉设计,Jira门票,TDD,QA等),人类也必须是制作该规范的人,并且将授予我们中的一个人作为我们的工作。人类将需要协调构建和维护此类代码的RAG应用程序。但是,人类不会编写太多代码,只是批准或否认它并呼吁进行其他更改和改进。
公司也无法将这些代理编码任务移交给初级程序员 – 正是因为他们缺乏告诉代理商要做什么所需的整体建筑观点。詹姆斯·邦德不是英国情报的主任是有原因的。他没有足够的智慧,足够的信息,足够的全球世界观。
当您向代理提交提示时,您将赋予其建议的所有更改,包括大量编写,重新编写或删除代码,创建和删除文件,对构建设置或运行时环境进行大修,或其他大规模更改,这些更改显然涉及断路。
你为什么要那样做?好吧,在现实世界中,我们一直这样做。开发人员整天都会做出破坏。在许多情况下,根本不可能在不首先破坏它的情况下扩展应用程序 – 这是通过设计。我们不想为远的未来构建,因此我们打破了最初建立的简单设计和连接,以获取可重复使用并可以以不同方式部署的更强大的模块。
真正发生的事情是,我们通常会默默地彻底彻底地彻底彻底改变了所有这些变化。我们大规模更改前端以适应API的变化,或者我们更改后端,因为该工具需要它。这是我们没有谈论的隐藏时间下沉,因为我们没有更好的方法。
代理是更好的方法。如果我们能够描述高水平需要的巨大变化,并触摸所有可能的“陷阱”或更改必须包括的所有重要约束,我们可以坐下来观察代理人所有这些工作 – 从代码的一个工作版本移动到下一个,而无需在介于主题的情况下运行临时损坏版本。
现在,你们中的一部分是说这是不可能的,这将介于两者之间。你是对的。但是你只是忽略了这一点。即使您的Big Fix需要回滚光标做出的一系列更改(例如从存储库中倾倒工作文件),这也没关系,因为您只想立即将代理再次发送以编写新的代理。
这是一个明确的例子,说明我们何时需要放开旧的编程样式来进行这项工作。
我们可以让它试图完成任务并自己评估任务,而不是将代理在中间停止并试图将其完全融合在一起。如果不对,我们将其丢弃并更改提示,告诉它我们不喜欢什么或出了什么问题。
当我们必须自己编写每一行代码时,仔细单独考虑它们是很有意义的。但是有了代理人,这样做是没有意义的。通常,光标会提出解决方案,并在实施它的过程中决定它不是很好。然后它开始自我纠正!
其他时候,如果忘记了重要的东西或沿着明显错误的道路走,我会点击停止按钮。但是谁应该为此负责呢?不是光标。如果我在原始提示中加入了约束或问题,那么我首先就不会出现问题。大型人类思维和建筑观点统治着这里的一天。
那些“修订”对话是看起来最喜欢婚姻咨询的对话。我发现自己说的话是“我担心我们在忽视某某”,或者说:“我真的很不满意,因为这是另一件事。”但是,就像人类的伴侣一样,除非我直接表达他们,否则AI将无法知道我的担忧。我经常惊讶于在解决更困难的问题时,这些“沟通相遇”导致了工作解决方案。
复制您的风格
在AI编码的早期,人们担心这些建议将从别人的代码库中提出。从我已经说的是,在对现有代码进行培训的同时,它为光标(Claude Sonnet)提供了许多基本理解,而对我的代码采取行动并复制我的代码是赋予其力量的原因。
考虑到这一点,我尝试对自己的代码和自己的风格进行许多参考。我说:“更改@someFolder
中的所有评论以使用@myModule
中建立的模式。”或者,“我想以与@app-node-images
处理图像文件相同的方式开发一个模块,该模块处理我的游戏的音频文件。音频文件将在@mp3
文件夹中。”并让它编写新模块。所有样式和模式甚至评论都将从我现有的模块中获取,并更新到音频。诸如关键名称之类的东西将自动调整……整个工作!
我一直坚信复制自己的工作代码,然后对其进行编辑以适合新方案。现在,我可以告诉光标这样做。扫描它编写和自定义的模块要比从旧版本复制和粘贴并制作最少的手动编辑要快得多!我可以在一个模块中进行重构,然后说“重构@someOtherModule
”,光标将打开另一个文件,并向我展示绿线的更改,以增加添加和红线以删除。
设置
一开始,光标与AI聊天机器人的许多差异可能是压倒性的,而且许多设置并不是很明显。为了通过定义严格的规则来对早期的自定义GPT进行点头,光标确实允许您为聊天和项目设置规则,例如“始终使用so-so so-so”或您想要添加的其他整体约束。但是我在实践中发现这不是必需的,因为光标已经可以弄清楚您正在使用的是什么,并且不太可能在您当前的应用程序之外提出太远的问题。我不需要解释一下我正在与LIT或VITE合作,例如谈论我的网络组件或构建问题。
让我们浏览最重要的设置……
您可以完全免费使用光标,但是您的请求将处于缓慢的模式,并在您达到月度限制后切断。他们仍然很好地工作,您只需要等待,而为额外的信用付费的人们首先排队。这绝对是可以使用的,我建议您在此免费模式下进行所有实验。您可以扩展到Pro模式(当前$ 20/mo),以获取每个月的快速请求和无限慢的请求。除此之外,如果您看到购买速度提高的价值,则可以购买额外的代币。
在光标设置中的“模型”选项卡上,您可以打开和关闭模型,然后在页面上向下打开模型,看起来您可以输入自己的API键,也许可以绕过这些限制。也许您可以,但是您需要开放式和人类的钥匙,老实说,我怀疑除非您制定了这两家公司的巨大计划,否则我怀疑会有很多储蓄,但值得一试。复杂的代理要求需要Claude SONNET,这是AI编码测试中的当前领导者。
最后,在“功能”选项卡上,我们可以找到好东西。我已经打开了我提到的所有标签和预测功能。我还允许它在提示中提到的文件以外的文件上发挥作用。这是通过我请求的更改之一来修复所有必要的文件。
您会发现我没有检查底部的Yolo模式框。默认情况下,光标在聊天中的每个动作(完整的请求)中停止。当您提交代理时,大多数操作会自动完成,而不是等待您批准的文件删除之类的东西。 YOLO模式将关闭,我还没有。 🙂
令牌限制
经过几天的免费模式,然后几天$ 20/mo计划,我决定尝试大型重构,并为快速完成付费。我设定了20美元的限额,并在三天内消耗了12.64美元。就AI聊天而言,这相当昂贵。这三天内的工作值得吗?绝对地 。
我本可以在不支付的时间稍长的时间内或仅支付20美元的基本计划而获得相同的结果,但是,如果他们实际上用它来筹集产品,则任何雇主都会很快看到每月每月支付数百美元的价值。
如果我必须在上一份工作中证明这一点是合理的,那么这很容易基于多少票,积压项目以及我可以完成的新功能以及多快的速度。这就像询问您的工厂雇主是否会为您支付额外的手臂。是的,他们会。
运行代理
在聊天窗口中,在新聊天中提交第一个提示之前,在左下角中选择Agent
。这使代理商可以进行整个聊天。 While it’s thinking and outputting ideas or code, you’ll see a stop button to interrupt if necessary. After each set of changes to a single file, you’ll see the file opened with the changes highlighted. You can accept them individually, or all at once. Once the entire task is done, the chat offers an Accept All button to save all the changes across all files.
Cursor does set rollback points and can undo its own actions, but I don’t use that for changes that I want to undo. I’d much rather rely on my Git repo where I can see a named commit and I know what’s in it. Cursor can do its own rollbacks to complete the tasks I give it, but if I’m going to yank the rug, it’s going to be from Git (or just Ctrl-Z in a module) rather than by asking Cursor to undo something. Whenever I do this, I’m sure to tell it that I reverted the module and why — just like you would do with a human pair programmer.
Those are all my insights for today. I hope you found them helpful. If you did, a clap, comment, or share to your network helps my visibility, especially now that I’m in job hunting mode since my former studio closed.
I do thank you.
As always, I invite you to review my other articles here on Medium and visit me at my website to connect and comment.
Until next time… Be well!
— D
David Bethune
版权声明
本文为本站原创内容,转载需注明文章来源(https://www.eiefun.com),另:文中部分素材可能会引用自其他平台,如有侵权或其它,请联系 admin@eiefun.com,我们会第一时间配合删除