一、灵魂拷问 - “AI提效200%?我信你个鬼!”
提到AI辅助开发,很多同学都吐槽过。
“AI写的代码都很垃圾啊,问AI问题很多时候就像对牛弹琴一样,答非所问”。
其实并不见得是AI无法胜任我们的开发需求,关键在于要掌握正确的使用方法,就像学习IDE和Git工具一样。
那为什么很多同学使用AI的效果不好呢?通常有以下三个原因:
1.提示词不够精准
许多人习惯用模糊指令,比如“写个登录代码”,但AI不是人类,它需要明确的任务路径。正确的提问方式应当为:“使用 Spring Boot 框架,搭配 MySQL 数据库,采用 BCrypt 加密算法,编写包含用户名密码验证、登录失败提示、用户会话管理的用户登录功能代码”。
2.使用方式不当
我们不能期待AI完全替代我们来进行思考,正确的AI辅助开发思路应该为:
1:用提示词生成80%框架代码。
2:人工补充核心业务逻辑。
3.工具选择不当
使用通用的大模型AI工具进行代码生成,而不是专业的开发工具。有时候我们会发现,让ChatGPT生成代码,光给AI讲清需求背景以及代码上下文就得反复沟通十多次,有这功夫确实不如我自己动动手了。
二、Cursor的杀手锏 - 不是“问答AI”,是“编码协作者”
Cursor与通用大模型AI的本质区别在于与代码环境深度集成,解决了基于通用AI进行代码生成时,沟通吃力的致命缺陷。
它“看得见”你的代码
Cursor 不仅仅是一个代码补全工具,它实际上是一个完整的 IDE,它的核心是围绕 AI 驱动的编程体验进行设计。基于Cursor进行开发时,再也不需要在聊天框里费力描述代码,省去了复制粘贴的麻烦。你只需要把代码片段、多个文件、甚至整个文件夹选中并拖动到Cursor的Chat界面,Cursor就可以基于上述的代码背景完成开发。
任务自治:从指令到交付的闭环
通用大模型AI往往只会生成代码片段或描述,在此之后你需要手动进行逐行整合。
而Cursor会从创建代码目录开始,到Cursor帮你创建测试类并自动执行测试完毕为止,完整的进行代码交付。中途出现的任何问题,Cursor会给出方案,并让用户选择如何修改。然后重新自动进行测试,直到代码可用为止。
我们以让Cursor生成一个简单的天气爬虫为例: Cursor基于我们的要求生成完成代码后,会自动展开测试
Image text
此时Cursor发现没有爬取到任何天气数据后,给出了两个建议让我们选择。
Image text
我们让Cursor自动修复后,Cursor会重新引导用户执行测试,我们点击右上角“Run”执行脚本,这一次爬虫可以正常运行。
Image text
风险把控:Cursor驱动代码审查
在代码审查方面,Cursor能够基于用户给出的规范更灵活地识别不合理的代码,极大提升代码质量和审查效率。并根据CR的结果自动生成修复方案并应用。下面给出一个CR的提示词案例:
复制使用下面的git命令, 输出当前分支与远程主分支的差异, 输出到cr.diff 文件中 git diff origin/master > cr.diff 扫描diff 文件中的差异代码。reviwe 的规则如下 1. 方法体行数应少于100行, 不包括空行,和注释 2. 枚举定义需要有两个以上属性, code, name, 并且需要有通过code获取枚举项的方法 3. 接口返回false , 前端是否有对false进行处理 4. throw 了异常的位置, 一定要打log日志 5. 所有的public 公有方法都要打印入参log.info日志 6. 所有的public 公有方法, 结束都要打印结束日志 7. 所有调用rpc的方法, 都要打印日志 8. 所有方法都要有方法级别的注释 9. try catch异常后, 如果在catch 中又抛出了新创建的异常时, 需要将原异常赋值给新异常, 案例如下: ```java try { ApiResult<String> result = uploadService.getUploadId(uploadIdDTO); log.info("UploadServiceHelper#getUploadId result:{}", JsonUtils.toJsonWithoutNull(result)); if (result.isSuccess()){ return result.getData(); } }catch (Exception e){ log.error("UploadServiceHelper#getUploadId 调用uploadService.getUploadId失败", e); throw new MyException("调用uploadService.getUploadId失败", e); } ``` 10. 不能调用被标记@Deprecated 的属性或方法或类 11. 定义的常量值, 给出清晰的注释说明用途, 避免硬编码 12. 标注了@transactional的方法要明确回滚异常类型, 对于只读操作要标注只读readOnly=true 提高性能 13. 3次以上字符串拼接使用StringBuilder代替字符串拼接 14. 检查是否存在其他破坏兼容性的改动或逻辑上的错误 遍历所有规则, 一个规则一个规则的去检查增量代码的规范性, 每个规则进行Review时, 使用独立的上下文, 最后归纳所有的Review结果. 输出违反规则的文件位置, 并修改对应文件 符合规范 cr 结束后将cr.diff 文件删除
然后Cursor会给出如下的输出:
Image text
Image text
最后,Cursor会基于上述审查结果自动进行代码修改,用户可以手动选择接受。
这些能力的叠加,使得在实际开发中,原本需要一天完成的任务,借助Cursor往往三四个小时就能搞定,真正实现效率翻倍的可能。
三、关键提醒:效率倍增的前提是“善用其长,避其之短”
- 它不是“魔法”是“神器”:核心价值是处理定义明确、模式化、有上下文的任务,而不是替代你的设计、架构以及核心业务逻辑。
- 核心原则:Review, Review, Review!生成的代码/修改必须仔细审查!它能帮你写出功能正确、语法规范的代码,但业务逻辑的正确性和最优性最终在你。
- 清晰指令是关键:描述需求时尽可能清晰、具体。就像给一个聪明的实习生下任务一样。
四、结语:拥抱进化,成为更强大的开发者
拥抱AI的本质,是开发者的一场战略性进化。它绝不意味着能力的退化,而是帮助开发者将精力聚焦于更高级的任务(设计、架构、复杂业务、创新)。就像工匠有了电动工具,大师依然是大师,只是效率更高而已。
关于作者,张晨朝,侠客汇Java开发工程师。