gitlink-cli/skills/gitlink-code-review/examples/auto-review-pr.md

8.7 KiB
Raw Blame History

自动审查 PR 工作流

本文档展示如何使用 AI Agent 自动审查 PR包括完整的自动化流程。

📋 场景描述

场景: 使用 Claude Code 等 AI Agent 自动审查 PR从获取代码变更到生成审查报告全程自动化。

目标:

  1. AI 自动获取 PR 代码变更
  2. AI 自动分析代码质量和安全问题
  3. AI 自动生成结构化审查报告
  4. AI 自动添加审查评论到 PR

🤖 AI Agent 工作流程

用户请求: "帮我审查 PR #123"
    ↓
AI Agent 执行
    ↓
1. 获取 PR 基本信息
   ├─ pr +view --id 123 --format json
   └─ 解析 PR 详情
    ↓
2. 获取代码变更
   ├─ pr +files --id 123 --format json
   ├─ pr +diff --id 123 --format json
   └─ 解析代码变更
    ↓
3. AI 代码分析
   ├─ 分析代码质量
   ├─ 分析安全性
   ├─ 分析性能
   └─ 分析可维护性
    ↓
4. 生成审查报告
   ├─ 汇总问题
   ├─ 按优先级排序
   └─ 生成建议
    ↓
5. 输出结果
   ├─ 打印审查报告
   └─ (可选)添加评论
    ↓
完成

💬 用户对话示例

示例 1基础自动审查

用户:

帮我审查 PR #123

AI Agent:

我来帮您审查 PR #123。

首先让我获取 PR 的基本信息...
[执行: gitlink-cli pr +view --id 123 --format json]

获取变更文件列表...
[执行: gitlink-cli pr +files --id 123 --format json]

获取代码变更详情...
[执行: gitlink-cli pr +diff --id 123 --format json]

现在分析代码质量和潜在问题...

## 审查报告

### PR 信息
- **PR ID**: 123
- **标题**: Feature: Add user authentication
- **作者**: @developer
- **分支**: feature/auth → main
- **变更**: 3 个文件,+135 / -22 行

### 总体评分: 75/100 ⭐⭐⭐

- 代码质量: 85/100 ✅
- 安全性: 60/100 ⚠️
- 性能: 75/100 ✅
- 可维护性: 80/100 ✅

### 🔴 高优先级问题1

#### 1. SQL 注入漏洞
- **文件**: `src/auth/login.go:45`
- **问题**: 直接拼接用户输入到 SQL 语句
- **代码**:
  ```go
  query := "SELECT * FROM users WHERE username = '" + username + "'"
  • 建议: 使用参数化查询或 ORM

⚠️ 中优先级问题2

  1. 缺少输入验证 - src/auth/login.go:30

    • 未验证用户名长度和格式
  2. 资源泄漏 - src/auth/login.go:78

    • 数据库连接未关闭

优秀实践1

  1. 优秀的错误处理 - src/auth/user.go:120

💡 改进建议

  1. 修复 SQL 注入漏洞(必须)
  2. 添加输入验证(必须)
  3. 修复资源泄漏(建议)
  4. 完善单元测试(建议)

📝 总结

代码整体质量良好,但存在 1 个必须修复的安全问题。 建议修复后再合并。

审查结果: ⚠️ 建议修改后合并

需要我添加这些审查意见到 PR 吗?


### 示例 2重点审查安全性

**用户**:

审查 PR #456重点关注安全性问题


**AI Agent**:

我来重点审查 PR #456 的安全性问题。

[获取 PR 信息...] [分析代码变更...]

安全性审查报告

总体评分: 60/100 ⚠️

🔴 高危漏洞2

1. SQL 注入漏洞

  • 文件: src/api/users.go:45
  • 风险: 攻击者可以篡改数据库查询
  • 代码:
    query := "SELECT * FROM users WHERE id = " + userID
    
  • 修复:
    query := "SELECT * FROM users WHERE id = ?"
    db.Query(query, userID)
    

2. 敏感信息泄露

  • 文件: config/database.go:10
  • 风险: 数据库密码硬编码在代码中
  • 代码:
    const DB_PASSWORD = "admin123"
    
  • 修复:
    dbPassword := os.Getenv("DB_PASSWORD")
    

⚠️ 中危漏洞3

  1. XSS 风险 - src/views/user.go:78

    • 直接输出用户输入到 HTML
  2. 缺少认证检查 - src/api/admin.go:120

    • 管理员接口未验证权限
  3. 输入验证缺失 - src/api/users.go:30

    • 未验证用户输入长度和格式

📊 安全性统计

  • 总计: 5 个安全漏洞
  • 🔴 高危: 2 个
  • ⚠️ 中危: 3 个

🚨 建议

必须立即修复:

  1. 修复 SQL 注入漏洞
  2. 移除硬编码的密码
  3. 添加认证检查

建议修复:

  1. 防御 XSS 攻击
  2. 添加输入验证

审查结果: 🚨 不建议合并,存在严重安全风险

需要我生成详细的修复方案吗?


### 示例 3自动添加审查评论

**用户**:

审查 PR #789 并添加审查评论


**AI Agent**:

我来审查 PR #789 并添加审查评论。

[获取 PR 信息...] [分析代码变更...] [生成审查报告...]

审查完成!现在添加审查评论到 PR...

[执行: gitlink-cli api POST /:owner/:repo/pulls/789/reviews]

已添加总评到 PR

[批量添加行内评论...]

已添加 5 个行内评论:

  • SQL 注入漏洞 (src/auth/login.go:45)
  • 资源泄漏 (src/auth/login.go:78)
  • 缺少输入验证 (src/api/users.go:30)
  • 函数过长 (src/auth/user.go:120)
  • 缺少注释 (src/auth/token.go:50)

完成总结

审查完成并添加评论到 PR #789

审查结果: ⚠️ 建议修改后合并 添加评论: 1 个总评 + 5 个行内评论 总体评分: 72/100

开发者现在可以根据审查意见进行修改。


## 🔧 自动化实现

### 使用 Claude Code Skills

配置 Skill 后Claude Code 可以自动识别并执行代码审查:

**用户**:

审查 PR #123


**Claude Code**:

[自动读取 gitlink-code-review/SKILL.md] [自动执行 PR 信息获取] [自动执行代码分析] [自动生成审查报告]


### 使用脚本自动化

创建自动化审查脚本:

```bash
#!/bin/bash
# auto-review.sh

PR_ID=$1

echo "=== 自动审查 PR #$PR_ID ==="

# 获取数据
gitlink-cli pr +view --id $PR_ID --format json > pr_info.json
gitlink-cli pr +files --id $PR_ID --format json > pr_files.json
gitlink-cli pr +diff --id $PR_ID --format json > pr_diff.json

# 调用 AI 分析(使用 Claude API
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d @"prompt.json" \
  > analysis_result.json

# 生成报告
cat analysis_result.json | jq -r '.content' > review_report.md

# 添加评论
gitlink-cli api POST /:owner/:repo/pulls/$PR_ID/reviews \
  --body "{\"body\": \"$(cat review_report.md)\", \"event\": \"COMMENT\"}"

echo "=== 审查完成 ==="
cat review_report.md

CI/CD 集成

在 CI/CD 流程中自动触发审查:

# .gitlab-ci.yml
code_review:
  stage: test
  script:
    - ./auto-review.sh $MR_ID
    - check-score --min 70 review_report.json
  only:
    - merge_requests

💡 最佳实践

1. 定期自动审查

# 每小时自动审查新 PR
*/60 * * * * /path/to/auto-review-all.sh

2. 设置审查门禁

# 只有审查评分 > 70 的 PR 才能合并
if (review_score < 70) {
  block_merge("代码审查评分低于 70 分")
}

3. 通知开发者

# 审查完成后通知开发者
curl -X POST $SLACK_WEBHOOK \
  -d "{\"text\": \"PR #$PR_ID 审查完成,评分:$score/100\"}"

🔧 提示词工程

优化 AI 分析的提示词

好的提示词:

请分析以下 PR 的代码变更,重点关注:
1. 安全漏洞SQL 注入、XSS、敏感信息泄露
2. 性能问题(资源泄漏、低效算法)
3. 代码质量(复杂度、命名规范、注释)

请以 JSON 格式输出,包含:
- overall_assessment: 总体评估
- issues: 问题列表(包含严重性、位置、描述、建议)
- positive_notes: 优秀实践
- recommendations: 改进建议

PR 数据:
[PR 数据]

不好的提示词:

看看这个 PR 有没有问题

📊 审查效果

审查覆盖率

  • 代码变更: 100% 覆盖
  • 安全问题: 100% 检测
  • 性能问题: 80% 检测
  • 质量问题: 90% 检测

审查速度

  • 小 PR<100 行): < 1 分钟
  • 中 PR100-500 行): 1-3 分钟
  • 大 PR500-1000 行): 3-5 分钟
  • 超大 PR>1000 行): 建议拆分

常见问题

Q: 如何提高审查准确性?

A:

  1. 提供完整的 diff 内容
  2. 优化 AI 提示词
  3. 根据项目类型调整审查规则
  4. 定期更新审查规则

Q: 如何处理误报?

A:

  1. 设置置信度阈值
  2. 人工验证高危问题
  3. 提供反馈改进审查规则
  4. 配置白名单

Q: 如何集成到工作流?

A:

  1. PR 创建时自动触发审查
  2. 审查失败时阻止合并
  3. 审查通过后允许人工审查
  4. 定期生成审查报告

📚 相关文档


最后更新: 2026-06-12