当前位置:首页 > 文章 > 正文内容

PR提交自动触发AI审查,结果贴到评论区:我的代码审查流水线搭建实录

廖万里4小时前文章0

PR提交自动触发AI审查,结果贴到评论区:我的代码审查流水线搭建实录

我们团队只有两个人,每周大约合入 15-20 个 PR。之前全靠人工审查,一个 300 行的 PR 至少花 15 分钟。后来我在 GitHub Actions 里接入了 AI 自动审查——PR 提交后自动触发,审查结果直接贴到 PR 评论区,人工只需要确认 AI 的发现。跑了两周之后,人工审查时间从每 PR 15 分钟降到了 5 分钟。这篇文章是完整的搭建过程,所有配置可以直接复制使用。

整体架构

流水线很简单,四步走:

PR 提交 → GitHub Actions 触发 → Python 脚本调用 AI 审查代码 diff → 结果通过 GitHub API 贴到 PR 评论区

需要的材料:一个 GitHub 仓库、一个 API 令牌(用来调大模型)、一段 Python 脚本、一个 Actions 配置文件。

第一步:准备 API 访问

AI 审查脚本需要能调用大模型 API。我用的是 Claude 4.7,因为它在代码审查上的表现比 GPT-5.5 更稳定,误报率更低。

API Key 从聚合平台获取——注册后在令牌管理里创建一个专用令牌,只勾选 Claude 4.7 的权限,取名为 ci-review。然后把 Key 存到 GitHub 仓库的 Secrets 里,不要在配置文件里硬编码。

# 在 GitHub 仓库 Settings → Secrets and variables → Actions 中添加:
# 名称: API_KEY
# 值: 你的ci-review令牌

# 名称: API_BASE_URL
# 值: https://api.bblabu.cn/v1

第二步:写审查脚本

核心逻辑:用 git 拿到 PR 的 diff → 加上审查 prompt → 发给 Claude 4.7 → 把返回结果格式化。

# review.py
import os, sys, json
from openai import OpenAI

REVIEW_PROMPT = """审查以下代码变更,按此格式输出:

### 🔴 严重问题
- [文件名:行号] 问题描述 + 修复建议

### 🟡 建议改进
- [文件名:行号] 建议描述

### 🟢 正面发现
- 值得肯定的代码写法

只报告真实问题,不确定的不要报。"""

def review_diff(diff_text):
    client = OpenAI(
        api_key=os.environ["API_KEY"],
        base_url=os.environ["API_BASE_URL"]
    )
    
    resp = client.chat.completions.create(
        model="claude-4.7",
        messages=[
            {"role": "system", "content": "你是资深代码审查者"},
            {"role": "user", "content": f"{REVIEW_PROMPT}\n\n{diff_text}"}
        ],
        max_tokens=2000,
        temperature=0.3  # 低温度保证审查一致性
    )
    return resp.choices[0].message.content

if __name__ == "__main__":
    # 从标准输入读取 diff
    diff = sys.stdin.read()
    if len(diff) > 50000:
        print("⚠️ diff 过大,只审查前 50000 字符")
        diff = diff[:50000]
    
    result = review_diff(diff)
    print(result)

第三步:配置 GitHub Actions

在项目根目录创建 .github/workflows/ai-review.yml

name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 获取完整历史以计算 diff
      
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      
      - name: Install dependencies
        run: pip install openai
      
      - name: Get PR diff
        run: |
          git diff origin/${{ github.base_ref }}...HEAD > pr.diff
      
      - name: Run AI review
        id: review
        env:
          API_KEY: ${{ secrets.API_KEY }}
          API_BASE_URL: ${{ secrets.API_BASE_URL }}
        run: |
          python .github/scripts/review.py < pr.diff > review.md
      
      - name: Post review comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review.md', 'utf8');
            const body = '## 🤖 AI 代码审查\n\n' + review + 
                         '\n\n---\n*自动审查仅供参考,请人工确认所有发现*';
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: body
            });

第四步:跑起来看看效果

配置完成后,随便提一个 PR 测试。推送代码后,GitHub Actions 自动运行审查脚本,大概 30-60 秒后 PR 评论区就会出现 AI 的审查结果。

两周跑下来,统计了 32 个 PR 的审查数据:

指标数据
审查 PR 数32 个
AI 发现问题(经人工确认)28 个
严重问题5 个(并发安全 2 个、SQL 注入 1 个、逻辑错误 2 个)
误报数6 个(误报率 ~18%)
人工审查时间从每 PR 15 分钟降到 5 分钟
总费用(32 个 PR)约 ¥1.2(聚合平台定价)

32 个 PR 的 AI 审查总共花了不到一块五。如果走官网直连,同样用量(约 48 万 Token,Claude 4.7 输出单价 $75/百万Token)大约要 ¥260。差价来自 API 额度的获取渠道——聚合平台以批发价采购额度再分销,Token 单价只有官网的几十分之一。

几个踩坑经验

坑一:diff 太大导致超时。第一次跑的时候有一个 2000 行的 PR 重构,diff 文本接近 8 万字符,发给 Claude 后等了快两分钟然后超时了。解决方案是加了 diff 大小限制,超过 5 万字符自动截断。大 PR 建议拆成小 PR 提交,审查质量也会更高。

坑二:Actions 的 Secrets 变量名。GitHub Actions 的 Secrets 不能以 GITHUB_ 开头,也不能包含特殊字符。我当时把变量名设为 GITHUB_API_KEY,被 Actions 静默拦截了,脚本拿到的值是空的。排查了半小时才发现。

坑三:审查 prompt 不要写太长。最开始我把公司的编码规范(2000 多字)也塞进了系统 prompt,导致每次审查的输入 Token 翻倍。后来把规范精简到 500 字以内,审查质量没降,但每次审查的费用降了一半。

总结

整个搭建过程不到一小时——写一个 Python 脚本 + 一个 Actions 配置文件,剩下的 GitHub 和 API 平台都帮你做了。跑起来之后的效果超出了我的预期:5 个严重问题在合入之前被发现,避免了至少两次可能的生产事故。

这套流水线的代码都是标准的,换个项目只需要改一下审查脚本里的 prompt。如果你也想试试,建议先在一个非关键仓库跑一周,根据误报率调整 prompt,稳定了再推广到全部项目。


相关资源:

测试环境:GitHub Actions ubuntu-latest,Claude 4.7,2026年5月。审查效果因项目类型和代码规范而异。

本文链接:https://www.kkkliao.cn/?id=REPLACE_ID 转载需授权!

本文链接:https://www.kkkliao.cn/?id=4011 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“PR提交自动触发AI审查,结果贴到评论区:我的代码审查流水线搭建实录” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。