最近把Copilot和Cursor都深度用了一周,主要写Python后端和一点React。发现简单需求还行,比如写个排序、加个接口,但一旦涉及项目现有架构,它就开始瞎编了。比如我让它重构一个带事务的数据库函数,它直接给我生成了一堆不存在的表名,还自作主张加了缓存逻辑,我review起来比手写还累。是不是我prompt写法不对?还是说这类工具本质上只能当高级补全用,没法真正理解复杂业务?有没有人用它们成功搞定过中型项目重构的?求指点一下使用技巧。
Copilot和Cursor都用过了,为什么感觉AI写代码还是不太靠谱?
全部回复
共 53 条说实话你这个问题我太有共鸣了,我拿Cursor试过几次中型服务拆分,结果它把整个项目的依赖关系彻底搞混,生成的代码里甚至出现了两个不同版本的同一个工具类,我最后花了两天清理它的“杰作”。我觉得核心问题不是prompt写法,而是这些模型对“现有架构”的感知其实非常浅层,它们更像是在做高频模式拼接,而不是真正理解业务约束。你提到的事务函数,我猜它看到“数据库”就自动脑补了一堆常见但未必存在的表和缓存逻辑,本质上是把训练数据里的通用套路硬套上来。我现在的用法是把它当成一个超级聪明的结对程序员,只让它写清楚边界的小函数或者帮我生成测试数据,涉及到跨模块改动时,我会先把关键的接口定义和异常处理写成注释喂给它,让它在这个“笼子”里发挥。至于中型项目重构,我试过唯一算成功的一次,是把重构拆成十几个极其细小的步骤,每一步都验证通过再让它继续,但说实话那效率也没比手写高多少,可能AI离“靠谱”还差一个能真正跑通代码并理解业务语义的验证层吧。
本质就是高级补全,别指望它理解业务,把大任务拆成小函数喂给它的成功率会高很多。
试试把项目结构和相关代码贴进prompt里当上下文,再限定它别加东西,我这么干之后幻觉少了不少。
说实话你的体验挺典型的,我拿它们搞中型项目重构也翻过车,后来发现关键是得把大任务拆成“带明确输入输出的小步骤”喂给它们,尤其要把现有表结构和事务边界写进上下文里,不然它只能靠猜。另外我试过让AI先写个重构方案让我审,再动手写代码,会稳很多,但最终业务逻辑还是得自己把关。你这感觉不奇怪,工具目前更像高级结对程序员,没法替代你对架构的掌控。
我也有同感,尤其是让它改老代码的时候,它经常凭空造字段和函数,感觉就是根据上下文猜,根本没读过项目里其他文件。后来我改成先让它读相关模块,再把接口和表结构贴给它,情况好一点,但也只是好一点。中型重构想靠它全自动基本不现实,当个能聊的补全工具还行,关键逻辑还是得自己盯。
我一般只让Cursor干“有明确输入输出”的活,比如补测试、写脚本、迁移单个函数,涉及跨模块重构基本不用它。它看不到运行时上下文,表名和业务约束全靠猜,编缓存逻辑太正常了。想让它靠谱点,可以把相关文件手动拖进上下文,再把接口契约和不能动的边界写清楚,但也就是减少翻车率。真要中型重构,还是自己拆任务、定好每一步的验收标准,再让它按小步执行。
这问题我太有同感了,上个月我也拿Cursor去改一个老项目里的订单状态机,结果它直接给我编了三个不存在的字段名,还特别自信地写了个迁移脚本,我差点就信了。后来我琢磨了一下,感觉核心问题是这类工具默认只能看到你当前打开的文件或者它自己检索到的片段,根本不知道你整个项目的表结构、依赖注入方式、还有那些藏在角落里的业务约束。你让它重构带事务的函数,它可能连你用的ORM是SQLAlchemy还是Django ORM都没搞清楚,就开始按训练数据里的常见模式硬套。所以我现在基本只让它干两件事:一是写那种完全独立的纯函数或者工具类,二是帮我补全已经写好注释和类型标注的代码块。真要动架构,我会先把相关文件、表定义、调用链都手动贴给它,然后明确告诉它“不要新增任何外部依赖,不要改表名”,这样出来的东西至少能review。另外有个小技巧,你可以在项目根目录放一个精简的架构说明文件,Cursor有时候会读到,能减少不少幻觉。但说真的,想靠它搞定中型项目重构,目前还是别抱太大期望,它更适合当个打字速度超快的实习生,而不是能替你思考的架构师。
我一般只让它干脏活累活,架构和业务逻辑还得自己来,它连你项目里表名都记不住。
中型项目重构得先喂它架构文档和关键文件,不然它只能靠猜。我一般让它只改指定函数,别放权太多。
我也有同感,尤其是让它碰项目里已有的业务逻辑,基本就是灾难现场。后来我改了策略,不指望它懂架构,只让它在我划定的函数范围内干活,上下文手动喂给它相关代码。重构这种活还是得自己拆步骤,把大任务切成小到它能看明白的粒度,它生成的代码才勉强能看。说到底它就是个记忆力超强的补全工具,别真当架构师用。
我一般只让Cursor做局部改写,比如把一段逻辑抽成函数、补个类型注解,这种它挺稳的。真要动架构或者跨文件重构,我会先自己列好改动点,再一个文件一个文件让它改,千万别直接丢个大需求过去。它不理解业务上下文是硬伤,但当做带记忆的超级补全来用,效率还是能提不少。你那个事务函数的问题,试试把表结构和相关代码一起丢给它,可能会好点。
我一般只让它干“有明确输入输出”的活,比如写单测、补类型注解、生成样板代码。重构带业务逻辑的模块真不行,它不知道你库表长啥样,也不懂事务边界在哪。我的做法是先自己把接口和关键路径拆出来,再让它按小函数逐个补全,最后自己拼。想靠一句话让它理解整个项目架构,目前还不太现实。
我倒是用Cursor重构过一个Flask项目,但前提是把相关文件都拖进上下文里,还得手动@一下关键模块。光靠它自己猜,确实容易给你编出幻觉表名。我一般让它先出重构方案,我确认完再让它改,比直接生成代码靠谱不少。你那个带事务的函数,估计得先喂给它schema和调用链,不然它根本不知道边界在哪。
它就是个高级补全,别指望它懂你的业务架构。重构前先把相关表结构和上下文喂给它,能好不少。