Skip to content

24 · 审查清单:AI 产出默认缺什么

一句话点题:AI 默认给你「乐观路径」——demo 能跑,但没超时、没幂等、没降级、没想分片、没防注入。审查不是挑刺,是拿一张固定清单,把这些它默认漏掉的东西逐条补问回来。这张清单,就是前面进阶篇六章压缩成的一页纸。


🤝 AI 协同设计篇第 2 章 · 本章只练一件事

23 章事前把约束写给 AI;本章是事后逐条审 AI 的产出。这正是 17 章 说的「vibe 出草稿,用判断收口」里「收口」那一步——而收口靠的不是灵感,是一张可复用的清单


一、为什么 AI 产出默认「缺一半」

17 章 讲过这个机制,这里说透:AI 不是不会写健壮代码,是默认不写。原因有三:

   ① 它优化「能跑通」          → 给你 happy path:demo 演示完美,异常全裸奔
   ② 训练数据里 demo 远多于    → 教程/示例代码本就很少写超时、幂等、降级
      生产级代码
   ③ 它不知道你的非功能需求    → 你没说「要扛大促」「钱不能错」,它当然不考虑
      和约束(除非你写了 23 章)

结果就是 17 章 那句:AI 加速了「产出」,却没加速「判断」。原型到生产的鸿沟,被「它看起来能跑」掩盖了。审查,就是把这条鸿沟显式地量出来、补上。

关键认知:审查 AI 产出,和 code review 人写的代码,重点不同。 人会忘记边界情况;AI 会系统性地、每次都忽略你没明说的非功能需求。所以对付 AI,最有效的不是「仔细看」,而是拿同一张清单,每次机械地过一遍——因为它每次漏的,基本是同一批东西。


二、审查清单(按进阶篇组织)

下面这张清单,逐条对应进阶篇某一章——你不需要记住它,记住「去哪查」就行(这正是 18 章读图 的「认字 vs 读懂」反过来用)。

① 数据一致性(11 章)

  • [ ] 幂等:这个写操作重复执行会怎样?重复请求 / 超时重发会不会重复扣款、重复下单?有幂等键吗?
  • [ ] 跨服务一致性:跨了多个服务 / 库的写,用 Saga / Outbox 了吗?中途失败怎么补偿?
  • [ ] 事务边界:哪些必须强一致(钱、库存),哪些可最终一致?有没有把该强一致的做成了最终一致?
  • [ ] 并发:两个请求同时改一条数据会怎样?有没有超卖 / 丢更新?

② 韧性(12 章)

  • [ ] 超时:每个外部调用(DB / 第三方 / 模型 API)都设超时了吗?(AI 最常漏的就是裸调用)
  • [ ] 重试:失败重试了吗?是指数退避还是会把下游打垮的无脑重试?重试的操作幂等吗(否则放大事故)?
  • [ ] 熔断 / 降级:依赖挂了,是整个拖死,还是能熔断 + 降级返回兜底?
  • [ ] 资源上限:有没有无界队列 / 无上限并发 / 无超时的循环(会 OOM 或失控)?

③ 规模(13 章)

  • [ ] 热点:有没有热 key / 热分区?某个明星用户 / 爆款商品会不会打爆单点?
  • [ ] N+1 与扇出:循环里查库?一次请求扇出成 N 次下游调用?
  • [ ] 分页 / 上限:列表接口有没有分页?会不会一把捞出几百万行?
  • [ ] 尾延迟:P99 而非 P50;有没有一条慢路径拖累整体?

④ 安全(16 章)

  • [ ] 输入校验:外部输入都校验了吗?SQL / 命令注入?
  • [ ] 鉴权与越权:每个接口都校验「这个用户有权做这件事」吗?能不能改个 ID 就看到别人的数据(越权)?
  • [ ] 多租户隔离:查询强制按租户过滤了吗?会不会跨租户读到数据?
  • [ ] 密钥:有没有把 API key / 密码硬编码进代码 / 日志?
  • [ ] 提示注入(AI 系统):检索结果 / 工具返回 / 用户上传当不可信输入了吗?

⑤ AI 特有(本篇新增)

  • [ ] 非确定性兜底:模型输出不对 / 不稳定时有兜底吗?碰副作用前有护栏 / 人审吗(19/22)?
  • [ ] 成本上限:每次调用 / 每个任务有 token、步数、预算上限吗(防失控烧钱)?
  • [ ] 检索 / 幻觉:RAG 检索质量盯了吗?答案强制基于资料 + 给引用了吗(18)?
  • [ ] 可评测:有 eval 防止换模型 / 改提示后悄悄退化吗(25 章的主题)?

三、怎么用这张清单(别变成打勾仪式)

清单很长,但不是每条都要查——那是另一种过度设计。用法和 06 章质量属性 一脉相承:先看这个系统在乎什么,再挑相关的查。

   先问:这段代码/这个方案,碰了哪些「会咬人」的东西?

     ├─ 碰钱 / 库存          ──▶ 重点查 ① 一致性(幂等、并发、超卖)
     ├─ 调用外部 / 高并发     ──▶ 重点查 ② 韧性(超时、重试、降级)
     ├─ 面向海量用户          ──▶ 重点查 ③ 规模(热点、扇出、分页)
     ├─ 处理用户数据 / 多租户  ──▶ 重点查 ④ 安全(越权、隔离、注入)
     └─ 用了大模型            ──▶ 必查 ⑤ AI 特有(兜底、成本、幻觉、eval)

审查是「提问模板」,不是「打勾仪式」。 对着 AI 产出的方案 / 代码,挑出相关的几条,逐条问「这里呢?」——AI 答不上来或答得心虚的地方,就是它替你埋的雷。这张清单的价值,是让你不会因为「方案看起来很完整」就忘了问那几个致命问题。


四、把清单喂回给 AI(但人做最终判断)

审查这件事,AI 也能帮你做一半——这正好闭环回 23 章:

  • 让 AI 拿这张 checklist 自审 / 互审:把清单写进 prompt 或 AGENTS.md,让 AI 在产出后「对照清单逐条检查自己漏了什么」。一个会犯乐观路径错的 AI,在被明确要求逐条核对时,往往能自己补上一大半。
  • 但人做最终判断,尤其是碰钱 / 安全的:AI 自审能抓住「忘了超时」这种机械疏漏,却**判断不了「这个最终一致性在这里到底能不能接受」**这种需要业务上下文和取舍的事。这正是 17 章01 章 反复说的——判断不可外包

架构智慧:AI 加速了「写」,没有加速「审」;而审查,正是把一个「看起来能跑的原型」变成「扛得住的生产系统」的那一步(呼应 Simon Willison 对 vibe coding 的告诫,见 17 章)。把审查清单沉淀下来、甚至喂回给 AI 自检,是 AI 时代性价比最高的工程习惯之一——因为 AI 每次漏的,几乎是同一批东西。


🎯 随堂检验

🤔AI 生成了一段「调用第三方物流 API 查询订单」的代码,demo 跑通了。按本章清单,最该先补问的是?
  • A变量命名是否符合团队风格规范
  • B有没有设超时、失败重试(指数退避)、以及第三方挂了时的降级兜底——这些 AI 默认不写
  • C注释写得够不够多
🤔关于「用审查清单查 AI 产出」,正确的用法是?
  • A每次都把清单全部几十条逐条打勾,一条不漏才算审完
  • B按系统在乎的质量属性挑相关的几条重点问(碰钱查一致性、高并发查韧性、用了模型必查 AI 特有);清单是提问模板不是打勾仪式
  • C清单太麻烦,凭经验扫一眼代码就行

本章小结

  • AI 产出默认缺一半:它优化「能跑通」、训练数据偏 demo、又不知道你的非功能需求——于是系统性地漏掉超时、幂等、降级、分片、注入防护。
  • 对付 AI 靠固定清单,不靠仔细看:因为它每次漏的基本是同一批东西。清单按进阶篇组织:一致性(11)/ 韧性(12)/ 规模(13)/ 安全(16)/ AI 特有。
  • 按质量属性挑着查(06):碰钱查一致性、高并发查韧性、用了模型必查 AI 特有——清单是提问模板,不是打勾仪式。
  • 可喂回 AI 自审,但人做最终判断:AI 能补机械疏漏,判断不了「这里的取舍能不能接受」——判断不可外包。
  • 审查 = 把原型变可信系统的那一步:AI 加速了写,没加速审。

承上启下:审查靠人逐条问,但**「答案质量稳不稳、换了模型有没有悄悄变差」这种事,人查不过来、也查不准**——尤其 AI 系统的非确定性(17 章)。下一章 25 · 评测驱动:把「够好」写进架构,把审查从「人工逐条」升级成「机器持续把关」:用 eval 当 CI 门禁,让「够好」可量化、可守门。


相关链接

💬 评论