AI 代码审查
wescode 内置 AI 驱动的代码审查能力,结合 CKG(代码知识图谱)和 CSE(约束满足引擎)进行深度代码分析,自动检测问题、生成审查报告、提供修复建议,并支持团队审查流程集成。
自动审查
触发方式
wescode 提供多种触发 AI 代码审查的方式:
Chat 面板:
> 审查一下我刚刚修改的代码
> 审查 internal/auth/ 目录下的所有文件
> 审查这个 PR 的所有变更
Inline Command(Ctrl+K):
选中代码 → Ctrl+K → "审查这段代码"
自动触发(可配置):
- 文件保存时自动审查变更部分
- Git commit 前自动审查 staged 文件
- PR 提交前全量审查
审查维度
AI 从以下维度分析代码:
| 维度 | 说明 | 示例 |
|---|---|---|
| 正确性 | 逻辑错误、边界条件、空指针 | 未检查 err != nil |
| 安全性 | 注入、越权、敏感数据泄露 | SQL 拼接、硬编码密钥 |
| 性能 | 不必要的分配、N+1 查询、死锁风险 | 循环内 DB 查询 |
| 可维护性 | 代码异味、复杂度、命名规范 | 函数超过 100 行 |
| 一致性 | 项目约定、风格一致性 | 与现有错误处理模式不一致 |
CKG 增强审查
wescode 利用 CKG 进行跨文件的深度审查:
> 审查这个新增的 API handler
AI 分析(借助 CKG):
✅ handler 签名符合项目约定
⚠️ 调用了 userRepo.FindByID(),但未检查用户是否被禁用
→ CKG 显示其他 handler 都有 checkUserActive() 调用
❌ 缺少权限中间件
→ CKG 调用图显示同级 handler 都经过 AuthMiddleware
CSE 约束检查
约束满足引擎检查代码是否违反项目隐式规则:
CSE 检测到:
- 约束违反:所有数据库操作必须在事务中执行
位置:internal/order/service.go:45
当前:直接调用 repo.Update()
应该:包裹在 tx.Transaction() 中
- 约束违反:HTTP handler 不应直接访问数据库
位置:internal/api/handler.go:23
当前:直接调用 db.Query()
应该:通过 service 层调用
审查报告
报告结构
每次审查生成结构化报告,包含以下部分:
═══════════════════════════════════════
AI 代码审查报告
时间:2026-09-14 21:30
范围:internal/auth/ (5 文件)
═══════════════════════════════════════
📊 概览
──────
审查文件:5
代码行数:342
发现问题:7
🔴 严重:1
🟡 警告:3
🔵 建议:3
📋 问题列表
──────
[详细问题清单,见下文]
📈 质量评分
──────
正确性:85/100
安全性:70/100 ← 发现硬编码密钥
性能:90/100
可维护性:80/100
总分:81/100
💡 改进建议摘要
──────
1. 将硬编码的 JWT secret 移至环境变量
2. 为 LoginHandler 添加 rate limiting
3. 统一错误响应格式
报告输出格式
审查报告支持多种输出格式:
- Chat 面板:交互式展示,可逐条讨论
- Markdown 文件:导出为
.md文件存档 - JSON 格式:用于 CI/CD 集成
- 内联标注:直接在编辑器中以 decoration 形式显示
历史报告
审查报告会保存在 workspace Cell 中,可以追溯:
> 查看上次审查报告
> 对比这次和上次审查的改善情况
问题分类
严重级别
AI 将发现的问题按严重程度分为四级:
| 级别 | 图标 | 说明 | 处理要求 |
|---|---|---|---|
| 致命 | 🔴 | 安全漏洞、数据丢失风险、崩溃 | 必须修复后才能合并 |
| 警告 | 🟡 | 潜在 Bug、性能问题、不良实践 | 强烈建议修复 |
| 建议 | 🔵 | 代码优化、可读性改善 | 可选修复 |
| 信息 | ⚪ | 代码风格、注释改善 | 参考即可 |
问题类别
每个问题还会标注所属类别:
正确性问题:
🔴 [正确性] internal/order/service.go:67
未检查 findOrder 的 error 返回值
→ 当订单不存在时会 nil pointer panic
安全问题:
🔴 [安全] internal/config/config.go:12
JWT secret 硬编码在源码中
→ 应使用环境变量或密钥管理服务
性能问题:
🟡 [性能] internal/user/repo.go:34
循环内执行数据库查询(N+1 问题)
→ 建议使用 batch 查询替代
并发问题:
🟡 [并发] internal/cache/manager.go:89
map 读写未加锁保护
→ 多 goroutine 访问时可能 panic
可维护性问题:
🔵 [可维护性] internal/handler/order.go:15-120
函数 HandleCreateOrder 长度为 105 行
→ 建议拆分为 validateOrder + createOrder + notifyOrder
自定义分类规则
通过 config.yaml 自定义问题分类优先级:
review:
severity_overrides:
hardcoded_secret: critical # 硬编码密钥始终为致命
missing_error_check: warning # 缺少错误检查为警告
long_function: info # 长函数降为信息级别
ignore_patterns:
- "*_test.go" # 测试文件不审查风格问题
- "generated/**" # 生成代码不审查
修复建议
自动修复
对于明确的问题,AI 可以直接生成修复代码:
> 修复审查中发现的所有严重问题
AI 执行修复:
修复 1/1:internal/config/config.go:12
- var jwtSecret = "my-secret-key"
+ var jwtSecret = os.Getenv("JWT_SECRET")
已修复,请确认。
修复建议(需人工判断)
对于需要设计决策的问题,AI 提供多个修复方案:
🟡 [性能] N+1 查询问题
方案 A:批量查询(推荐)
将循环内的单条查询改为 IN 查询
优点:改动最小,性能提升明显
缺点:大量 ID 时需要分批
方案 B:预加载
在上层一次性加载所有关联数据
优点:性能最优
缺点:改动较大,需修改 service 层接口
方案 C:缓存
对频繁查询的数据添加缓存
优点:长期性能最佳
缺点:引入缓存一致性问题
修复验证
修复后 AI 自动验证:
已应用修复,验证结果:
✅ 编译通过
✅ 相关测试通过(15/15)
✅ 不再触发原审查问题
⚠️ 新增代码未覆盖测试,建议补充
团队审查流程
PR 审查集成
wescode 可以融入团队的 PR 审查流程:
流程示意:
开发者提交 PR
↓
wescode 自动审查(CI 触发)
↓
生成审查报告 → 附加到 PR 评论
↓
人工 Reviewer 基于 AI 报告聚焦审查
↓
开发者根据反馈修复
↓
wescode 增量审查(仅审查修改部分)
↓
合并
CI/CD 集成审查
在 CI 中运行 wescode 审查,作为质量门禁:
# CI 脚本
wescode review --format json --output review-report.json
# 根据审查结果决定是否阻止合并
if wescode review --check --severity critical; then
echo "审查通过"
else
echo "存在严重问题,阻止合并"
exit 1
fi
审查评论协作
团队成员可以在 AI 审查结果上进行讨论:
AI 审查发现:
🟡 建议使用 sync.Pool 优化对象分配
Reviewer 张三 回复:
同意,这个热路径每秒调用 10000 次
Reviewer 李四 回复:
但 sync.Pool 在 GC 后会清空,需要评估
AI 补充分析:
根据 CKG,该函数被 3 个热路径调用
建议使用 sync.Pool + 预分配策略
审查标准定制
团队可以自定义审查标准:
# .wescode/review-rules.yaml
rules:
# 团队强制规则
mandatory:
- all_errors_must_be_handled
- no_hardcoded_credentials
- public_functions_must_have_comments
- http_handlers_must_have_timeout
# 项目特定规则
project:
- db_operations_in_transaction
- api_responses_use_standard_format
- logging_must_include_request_id
# 审查豁免
exemptions:
- path: "internal/generated/**"
reason: "自动生成代码"
- path: "scripts/**"
reason: "运维脚本审查标准不同"
审查报告分发
审查报告可以推送到多个渠道:
- PR 评论:自动附加到 GitHub/GitLab PR
- 企业微信/飞书:通知相关开发者
- 仪表板:汇总到团队代码质量仪表板
- 邮件:定期发送审查摘要
与 QualityGate 协作
审查结果联动验证
AI 审查发现问题后,可以联动 QualityGate 进行自动验证:
AI 审查 → 发现 3 个问题
↓
AI 自动修复 → 生成修复代码
↓
QualityGate 验证 → go build && go test
↓
验证通过 → 应用修复
学习与记忆
审查引擎会从团队的审查历史中学习:
- 记录被采纳的审查建议,提高未来建议的精准度
- 记录被忽略的建议类型,降低此类建议的优先级
- 学习团队特有的代码模式和约定
配置选项
review:
auto_review_on_save: false # 保存时自动审查
auto_review_on_commit: true # commit 前自动审查
severity_threshold: warning # 最低报告级别
max_issues_per_file: 10 # 每文件最多报告数
include_suggestions: true # 是否包含优化建议
ckg_enhanced: true # 启用 CKG 增强审查
cse_check: true # 启用 CSE 约束检查
注意事项
- AI 审查是辅助工具,不能替代人工代码审查
- 首次使用时 CKG 索引可能尚未完成,审查深度会随索引完善而提升
- 审查结果基于 AI 分析,可能存在误报或漏报
- 团队审查规则需要根据项目实际情况定期调整
- 自动修复建议在应用前请仔细检查,特别是涉及业务逻辑的修改
- 审查数据和学习记忆物理隔离在当前 workspace 的 Cell 中