AI 编程实战:用 Claude Code 自动化代码审查

一、为什么需要自动化代码审查?

传统代码审查的痛点:

  1. 耗时 - 每个 PR 需要人工逐行审查
  2. 不一致 - 不同审查者标准不同
  3. 容易遗漏 - 疲劳时容易忽略问题
  4. 知识依赖 - 新人不了解项目规范

AI 审查的优势:

  • 7x24 小时待命
  • 标准一致
  • 快速反馈
  • 可学习团队规范

二、Claude Code 简介

Claude Code 是 Anthropic 推出的命令行 AI 编程工具,特点:

  • 深度理解代码上下文
  • 支持多文件分析
  • 可执行 shell 命令
  • 支持自定义规则

2.1 安装 Claude Code

# 安装 Node.js
brew install node

# 安装 Claude Code
npm install -g @anthropic-ai/claude-code

# 配置 API Key
export ANTHROPIC_API_KEY="your-api-key"

# 或者写入 ~/.zshrc
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.zshrc
source ~/.zshrc

2.2 验证安装

claude --version
claude "Hello, test"

三、基础用法

3.1 单文件审查

# 审查单个文件
claude "请审查这个文件,检查代码质量、潜在 bug 和风格问题" src/user-service.ts

3.2 多文件审查

# 审查整个 PR 变更
claude "审查这些文件的变更,关注:
1. 逻辑错误
2. 性能问题
3. 安全隐患
4. 代码风格
5. 测试覆盖" --file src/auth.ts src/user.ts src/validator.ts

3.3 Git Diff 审查

# 审查当前分支的所有变更
git diff main | claude "审查这些代码变更,列出所有问题和建议"

四、搭建自动化审查流程

4.1 创建审查规则文件

在项目根目录创建 .claude/review-rules.md

# 代码审查规则

## 项目信息
- 语言:TypeScript
- 框架:Express + React
- 数据库:PostgreSQL

## 必须检查项

### 安全性
- [ ] SQL 注入风险(必须使用参数化查询)
- [ ] XSS 风险(用户输入必须转义)
- [ ] 敏感信息泄露(不能硬编码密钥)
- [ ] 认证授权(需要验证用户权限)

### 性能
- [ ] 数据库查询优化(避免 N+1 查询)
- [ ] 循环内避免同步 I/O
- [ ] 大数组操作使用合适的数据结构

### 代码质量
- [ ] 函数长度不超过 50 行
- [ ] 圈复杂度不超过 10
- [ ] 必须有错误处理
- [ ] 变量命名清晰

### 测试
- [ ] 新增功能必须有单元测试
- [ ] 边界条件有测试覆盖
- [ ] 错误场景有测试

## 代码风格

### TypeScript
- 使用 interface 定义对象类型
- 避免使用 any,使用 unknown 或具体类型
- 导出类型使用大驼峰
- 函数使用小驼峰

### 命名规范
- 变量:camelCase
- 类/接口:PascalCase
- 常量:UPPER_SNAKE_CASE
- 文件:kebab-case.ts

## 常见问题检查清单

1. 是否有未处理的 Promise?
2. 是否有内存泄漏风险?
3. 是否有竞态条件?
4. 日志是否包含敏感信息?
5. API 响应格式是否统一?

4.2 创建审查脚本

创建 scripts/ai-review.sh

#!/bin/bash

# AI 代码审查脚本

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo "🔍 开始 AI 代码审查..."

# 获取变更文件
CHANGED_FILES=$(git diff --name-only main)

if [ -z "$CHANGED_FILES" ]; then
    echo "没有检测到变更"
    exit 0
fi

echo "检测到以下变更:"
echo "$CHANGED_FILES"
echo ""

# 生成审查提示
PROMPT="请作为高级代码审查专家,审查以下代码变更。

审查重点:
1. 安全性问题(SQL 注入、XSS、认证授权等)
2. 性能问题(查询优化、内存使用等)
3. 代码质量(可读性、可维护性等)
4. 测试覆盖(单元测试、边界条件等)
5. 是否符合项目规范(参考 .claude/review-rules.md)

输出格式:
## 审查结果

### ✅ 做得好的地方
- 列出优点

### ⚠️ 需要改进
- 问题 1:描述 + 建议
- 问题 2:描述 + 建议

### ❌ 必须修复
- 严重问题 1:描述 + 修复建议
- 严重问题 2:描述 + 修复建议

### 📝 建议
- 优化建议 1
- 优化建议 2

### 总结
整体评价和下一步建议
"

# 调用 Claude Code 审查
echo "🤖 AI 正在审查代码..."

claude "$PROMPT" --file $CHANGED_FILES > review-result.md

# 显示结果
echo ""
echo "📋 审查结果:"
echo "============"
cat review-result.md

# 检查是否有必须修复的问题
if grep -q "### ❌ 必须修复" review-result.md; then
    echo ""
    echo -e "${RED}⚠️  发现必须修复的问题,请处理后再提交${NC}"
    exit 1
else
    echo ""
    echo -e "${GREEN}✅ 审查通过,没有发现严重问题${NC}"
    exit 0
fi

4.3 添加 Git Hook

创建 .git/hooks/pre-push

#!/bin/bash

# 在 push 前自动执行 AI 审查

echo "🔒 运行 AI 代码审查..."

# 运行审查脚本
./scripts/ai-review.sh

if [ $? -ne 0 ]; then
    echo ""
    echo "❌ AI 审查未通过,push 被阻止"
    echo "请修复问题后重新提交,或使用 --no-verify 跳过检查(不推荐)"
    exit 1
fi

echo "✅ AI 审查通过,允许 push"
# 添加执行权限
chmod +x .git/hooks/pre-push
chmod +x scripts/ai-review.sh

五、集成到 CI/CD

5.1 GitHub Actions 配置

创建 .github/workflows/ai-review.yml

name: AI Code Review

on:
  pull_request:
    branches: [main, develop]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      
      - name: Install Claude Code
        run: npm install -g @anthropic-ai/claude-code
      
      - name: Get changed files
        id: changed-files
        run: |
          FILES=$(git diff --name-only origin/main...HEAD)
          echo "files=$FILES" >> $GITHUB_OUTPUT
      
      - name: AI Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          cat > review-prompt.txt << 'EOF'
          请审查以下代码变更,检查:
          1. 安全性问题
          2. 性能问题
          3. 代码质量
          4. 测试覆盖
          5. 是否符合规范
          
          输出格式:
          ## 审查结果
          ### ✅ 优点
          ### ⚠️ 改进建议
          ### ❌ 必须修复
          EOF
          
          claude "$(cat review-prompt.txt)" --file ${{ steps.changed-files.outputs.files }} > review-result.md
      
      - name: Upload Review Result
        uses: actions/upload-artifact@v4
        with:
          name: ai-review-result
          path: review-result.md
      
      - name: Post Review Comment
        uses: actions/github-script@v7
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review-result.md', 'utf8');
            
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `## 🤖 AI 代码审查结果\n\n${review}`
            });

5.2 配置 API Key

在 GitHub 仓库设置中添加 Secret:

Settings → Secrets and variables → Actions → New repository secret

Name: ANTHROPIC_API_KEY
Value: sk-ant-...

六、高级技巧

6.1 自定义审查模板

创建 .claude/review-template.md

# PR #{{PR_NUMBER}} 审查报告

**审查时间:** {{TIMESTAMP}}
**审查分支:** {{BRANCH_NAME}}
**变更文件:** {{FILE_COUNT}} 个

## 变更概览
{{SUMMARY}}

## 详细审查

### 安全性
{{SECURITY_REVIEW}}

### 性能
{{PERFORMANCE_REVIEW}}

### 代码质量
{{CODE_QUALITY_REVIEW}}

### 测试
{{TEST_REVIEW}}

## 问题清单

| 严重性 | 文件 | 行号 | 问题描述 | 建议 |
|--------|------|------|----------|------|
{{ISSUE_TABLE}}

## 审查结论

- [ ] 通过,可以合并
- [ ] 需要小修改后合并
- [ ] 需要大修改后重新审查

**审查者:** AI Assistant

6.2 增量审查

只审查变更部分,提高效率:

# 创建增量审查脚本
cat > scripts/incremental-review.sh << 'EOF'
#!/bin/bash

# 只审查变更的行

git diff -U0 main | while read -r line; do
    if [[ $line == "+"* ]] && [[ $line != "+++"* ]]; then
        echo "检查新增行:$line"
        claude "这行代码是否有问题:$line"
    fi
done
EOF

6.3 历史问题追踪

# 创建问题追踪文件
cat > .claude/issue-tracker.md << 'EOF'
# AI 审查问题追踪

## 2026-03-17
- [x] src/auth.ts:45 - JWT 过期时间配置问题(已修复)
- [ ] src/user.ts:123 - SQL 查询未参数化(待修复)
- [ ] src/api.ts:89 - 缺少输入验证(待修复)

## 2026-03-16
- [x] src/validator.ts:34 - 正则表达式性能问题(已修复)
EOF

七、实际案例

7.1 案例:发现 SQL 注入漏洞

原始代码:

// ❌ 有问题的代码
async getUserById(id: string) {
  const query = `SELECT * FROM users WHERE id = '${id}'`;
  return await db.query(query);
}

AI 审查意见:

### ❌ 必须修复

**文件:** src/user-service.ts:45
**问题:** SQL 注入漏洞

代码直接使用字符串拼接构建 SQL 查询,攻击者可以传入恶意输入:

id = “’ OR ‘1’='1”


**修复建议:**
```typescript
// ✅ 修复后
async getUserById(id: string) {
  const query = 'SELECT * FROM users WHERE id = $1';
  return await db.query(query, [id]);
}

### 7.2 案例:性能优化建议

**原始代码:**
```typescript
// ❌ N+1 查询问题
async getUsersWithOrders() {
  const users = await db.query('SELECT * FROM users');
  
  for (const user of users) {
    user.orders = await db.query(
      'SELECT * FROM orders WHERE user_id = $1',
      [user.id]
    );
  }
  
  return users;
}

AI 审查意见:

### ⚠️ 需要改进

**文件:** src/order-service.ts:78
**问题:** N+1 查询性能问题

当前实现会对每个用户执行一次查询,100 个用户 = 101 次数据库查询。

**修复建议:**
```typescript
// ✅ 使用 JOIN 或批量查询
async getUsersWithOrders() {
  const query = `
    SELECT u.*, json_agg(o.*) as orders
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id
    GROUP BY u.id
  `;
  return await db.query(query);
}

## 八、最佳实践

### 8.1 审查频率

- **小 PR(<200 行)** - 每次提交前审查
- **中 PR(200-500 行)** - 每日审查
- **大 PR(>500 行)** - 拆分后审查

### 8.2 问题优先级

| 级别 | 类型 | 响应时间 |
|------|------|----------|
| ❌ 必须修复 | 安全漏洞、严重 bug | 立即修复 |
| ⚠️ 需要改进 | 性能问题、代码异味 | 本次 PR 修复 |
| 📝 建议 | 优化建议、风格问题 | 后续迭代 |

### 8.3 人工复核

AI 审查不能完全替代人工:

- **必须人工审查:** 业务逻辑、架构设计、用户体验
- **可以 AI 审查:** 代码规范、常见 bug、性能问题
- **建议混合审查:** AI 初筛 + 人工复核

## 九、成本优化

### 9.1 Token 使用统计

```bash
# 创建使用统计脚本
cat > scripts/review-stats.sh << 'EOF'
#!/bin/bash

# 统计 AI 审查的 Token 使用

LOG_FILE=".claude/review-log.jsonl"

echo "=== AI 审查统计 ==="
echo "总审查次数:$(wc -l < $LOG_FILE)"
echo "总输入 Token: $(cat $LOG_FILE | jq -s '[.[].input_tokens] | add')"
echo "总输出 Token: $(cat $LOG_FILE | jq -s '[.[].output_tokens] | add')"
echo "估算成本:$(cat $LOG_FILE | jq -s '([.[].input_tokens] | add) * 0.000003 + ([.[].output_tokens] | add) * 0.000015') 美元"
EOF

9.2 优化策略

  1. 只审查变更文件 - 避免全量扫描
  2. 增量审查 - 只审查变更的行
  3. 缓存结果 - 相同变更不重复审查
  4. 批量审查 - 合并多个小 PR

十、总结

使用 Claude Code 自动化代码审查的核心价值:

  1. 提升效率 - 减少人工审查时间
  2. 提高质量 - 发现人眼容易忽略的问题
  3. 统一标准 - 所有代码按相同标准审查
  4. 知识沉淀 - 审查规则可复用

实施建议:

  • 从简单的 Git Hook 开始
  • 逐步集成到 CI/CD
  • 根据团队反馈调整规则
  • 定期回顾审查效果

注意事项:

  • AI 审查是辅助工具,不是替代品
  • 业务逻辑仍需人工审查
  • 定期更新审查规则
  • 关注 API 使用成本

现在就开始搭建你的自动化代码审查流程吧!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐