用AI开发产品的错误做法:一上来让它直接写代码
2025年12月9日
用AI开发产品,不是一上来就让AI写代码。用Claude、GPT-4和Cursor开发了6个生产级应用后,以下经验供参考。
1
写代码前先规划。
AI的表现取决于项目定义的清晰度。你需要准备几份关键文档:需求文档(明确列出每项功能)、用户故事(描述真实用户的操作流程)、技术栈(选定技术方案并固定版本)、编码规范(文件夹结构、命名规则、代码风格)。
即便只是简单统一的目录结构(如src/、components/、api/),也能大幅减少AI的随意性。
把功能拆解成小任务,给每个任务写伪代码,AI就有了明确的边界,不会凭空编造复杂的东西。
2
选择框架并锁定依赖版本。
不要让AI从零开始搭建项目结构,而是用Next.js或SvelteKit这样现成的框架。这些框架已经规定好了文件夹怎么组织、代码怎么写,模型就不会乱来。
关于依赖版本,这看似小事但特别关键。你必须在package.json中明确指定每个包的确切版本号,比如写react: 18.2.0而不是react: ^18.0.0。
版本不一致会很麻烦,代码在你电脑上能跑,到了服务器或同事的电脑就可能崩溃。用AI写代码时这个问题更容易发生,因为AI常常会随意加新的依赖,结果和你现有的包产生冲突。
一旦陷进去,排查问题会花你很多时间。所以最好的办法就是从一开始就用package-lock.json或yarn.lock把版本锁死。
3
让AI先解释再写代码。
要求AI先复述任务、说明实现方案再写代码。纠正一份解释远比修复200行错误代码容易。
要求修改时,让AI用diff格式展示变更,这样能保持代码的稳定性,避免无意中改坏其他地方。
4
把任务拆细和独立。
AI在笼统的需求上容易出错,但遇到具体指令就能做好。与其说"实现认证功能",不如这样拆分:定义用户模型、创建注册接口、添加密码哈希、实现登录逻辑。任务越细,幻觉越少,调试越容易,架构也越清晰。
除了任务外,需要保持架构的模块,复用组件。
如果AI改一个小地方都得读整个代码库,说明代码耦合度太高。设计好模块,让每个部分都能独立理解和修改。比如Next.js、css框架Tailwind CSS、ui组件shadcn/ui、认证Better Auth是目前常用的。
其次,注意命名统一,能帮助AI遵循你的模式,而不是自创规则。
5
策略性地用多个模型。
不同的AI大模型各有所长。规划用一个、代码生成用一个、逻辑检查用另一个。遇到可疑的答案时,换个模型验证一下,通常能抓出不少问题。
最强的可以用Sonnet 4.5,GPT 5.1 codex,就是成本高点。
6
动态更新文档。
保持architecture.md和conventions.md这类文件动态更新。
长对话结束后,开启新对话线程,重新导入核心文档,让模型始终和项目的实际状态同步。
设个规则:"只改我明确指定的文件",这样能防止模型乱改无关代码。
7
像个真正的开发者那样审核和测试。
AI能写代码,但你仍然得监督。检查导入是否一致、核对嵌套逻辑、验证改动有没有影响其他功能、运行相关测试而不只是新功能的测试。
AI有时会悄悄改东西,所以测试邻近代码很重要。
8
每一步都用Git提交。
小步提交、频繁保存。出问题时,能清楚地告诉你发生了什么。
要求模型确保它的修复是幂等的,同样的补丁执行两次不应该引入新问题。