最近从Copilot转到Cursor试了试,感觉写简单工具类确实快,但一到业务组件就头大。比如我写一个带筛选、排序、分页的表格组件,第一次生成还挺满意,结果产品说要加个搜索框和联动逻辑,我试了在同一个chat里补充描述、也试过开新对话只贴当前文件,但每次改出来的代码要么把之前功能弄丢了,要么新增逻辑和旧代码混在一起导致一堆报错。最崩溃的是它经常把“按日期排序”理解成“按时间格式排序”,然后生成一堆无关代码。是不是我prompt写得太笼统了?还是说这种迭代式开发本身就不适合AI编程工具?求老哥们分享下怎么跟AI“结对编程”比较丝滑。
用Cursor写React组件,每次改需求都要重写整个文件,是我prompt姿势不对吗?
全部回复
共 5 条说实话这不是你prompt的问题,而是对AI编程工具期望值有点太高了。Cursor这类工具在“一次性生成独立模块”时确实很强,但一旦涉及到迭代修改,它的上下文理解能力就会暴露短板,尤其像表格组件这种状态逻辑耦合特别重的东西,AI很容易在改A功能时把B功能的变量名弄混。我自己的做法是,把表格拆成几个独立的小文件,比如筛选逻辑单独抽成一个hook,排序分页各一个hook,然后每次只让AI改其中一个文件,这样它犯错的概率会低很多。另外“按日期排序”被理解成“按时间格式排序”这种语义偏差其实很常见,建议你在prompt里直接给出具体的排序字段名和数据类型,比如“按created_at(ISO 8601字符串)升序排列”,少用自然语言描述。说到底,AI更适合当个帮你写样板代码的实习生,关键的业务逻辑和迭代控制还是得自己拿捏好。
深有同感,我也踩过这个坑。后来发现这种迭代改代码,最好别指望它自己理解上下文,我会手动把当前文件的完整代码和需求变化一起贴进去,甚至标出哪几行不能动,效果会好一些。另外“按日期排序”这种歧义,我现在习惯在prompt里明确写“按创建时间的字符串升序排列”,少留模糊空间。
说实话,你这个痛点我太懂了,Cursor在生成静态代码时确实惊艳,但一涉及迭代修改就很容易翻车。我感觉问题不全在你prompt上,而是AI对“修改”这件事的理解跟人类不一样——我们改需求是增量调整,它却倾向于根据新描述重新推演整体逻辑,所以经常把之前稳定的功能冲垮。我自己的经验是,尽量把每个独立功能拆成单独的对话或文件去维护,比如表格本身一个文件,筛选逻辑一个hook,分页一个组件,这样改搜索框时只改对应模块,AI的“记忆负担”会小很多。另外你提到的“按日期排序”被错误理解,其实可以在prompt里加些极端具体的示例,比如“点击表头的‘创建时间’列,按2024-01-01早于2024-02-01这样的数值顺序排列,不是按格式显示”,用反例堵住它的脑补。还有一种玩法是每次改需求前,先让AI把当前代码用注释标出关键逻辑的作用,再告诉它新增需求,这样它至少能分清哪些是地基哪些是新墙。不过说实话,如果需求变更特别频繁,我还是觉得传统手动改配合AI做片段生成更稳,全交给AI迭代容易陷入“改一次崩一次”的循环。
你这情况我太熟了,其实不是prompt的问题,是Cursor在处理复杂状态逻辑时天然就容易跑偏。我现在的做法是每次改需求前先手动把核心逻辑拆成独立的函数或hooks,再让AI针对单个函数改,不然它一碰大文件就容易“失忆”。另外可以试试在描述需求时明确加上“不要动原有筛选和分页的代码逻辑”,能少很多误伤。
我也有同感,Cursor写新代码确实快,但迭代改需求时特别容易翻车,感觉它不太擅长理解“只改这里,别动其他地方”这种指令。后来我试着手动把要保留的功能在prompt里明确列出来,再附上关键代码片段,效果会好一些,但离丝滑还差得远。感觉这种复杂业务逻辑,AI还是更适合做辅助拼接,核心设计还是得自己把控。