人工代码审查有两个痛点:一是耗时,Senior工程师的时间本来就紧张,PR排队等审查是常态;二是容易遗漏,人眼看diff看久了注意力会下降,容易漏掉一些隐蔽的问题;

AI审查不能替代人工审查,但它能当第一道筛子——把明显的Bug、安全漏洞、风格问题先挑出来,人工审查者只需要关注架构和设计层面。两者结合效率最高;

方案设计

整体流程:开发者提PR→GitHub Actions触发→获取PR的diff→调用大模型审查→审查结果作为PR评论发布;

整个过程全自动,开发者提PR后几分钟内就能收到AI的审查意见;

GitHub Actions配置

name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

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

    - name: Get PR diff
      id: diff
      run: |
        DIFF=$(gh pr diff ${{ github.event.pull_request.number }})
        echo "diff<<EOF" >> $GITHUB_OUTPUT
        echo "$DIFF" >> $GITHUB_OUTPUT
        echo "EOF" >> $GITHUB_OUTPUT        
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: AI Review
      run: |
        pip install openai
        python scripts/ai_review.py << 'REVIEW_INPUT'
        ${{ steps.diff.outputs.diff }}
        REVIEW_INPUT        
      env:
        LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
        LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}

审查脚本

import sys, os
from openai import OpenAI

def review(diff: str) -> str:
    client = OpenAI(
        base_url=os.getenv("LLM_BASE_URL", "http://localhost:11434/v1"),
        api_key=os.getenv("LLM_API_KEY", "ollama")
    )

    if len(diff) > 30000:
        diff = diff[:30000] + "\n... (truncated)"

    resp = client.chat.completions.create(
        model=os.getenv("LLM_MODEL", "deepseek-r1:7b"),
        messages=[
            {"role": "system", "content": """你是代码审查专家。审查以下diff,按维度分类:

1. 🐛 Bug风险:可能导致运行时错误的代码
2. 🔒 安全问题:注入、泄露、鉴权遗漏等
3. ⚡ 性能问题:不必要的计算、内存泄漏风险等
4. 📖 可读性:命名、结构、注释等

格式:
### [维度 emoji] 问题
- [严重程度: 高/中/低] 描述(文件:行号)
  建议:修复方案

如果没有问题,简短确认即可。不要编造问题。"""},
            {"role": "user", "content": f"```diff\n{diff}\n```"}
        ],
        temperature=0.3
    )
    return resp.choices[0].message.content

if __name__ == "__main__":
    diff = sys.stdin.read() if len(sys.argv) < 2 else sys.argv[1]
    print(review(diff))

本地测试

git diff HEAD~1 | python scripts/ai_review.py

提升审查质量的技巧

提示词要明确审查维度,减少遗漏。temperature设0.3保证输出稳定。限制diff长度避免超出上下文窗口。如果项目有代码规范文档,把它加到system prompt里,AI审查时会参考。

写在最后

AI审查的价值不在于"替代人工",而在于"减轻人工负担"。让AI处理格式、安全、Bug这些机械性问题,人专注于架构和设计——这是最高效的分工方式。