项目AI审计质量保证 — 多专家协同的全量代码审查体系

52 阅读5分钟

项目AI审计质量保证 — 多专家协同的全量代码审查体系

✍️

作者:见山大叔 · 阅读时间:约 6 分钟 · 适用场景:中大型 AI / Node.js 项目上线前审查

前言

项目要上线了,你打算怎么审?跑一遍 eslint,肉眼扫两圈代码,差不多得了?

说实话,单一维度审查就是在赌运气。安全没人碰、性能没人压、三份配置文件各写各的——这些雷迟早要炸。

这篇文章分享我在实际项目中沉淀的一套审计流程:分阶段推进、多角色并行、8 个维度全覆盖。每次审完交出来的东西是评分卡和行动清单,不是一堆模糊的"建议优化"。


审计角色一览

先说人——或者说"AI 人"。整个体系靠 5 个审计角色撑起来,分工明确:

审计组管什么
self-auditor配置一致性、文件完整性、版本同步、健康检查
code-reviewer语法、代码质量、查重、清理旧文件、效率提升
red-team-attacker安全攻击面、绕过测试、凭证泄露、注入风险
red-team-logic逻辑漏洞、竞态条件、边界情况、数学正确性
production-reviewer架构一致性、性能管线、全维度生产级评审

Phase 0:先把代码读完再说

🔬

对项目 100% 源代码做全量扫描,建立认知基线。不读完不动手。

  • 逐文件过一遍 — 搞清每个模块干嘛的、进出什么数据、依赖谁
  • 画模块依赖图 — 调用链 + 数据流,把 热路径 和 瓶颈 标出来
  • 数字核对 — 版本号、技能数、Agent 数、Hook 数、MCP 组件数,跟配置文件逐项对

这一步看着笨,但跳过它后面一定漏东西。


Phase 1:8 个专家组并行审查

下面 8 个组同时开干,各管各的维度,每组独立出发现清单。

1. 语法与代码质量

审查维度:语法正确性、类型安全、代码风格

关注点:ESLint / TS 报错、未使用变量、any 滥用、命名不统一

2. 逻辑与功能

审查维度:业务逻辑正确性、边界条件、数学公式

关注点:条件分支遗漏、off-by-one、权重计算精度、状态机完整性

3. 查重与清理

审查维度:重复代码、死代码、废弃文件

关注点:相似度 >70% 的代码块、没人调用的文件和函数、孤儿配置项

4. 性能与效率

审查维度:运行时性能、内存占用、I/O 瓶颈

关注点:Hook 链延迟预算、O(N²) 热路径、冗余文件读取、冷启动耗时

5. 并发与堵塞

审查维度:竞态条件、死锁风险、异步错误处理

关注点:Promise 没 catch、多个写操作打同一个文件、超时没兜底、事件循环阻塞

6. 红队攻防

🛡️

审查维度:安全攻击面、注入风险、凭证泄露

关注点:路径穿越、命令注入绕过、硬编码密钥、权限提升路径、规则绕过 PoC

这组最容易出大事,单独标红。

7. 压力与韧性

审查维度:极端输入、大规模数据、故障恢复

关注点:200+ 技能时路由延迟、超长 token 输入、配置损坏后的降级表现

8. 架构一致性

审查维度:配置三源一致、版本同步、文档准确

关注点:CLAUDE.mdsettings.jsonskills-index.json 三者对不上、文档里的数字过期了


Severity 怎么标

每条发现必须打标,不能一股脑往上堆:

  • 🔴 CRITICAL — 生产安全或核心功能受影响,马上修
  • 🟡 WARNING — 有隐患或质量在下滑,一周内搞定
  • 🔵 INFO — 优化建议、风格问题,有空再改

Phase 2:交付什么

审完不是写一篇散文,而是交 4 样东西:

交付件内容解决什么问题
评分卡8 个维度各 0–100 分 + 加权总分项目健康度一目了然
发现清单按 CRITICAL → WARNING → INFO 排序,每条带位置、描述、修复建议开发拿到就能动手
行动计划P0(立即)/ P1(一周)/ P2(两周)/ P3(一月),附预期收益优先级清晰,资源不浪费
对比追踪跟上次审计的 △ 分数变化、新增 / 已修 / 未修问题看得到进步,也看得到欠的债

为什么这么设计

说几个关键决策:

  • 先读完再审 — Phase 0 看着慢,但跳过它就是在盲审。扫一半开始出结论,漏的比找到的多。
  • 角色拆开 — 一个人(或一个 prompt)想同时看安全、性能、逻辑,注意力一定分散。拆成独立角色,各管各的,反而全。
  • 强制分级 — 不标 Severity 的审查报告等于没审。"建议优化"四个字解决不了任何问题。
  • 交付件固定 — 每次审查出来的格式一样,才能跨版本对比。格式飘了,追踪就断了。
  • 模糊词拆解 — 原来写"扫盲""查堵塞",谁知道具体查什么?现在拆成 Promise 未 catch、路径穿越 PoC 这种粒度,执行起来不会走偏。
  • 留扩展口 — 表格结构加一行就是加一个维度,不用重写整段提示词。

💬

关于作者:见山大叔,全栈工程师,搞 AI Agent 架构和自动化工程。Bookworm 智能助手体系作者。有问题欢迎交流。