用这种LLM辅助的IDE一段时间了,断断续续做了几个小项目了,总结一下整体的感受和自己的一些使用经验。
从Cursor开始又回到Cursor
第一个真正开始使用的LLM的辅助开发IDE就是Cursor,Github的Copilot支持尝试过,但是并没有真正的在平时开发中用起来。第一次使用Cursor开发还是很爽的,全称都是在和AI聊天,自己没写一行代码。然后就换成了Windsurf,换的原因也是很简单,Cursor的免费期限很快就到了,换邮箱的方式确实很有效,但是薅羊毛都嫌麻烦的我决定转到不用薅一直有羊毛的Windsurf上。用Windsurf很快完成了一个小工具的开发(就是一些数据库的增删改查),在使用过程中发现每次生成的代码看似很好,但是很多细节部分需要调整,例如显示的字段名称、列表不显示全部字段等等,就算你在prompt中加上详细的要求,也不是每次生成的尽如人意。后来不得以转回到了Cursor,发现还是Cursor的羊毛比较好(其实还是LLM的能力,Cursor可以使用gpt-4o、cloude-3.5-sonnet)。最后,还是变成了Cursor的付费用户。
Cursor使用中的技巧
一个功能模块的开发
Cursor的使用门槛其实并不高,但是用好还是需要一些Prompt Enginner的技巧。我常用到的就是few-shot的开发技巧,例如我想开发一个和之前某一个页面完全一样的列表页,我常用的提示词如下:
c1 TEXT NOT NULL,
c2 TEXT NOT NULL,
c3 TEXT NOT NULL,
c4 TEXT NOT NULL,
c5 TEXT NOT NULL,
c6 TEXT, -- 交易类型
PRIMARY KEY (c1, c2)
);表格的查询、修改、删除、新增功能。
如果有一些特别的要求也尽量写到你的提示词里面,例如要表格t2的所有列都要显示在查询列表中等等。
这样Cursor就会学习我们给出的几个文件和几个函数,生成对应的表格的列表页、新建页、修改页和删除功能。它不但会完成前端也会完成后端代码开发,很多内容几乎可以直接接受。
这个就要求我们要人工打造一个很好的样本输入,也就是@1.html、@1DB.py、@ADD1.html 和@EDIT1.html 文件要精心的设计开发,保证功能正确并且结果可接受,同时也要完成 @list 、@add、@edit、@delete 几个功能的开发,代码要经过反复的设计和思考,让大模型有一个优秀的可参考的数据。
代码生成后的人工工作
并不是代码生成后就结束了,还是需要很多人工的review的。整个使用LLM生成代码过程中,每一行代码都需要人进行细心的review,里面会有很多小问题,例如字段名称不对,两个类似功能的页面样式不一样,修改功能主键不对等等小问题,这些都需要人工review完成最好直接手动修改,这样的小问题再使用LLM如果没有做好Prompt的输入就会导致越来越乱。在使用LLM生成代码的时候,人工更像是结对编程里面的导航者一样,要时刻关注LLM写的代码的正确性,保证写的代码至少是功能正确。
如果一个功能需求需要进行反复修改,那么对应的代码我更推荐从零生成,否则在不断的修改过程中,大模型生成的代码会把原来的代码改的很差,很多不用的代码段就放到哪里不做任何处理,在一些需求修改后,大模型往往会新生一段代码逻辑而放弃修改原有代码,那么原来代码就有可能不会再被调用了,这样时间长了很多代码都不知道干什么的、谁调用的了。
总结
总体用了一段时间后,发现最初的一些认识也是并不全面,当然现在的认识也不是很全面。没有代码基础的人还很难使用大模型直接开(这里说一些小工具除外)。这里我们说要有一些好的输入,其实这里也可以是一些你想要参考的功能,这样就模拟你想要的交互功能复制一个应用。无论如何都应该试一试,等真正用了一段时间,就会熟悉并理解这个人机Pair的微妙之处。