背景:为什么需要自动化 Code Review?
在日常开发中,Code Review 是最耗时但又最能提升代码质量的环节。很多小团队因为人手不足,往往跳过或草率完成 Review 环节。
本文分享一套基于 GitHub Actions + Claude API 的自动化代码审查方案,已经在我的团队中稳定运行 3 个月,Review 效率提升约 50%。
—
核心方案:三层过滤模型
第一层:AI 预检(过滤噪音)
利用 OpenAI/Anthropic API 对 PR 进行初步分析,过滤掉明显的拼写错误、格式问题和简单逻辑错误:
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: Get diff
run: git diff HEAD^ HEAD > diff.txt
- name: AI Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
cat diff.txt | python3 .github/scripts/ai_review.py
第二层:结构化 Prompt(保证质量)
# .github/scripts/ai_review.py
import sys, os, json
from anthropic import Anthropic
client = Anthropic(api_key=os.getenv("ANTHROPIC_API终究_KEY"))
SYSTEM_PROMPT = """你是一位资深代码审查员。请对以下 diff 进行审查,输出格式:
- [CRITICAL] 严重问题:...
- [WARNING] 警告:...
- [SUGGESTION] 建议:...
只输出与代码质量相关的内容,忽略格式和无关变更。
"""
def review_diff(diff_text):
response = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=4096,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": diff_text[:100000]}] # 截断防超限
)
return response.content[0].text
if __name__ == "__main__":
diff = sys.stdin.read()
result = review_diff(diff)
print(result)
# 将结果写入 PR 评论
第三层:摘要与分类(Review 后处理)
def post_review_comment(pr_number, review_body):
"""将 AI Review 结果作为评论发布到 PR"""
import requests
token = os.getenv("GITHUB_TOKEN")
headers = {
"Authorization": f"token {token}",
"Accept": "application/vnd.github.v3+json"
}
url = f"https://api.github.com/repos/OWNER/REPO/issues/{pr_number}/comments"
# 统计问题等级
critical = review_body.count("[CRITICAL]")
warning = review_body.count("[WARNING]")
summary = f"""
## AI Code Review 结果
| 指标 | 数量 |
|------|------|
| 严重问题 | {critical} |
| 警告 | {warning} |
{review_body}
"""
requests.post(url, headers=headers, json={"body": summary})
—
关键优化点
- diff 截断:大 PR 用
[:100000] 截断,避免 token 超限
- 评论降噪:首次只输出
[CRITICAL] 级别,避免信息过载
- 增量模式:只 review
HEAD^ 之后的变更,减少重复评论
- 多模型 fallback:Claude 3.5 为主力,GPT-4o 为 backup,平衡准确率与成本
成本与效果
| 指标 | 人工 Review | AI 辅助 | 提升 |
| 单 PR 耗时 | 20-30 min | 5-8 min | 70% |
| 遗漏严重 Bug | 5%/月 | 1%/月 | 显著下降 |
| API 成本 | — | ~$0.05/PR | 可忽略 |
踩坑记录
- 敏感代码泄露风险:不要在 prompt 中提交含密钥、token 的代码。建议先通过
git diff 过滤敏感文件。
- AI 幻觉:Claude 有时会指出不存在的"问题",需要 human-in-the-loop 最终确认。
- 大文件超时:超过 500 行变更的 diff 建议拆分成多个 review 请求。
—
讨论
大家是怎么处理 Code Review 效率问题的?有没有尝试过类似的自动化方案?欢迎在评论区分享你们的实践经验和踩坑故事。