代码审查哨兵——在代码合并前执行五维度质量审查,以"高级工程师是否会批准"为标准把关每次提交。适用于PR审查、变更评估、质量门禁、代码健康度审计、新人指导等场景。正确性/可维护性/安全性/性能/可测试性全面覆盖,支持严重度标签与拆分策略,让代码腐化止于合并前。触发关键词:代码审查、代码review、合并前审查、代码质量、PR审查、五维审查、代码健康度、变更尺寸、代码拆分、质量门禁
代码审查哨兵是一项面向实际任务的技能,主要用于在代码合并前执行结构化质量审查;以"高级工程师是否会批准这次合并"为标准,从五个维度全面把关;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
在代码合并前执行结构化质量审查。以"高级工程师是否会批准这次合并"为标准,从五个维度全面把关。
git diff 获取变更 + 统计规模 + 尺寸分级(理想 ~100 行/可接受 100-300/需拆分 >300)+ 变更分类| 场景 | 输入 | 输出 |
|---|---|---|
| PR 审查 | PR diff + 上下文 | 五维度审查报告 + 问题清单 + Approve/Request Changes |
| 变更评估 | 代码变更量 + 文件清单 | 尺寸评估 + 拆分建议 + 审查优先级 |
| 质量门禁 | CI/CD 触发的 diff | 自动化质量检查 + Blocking 问题拦截 |
| 代码健康度 | 代码库全量/抽样 | 健康度评分 + 趋势分析 + 改进建议 |
| 新人指导 | 新成员提交的 PR | 建设性反馈 + 学习建议 + 亮点表扬 |
不适用于:
git diff 或读取 PR diff输入:
PR: 添加用户注册功能 变更:+180 行 / -5 行 / 3 文件 文件: - src/auth/register.ts (新增注册逻辑) - src/api/routes.ts (添加 POST /register 路由) - src/db/users.ts (添加 createUser 方法)
输出:
# 代码审查报告:用户注册功能 ## 总体评估:Request Changes - 变更尺寸:180 行(可接受) - 五维度评分:正确性 7/10 | 可维护性 8/10 | 安全性 4/10 | 性能 7/10 | 可测试性 3/10 ## 问题清单(按严重度排序) ### Blocking(必须修复) **[B1] 密码明文存储** - 文件:`src/db/users.ts:15` - 问题:`createUser` 直接将密码存入数据库,未哈希 - 风险:数据库泄露后所有密码暴露 - 建议:使用 argon2 哈希后再存储 ```typescript import argon2 from 'argon2'; const hashedPassword = await argon2.hash(password); // 存储 hashedPassword 而非 password
[B2] 缺少输入校验
src/auth/register.ts:8const schema = z.object({
email: z.string().email(),
password: z.string().min(8).regex(/[A-Z]/).regex(/[0-9]/),
});
[S1] 缺少速率限制
src/api/routes.ts:45[S2] 缺少单元测试
[P1] 错误处理清晰
src/auth/register.ts:25### 示例 2:大 PR 拆分建议 **输入**:
PR: 重构用户模块 + 添加 OAuth 登录 + 修改数据库 Schema 变更:+850 行 / -320 行 / 18 文件
**输出**: ```markdown # 拆分建议 ## 评估 - 变更尺寸:850 行(需拆分) - 涉及多个独立功能,建议拆分为 4 个 PR ## 拆分方案 ### PR 1: 数据库 Schema 变更(独立先合并) - 文件:`src/db/schema.ts`, `migrations/001_users_oauth.sql` - 行数:~80 行 - 说明:纯 Schema 变更,向后兼容(新增字段),可独立合并 ### PR 2: 重构用户模块(依赖 PR 1) - 文件:`src/db/users.ts`, `src/auth/user-service.ts` - 行数:~250 行 - 说明:提取 UserService,为 OAuth 做准备,无功能变更 ### PR 3: OAuth 登录功能(依赖 PR 2) - 文件:`src/auth/oauth.ts`, `src/api/routes.ts` - 行数:~300 行 - 说明:核心功能 PR,添加 Google/GitHub OAuth ### PR 4: 测试与文档(依赖 PR 3) - 文件:`tests/auth.test.ts`, `docs/oauth.md` - 行数:~220 行 - 说明:补充测试用例与 OAuth 接入文档 ## 合并顺序 PR 1 → PR 2 → PR 3 → PR 4 每个 PR 独立可编译可测试,降低审查难度与回滚风险。
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 无法获取 diff | git 命令失败或 PR 不存在 | 检查 git 仓库状态 + 确认 PR 编号 + 提供文件路径手动审查 |
| 变更过大 | > 1000 行单 PR | 建议拆分 + 提供拆分方案 + 优先审查 Blocking 问题 |
| 跨语言审查 | 多语言混合 PR | 按语言分组审查 + 标注语言特定问题 |
| 缺少上下文 | 无需求文档或关联 issue | 标注"假设" + 请求补充上下文 + 基于代码本身审查 |
| 误报问题 | LLM 理解偏差 | 标注"需人工确认" + 提供依据 + 允许作者解释 |
| 审查超时 | 大型 PR 审查耗时 | 分段审查 + 优先 Blocking + 异步输出报告 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Git | 工具 | 必需 | git 命令行(获取变更差异) |
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供代码分析 |
| 静态分析工具 | 工具 | 可选 | ESLint/SonarQube/Snyk(补充自动化检查) |
A: ESLint/SonarQube 是自动化静态分析工具,基于规则匹配发现已知模式问题(如未使用变量、复杂度过高)。代码审查哨兵是LLM 驱动的语义审查,能理解业务逻辑、跨文件上下文、设计意图。两者互补:静态分析快速拦截常见问题,哨兵深入审查语义与架构。
A: 标准可配置。Blocking 仅针对"必须修复才能合并"的问题(安全漏洞/逻辑错误/数据丢失)。Should Fix 是建议,不阻塞合并。Nit 是小问题,可选修复。团队可根据成熟度调整阈值。
A: 所有问题标注依据(代码行/风险说明/建议方案)。作者可对问题回复"需讨论"或"误报",审查者确认后调整。LLM 不确定时标注"需人工确认",避免过度自信。
A: 1)先看变更概览与尺寸评估;2)优先审查 Blocking 问题;3)按文件/模块分段审查;4)提供拆分建议(如示例 2);5)异步输出完整报告,避免阻塞。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章