我用 AI Agent 做了自动代码审查:从提交到反馈,全程零人工(附 Python 实现)

适合团队有代码审查流程、但 CR 效率低或者没有专人负责的开发者。
本文用 Python + AI Agent 搭了一套自动代码审查系统,代码提交后自动审查并给出修改建议。

背景:代码审查是瓶颈

很多团队的代码审查流程是这样的:

  1. 开发写完代码,提 PR
  2. 等 reviewer 有空来看(可能等半天)
  3. reviewer 给几个评论
  4. 开发修改,再提 PR
  5. 再等 reviewer 确认

整个流程可能耗时 1-3 天。对于小团队或者独立开发者,经常没有 reviewer,代码直接合并,质量全靠自觉。

我用 AI Agent 搭了一套自动审查系统,代码提交后 30 秒内给出审查意见。

系统架构

代码提交 → Git Hook 触发 → 提取 diff → AI 审查 → 输出报告

4 个环节,下面逐个实现。

模块 1:提取代码变更

从 Git 仓库提取最新提交的代码变更(diff)。

import subprocess

def get_latest_diff(repo_path="."):
    """获取最新一次提交的代码变更"""
    result = subprocess.run(
        ["git", "diff", "HEAD~1", "HEAD", "--stat"],
        cwd=repo_path,
        capture_output=True,
        text=True
    )
    stat = result.stdout

    result = subprocess.run(
        ["git", "diff", "HEAD~1", "HEAD"],
        cwd=repo_path,
        capture_output=True,
        text=True
    )
    diff = result.stdout

    return {"stat": stat, "diff": diff}

def get_pr_diff(repo_path="."):
    """获取当前分支相对 main 的所有变更"""
    result = subprocess.run(
        ["git", "diff", "main", "--stat"],
        cwd=repo_path,
        capture_output=True,
        text=True
    )
    stat = result.stdout

    result = subprocess.run(
        ["git", "diff", "main"],
        cwd=repo_path,
        capture_output=True,
        text=True
    )
    diff = result.stdout

    return {"stat": stat, "diff": diff}

模块 2:AI 代码审查

把 diff 喂给 AI,让它从多个维度审查。

from openai import OpenAI

client = OpenAI()

REVIEW_PROMPT = """你是一个资深代码审查员。请审查以下代码变更,从 5 个维度给出意见:

1. **Bug 风险**:有没有明显的逻辑错误、空指针、边界条件问题
2. **安全问题**:有没有 SQL 注入、XSS、硬编码密钥等安全隐患
3. **代码质量**:命名是否清晰、函数是否过长、有没有重复代码
4. **性能问题**:有没有不必要的循环、内存泄漏、N+1 查询
5. **最佳实践**:是否遵循项目约定、是否缺少错误处理

代码变更:
```diff
{diff}

请按以下格式输出:

审查结果

严重问题(必须修改)

  • [文件:行号] 问题描述 → 修改建议

建议优化(推荐修改)

  • [文件:行号] 问题描述 → 修改建议

优点(值得保持)

  • 描述代码中做得好的地方

总结

一句话总结本次审查结论。“”"

def review_code(diff, max_diff_chars=8000):
“”“AI 审查代码”“”
# 截取过长的 diff
truncated_diff = diff[:max_diff_chars]
if len(diff) > max_diff_chars:
truncated_diff += f"\n\n… (截断,原始 diff 共 {len(diff)} 字符)"

prompt = REVIEW_PROMPT.format(diff=truncated_diff)

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.3  # 低温度保证审查一致性
)

return response.choices[0].message.content

## 模块 3:生成审查报告

```python
from datetime import datetime

def generate_report(review_result, diff_stat, output_path="review_report.md"):
    """生成 Markdown 格式的审查报告"""
    report = f"""# 代码审查报告

**审查时间**: {datetime.now().strftime('%Y-%m-%d %H:%M')}
**审查方式**: AI 自动审查
**变更统计**:

{diff_stat}


{review_result}

---
*本报告由 AI Agent 自动生成,仅供参考。关键决策仍需人工确认。*
"""

    with open(output_path, "w", encoding="utf-8") as f:
        f.write(report)

    print(f"审查报告已生成: {output_path}")
    return output_path

模块 4:Git Hook 集成

在代码提交后自动触发审查。

#!/usr/bin/env python3
"""
.git/hooks/post-commit 文件内容
每次 git commit 后自动触发代码审查
"""
import subprocess
import sys
import os

# 添加项目路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__))))

from review_tool import get_latest_diff, review_code, generate_report

def main():
    print("🔍 AI 代码审查开始...")

    # 1. 获取 diff
    diff_data = get_latest_diff()
    if not diff_data["diff"].strip():
        print("没有代码变更,跳过审查")
        return

    print(f"  变更统计:\n{diff_data['stat']}")

    # 2. AI 审查
    print("  AI 审查中...")
    result = review_code(diff_data["diff"])

    # 3. 生成报告
    report_path = generate_report(result, diff_data["stat"])
    print(f"✅ 审查完成,报告: {report_path}")

if __name__ == "__main__":
    main()

安装 Git Hook:

# 把上面的代码保存为 .git/hooks/post-commit
chmod +x .git/hooks/post-commit

# 之后每次 git commit 都会自动审查

模块 5:GitHub Actions 集成(PR 自动审查)

如果用 GitHub,可以通过 Actions 在 PR 创建时自动审查。

# .github/workflows/ai-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: pip install openai

      - name: Run AI Review
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: python review_tool.py

      - name: Comment PR
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const report = fs.readFileSync('review_report.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: report
            });

踩坑记录

坑 1:diff 太长,AI 处理不了

症状:一次提交改了 50 个文件,diff 有 5 万字符,AI 超时。

原因:上下文窗口有限,太长的 diff 塞不进去。

解决:只审查 .py.js.ts 等代码文件,忽略 .json.lock.min.js。diff 超过 8000 字符就截断。

坑 2:AI 审查太严格,到处都是"问题"

症状:AI 把每一行都标记为"建议优化",开发者看了直接崩溃。

原因:prompt 里没有区分严重程度。

解决:prompt 里明确要求分为"严重问题"和"建议优化"两级,严重问题必须改,建议优化可选。

坑 3:AI 不了解项目上下文

症状:AI 建议"用 ORM 替代原生 SQL",但这个项目就是用原生 SQL 的。

原因:AI 不知道项目的技术栈和约定。

解决:在 prompt 里加上项目的技术栈说明,或者把 README.md 的内容也喂给 AI。

坑 4:审查结果不一致

症状:同一个 diff 审查两次,结果不一样。

原因:temperature 太高。

解决:temperature 设为 0.3 以下,保证输出稳定。

坑 5:API 费用累积

症状:每天 10 次 commit,每次调 GPT-4 花 0.5 元,一个月 150 元。

解决:非关键文件用 GPT-3.5-turbo(便宜 10 倍),核心逻辑文件才用 GPT-4。

效果数据

用了 2 周后的真实数据:

指标 人工审查 AI 自动审查 变化
审查耗时 2-24 小时 30 秒 快 200 倍+
审查覆盖率 约 60%(reviewer 看不完) 100%(每行都看) +40%
发现问题数 平均 2 个/PR 平均 4 个/PR +100%
误报率 极低 约 20% 需人工筛选

核心结论:AI 审查速度快、覆盖率高,但有 20% 误报。最佳实践是 AI 先审 + 人终审

总结

3 条核心经验:

  1. AI 审查是"第一道筛",不是最终决策。它能快速发现明显问题,但复杂的设计决策还是需要人来判断。

  2. prompt 里加项目上下文。把技术栈、代码规范、项目约定写进 prompt,AI 的审查意见会更准确。

  3. diff 要过滤和截断。只审查代码文件,忽略配置和锁文件。超过 8000 字符就截断,否则 AI 处理不了。


你的团队有代码审查流程吗?用什么工具?评论区交流。

更多推荐