AI 写代码总翻车? 我踩过的坑, 也许能帮你少走些弯路

AI写代码听起来很美,但真用起来却常常“翻车”。从语法错误到逻辑混乱,从工具误导到思维惯性,坑一个接一个。本文作者结合亲身经历,复盘了多个典型“翻车现场”,并总结出一套避坑思路,帮你在AI编程路上少走弯路、走得更稳。

在用AI辅助开发的这段时间里,我越来越觉得:AI并不是你随便一说,它就能接得住。用不好,不是因为模型不够强,而是你自己没说清楚。下面是我在项目中踩过的一些坑,总结下来供参考。

1.需求和目标,不能含糊

你可能会说:“我要一个列表页。”但你说的是表格、卡片视图,还是分页列表?有没有筛选?支持移动端吗?这些AI不知道,也不会替你猜。

真正有效的方式,是像写给同事那样说清楚:

“我需要一个移动端优先的商品列表页,要求分页加载,最多展示10条,点击后进入详情页,页面使用React+Vite,状态管理用ReduxToolkit。”

说得越清楚,AI给的代码就越接近你想要的。否则它给你写完你还得大改,浪费时间不说,还容易出bug。

2.复杂度自己先有数,别一上来就全丢给AI

比如有一次我在cursor里写prompt,想让它帮我生成一个搜索接口的实现。我一句话说了大概4件事:模糊匹配、分页、前端防抖和后端限流。结果它给了我一个看起来完整,但问题很多的实现。

后来我改成分步骤让它写:

第一步:实现一个基本的关键词匹配接口,支持模糊搜索。

第二步:前端加上防抖输入框,避免频繁请求。

第三步:再让它加分页逻辑,并说明每页大小和返回结构。

第四步:最后告诉它,后端需要加限流策略,防止接口被刷爆。

这样每步确认一个点,AI的反馈就靠谱得多。很多时候你觉得它“听不懂”,不是因为它能力不行,而是你一次性说了太多事,它只能抓住一部分。换成人也一样,信息太多反而会失焦。

3.代码不能全信,学会自己检查

AI生成的代码,经常看起来“能跑”,但很多关键细节是缺失的。

比如生成一个登录接口,逻辑写得挺完整,但却忘了处理接口失败时的token清理。结果用户登录失败后,前端还以为自己登录过,接口一路401。又比如请求数据时确实写了loading状态,但没有在出错或取消时正确关闭,导致页面一直转圈卡住。

这类“功能有,但边界没管”的代码,在实际开发里最容易出问题。它们表面看起来没bug,实际上体验一塌糊涂。

检查点包括:loading有没有兜住所有异步路径、接口是否兜底失败状态、逻辑是否具备初始值、是否有fallback。只要你自己不看,这些问题就不会自动被解决。

AI可以帮你提速,但提效的前提,是你有能力去识别和修正它的疏漏。如果完全不查不看,最后埋雷的还是你自己。

4.项目上下文一定要说清楚

这点特别重要。AI不知道你项目的技术选型,不知道你是用函数式组件还是class,也不知道你preferfetch还是axios。

比如如果我们想用SWR做数据请求,那每次都要提醒它:

“我们使用swr来做请求缓存,请用useSWR而不是useEffect去请求数据。”

如果你不说,它会给你生成一堆你可能根本不会用的写法,后面还得你自己去改。

5.说不清楚问题,AI也解决不了

有个开发者只跟AI说:“这个布局有点卡”,AI直接把整个组件改成virtuallist,虽然逻辑没错,但实际瓶颈并不是列表渲染多,而是图片都同步加载,导致滚动时掉帧。

后来他把描述改为:

“当前列表滚动时掉帧严重,初步定位是每个item内图片同步加载。建议用loading=”lazy”+IntersectionObserver控制加载时机。”

这次AI给出的方案才靠谱:用原生loading=”lazy”属性或结合IntersectionObserver延迟加载图片,页面性能立刻提升。

所以,不要说模糊词,像“卡”、“慢”、“不好看”,你得具体说是哪块慢、什么条件下卡,AI才能帮得上忙。

结尾:需求说不清,AI自然帮不了你

用AI写代码,归根结底是个“表达-反馈-修正”的过程。你说得清楚,它才能给得准确。

别期待它替你拍板选技术、补边界逻辑,也别幻想它能看穿你的上下文和项目背景。你要做的,是逼自己把需求表达清楚,说出你真正想要的东西。

一旦你能把复杂的系统需求讲清楚、把问题拆得有逻辑、能指出bug出现的上下文,AI才能真正成为你的帮手,而不是一个反复返工的负担。

后记:AI编程没那么省事,但值得一练

说实话,刚开始我用AI写代码的时候,觉得比我自己写还累。

它像个“不会自动对齐语境”的智能搭子,常常给我一堆看似对的代码,实则不合用,问题根本不在AI,而在于我没把话讲明白。

慢慢地我意识到,AI编程根本不是“偷懒”利器,而是反向逼你去思考表达、思考结构、思考逻辑。你说得越明白,思路越清楚,它就越能节省你的精力。

所以,AI编程没有变简单,只是把开发的难点,从动手转移到了动脑——从写代码,转向写清楚自己的想法。