项目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.md ↔ settings.json ↔ skills-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 智能助手体系作者。有问题欢迎交流。