AI 代码审查

wescode 内置 AI 驱动的代码审查能力,结合 CKG(代码知识图谱)和 CSE(约束满足引擎)进行深度代码分析,自动检测问题、生成审查报告、提供修复建议,并支持团队审查流程集成。

自动审查

触发方式

wescode 提供多种触发 AI 代码审查的方式:

Chat 面板:

> 审查一下我刚刚修改的代码
> 审查 internal/auth/ 目录下的所有文件
> 审查这个 PR 的所有变更

Inline Command(Ctrl+K):

选中代码 → Ctrl+K → "审查这段代码"

自动触发(可配置):

审查维度

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. 统一错误响应格式

报告输出格式

审查报告支持多种输出格式:

历史报告

审查报告会保存在 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: "运维脚本审查标准不同"

审查报告分发

审查报告可以推送到多个渠道:

与 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 约束检查

注意事项