AI生产环境常见错误:10个及防范方法
AI生产环境常见错误有哪些?这10个错误,Claude做错了什么、正确的模式,以及能阻止每个错误再犯的一句确切指令,附完整对照表,可直接当作审查清单。
AI生产环境常见错误是可预测、有记录的:它写出的代码在演示里能跑,上线就出问题。我用Claude搭建自己的平台时,把它每一个需要纠正的错误都记了下来:28条反复出现的教训,每一条都有能防止它再犯的确切指令。下面是一旦漏过、代价最大的十条。
这份清单的目的不是吓退你、让你远离AI开发。恰恰相反:正因为这些错误是可预测的,它们才是可预防的——只需在提示词里加一句话,或在项目说明里加一条常驻规则。你不需要自己写出正确的代码,你需要的是认出错误的模式,并知道该怎么说。
为什么AI每次都犯同样的错误
AI为“顺利路径”做优化——数据都在、用户已登录、什么都不出错、而且只有一个客户在用这个应用的那个版本。那个版本演示起来漂亮极了。生产环境则是其余的一切:会话过期、两个用户同时点击、数据缺失,而且客户A绝不能看到客户B的记录。
AI跳过这些并不是因为粗心。而是因为你没有要求——而且和资深开发者不同,它不会凭经验补全没说出口的需求。这四种破坏行为是一份相关但不同的清单,我单独写过;今天的十条,讲的是生产级代码需要、而AI默认遗漏的东西。
AI生产环境常见错误:10个错误、正确模式与指令
| Claude做了什么 | 正确模式 | 如何下指令 |
|---|---|---|
| 为已有的功能创建了重复的服务 | 每个领域只有一个事实来源——扩展现有服务 | “创建新文件之前,先检查是否已有功能相近的服务,并扩展它” |
| 让UI组件直接访问数据库 | 三层结构:组件用hooks,hooks用services,只有services接触数据库 | “绝不要在组件里导入数据库客户端——遵循三层架构” |
| 对状态和类别使用僵化的ENUM类型 | 无需改代码就能扩展的查找表 | “不要用enum——创建带编码、显示名称、排序和启用标志的查找表” |
| 创建了没有索引的外键 | 每个外键都建索引;常见的查询组合建复合索引 | “每个外键列都必须有索引” |
| 建表时没有组织列 | 从第一天起就做多租户:每张业务表都按拥有数据的客户来划分范围 | “每张业务表都要有organization_id,非空,放在第二列” |
| 完全跳过了行级安全 | 每张表都启用RLS,并为读取、插入、更新、删除配置策略 | “创建任何表之后,启用RLS并添加全部四条按组织划分的策略” |
| 组件里只处理了顺利路径 | 处处都有四种状态:加载中、错误、空、成功 | “每个获取数据的组件都必须处理加载中、错误、空和成功四种状态” |
| 让错误悄无声息地失败 | 捕获、带上下文记录日志,并向用户提供重试 | “每个异步函数都要有错误处理:记录日志、抛出友好的错误、显示重试” |
| 收到请求就永久删除数据 | 软删除——标记记录为已删除,保留数据,允许撤销 | “绝不要硬删除业务数据——设置deleted_at和deleted_by,并在查询中把它们过滤掉” |
| 多步写入没有使用事务 | 相关的写入要么一起成功,要么一起失败,绝不做到一半 | “这些写入必须是原子的——要么全部成功,要么全部回滚” |
完整的28条教训——包括类型安全、日志、无障碍、硬编码ID和测试覆盖——都收录在AI Product Builder课程里,每一条都有前后对比的代码和可直接复制的提示词。
本书The Solopreneur RevolutionLuis Gonçalves 讲述如何在不辞职的情况下用 AI 打造独立创业者事业。获取本书 →可能毁掉你生意的两个错误
十个错误里,八个只是浪费你的时间。有两个可能让你丢掉整家公司。
缺少多租户和缺少行级安全,是数据泄露的制造机。如果每张表都没有组织列,你所有客户的数据就混在同一个没有分隔的大堆里,只有应用代码里的好运气,才让客户A看不到客户B的记录。行级安全是数据库层面的那堵墙,即使你的代码有bug它也撑得住——而你的代码一定会有bug。除非你明说,AI两样都会跳过,因为“帮我做个项目跟踪器”这句话里,没有任何一处说别人的公司也会住进这个数据库。
事后补救非常痛苦:之后再加组织列,意味着迁移每一张表、回填每一行、更新每一条查询,并重新测试一切。要么在最初的提示词里加一句话,要么日后花一周做迁移手术。选那一句话。
把纠正变成常驻规则
逐个错误地纠正AI,是在逆潮而行。能产生复利的做法,是把每一次纠正写进你的项目说明文件,让之后每一次会话开始时规则就已加载——我在防止90%的AI错误的那个文件里讲过其中的机制。像下面这样简短的一段规则,就能改变后面的一切:
遵循三层架构。每张表都要有organization_id、审计列和RLS策略。不要用enum——用查找表。每个外键都建索引。只做软删除。每个组件都处理加载中、错误、空和成功状态。每个异步函数都要有错误处理。
十行字。写一次。对你以后运行的每一条提示词都生效。这就是纠正AI与指挥AI的区别——后者才是真正的工作,正如我在你就是架构师里论证的那样。
12 周企业职业生涯从来都不是计划申请加入 Solopreneur Accelerator。立即申请 →常见问题
如果AI会犯所有这些错误,用它来构建还安全吗?
安全——因为这些错误是一致的,而不是随机的。初级开发者每周犯的错都不一样;AI则是同样那十个,直到你写下能阻止每一个的规则为止。一个有记录、且已知一句话就能预防的失效模式,是可管理的工程风险,而不是雇一个团队的理由。
如果我读不懂代码,怎么发现这些错误?
用提问来审查,而不是逐行阅读。AI生成任何东西之后,直接问它:每张表都有组织列和RLS策略吗?删除是软删除吗?这个组件处理了加载中、错误和空状态吗?当你问得具体时,AI对自己的遗漏很诚实——上面的表格,实际上就是你的审查清单。
AI已经写好的代码里,这些问题要修吗?
按风险排优先级。在接真实客户之前,先修安全这一对——组织范围划分和行级安全——因为随着数据增长,事后补救只会越来越难。缺失的状态、日志和软删除,可以在你改动每个页面时逐个功能地修复。
常驻规则究竟放在哪里?
放在你的AI工具每次会话开始时都会读取的项目说明文件里——对Claude来说,就是项目里的CLAUDE.md文件。你做过的每一次纠正,都会被提升进这个文件,所以只需做一次。设置只需几分钟,CLAUDE.md指南里有详细介绍。
你到底被困得有多深?
完成职场窒息指数——这项免费测评告诉你是否已准备好成为独立创业者。