跳到主内容
AIHO 2026 全新改版上线

用 AI Agent 搭一个自动化 PR Review 流水线

适用场景

  • 团队 5-20 人,PR review 是瓶颈
  • 想让 AI 做第一轮审查,人只看 AI 标记的问题
  • 需要 CI 阻断有严重问题的 PR(而非只评论)

如果团队只有 1-2 人,单挂一个 CodeRabbit 就够,不必上完整流水线。这篇面向"review 已经成为瓶颈"的团队。各家 review 工具的横向对比见 AI 代码审查工具横评

整体思路:AI 做机械层,人做判断层

自动化 review 的目标不是取代人,而是分工:

  • AI 层:揪机械性问题——空指针、未处理异常、SQL 注入、密钥泄露、console.log 残留。这些数量多、容易漏、判断标准明确。
  • 人层:看架构合理性、业务逻辑正确性、命名和抽象是否得当。这些需要上下文和判断,AI 给建议但不拍板。

流水线把 AI 层做成全自动,让人的注意力集中在真正需要思考的地方。

架构

PR 提交 → GitHub Actions 触发
  ├─ CodeRabbit Bot 自动评论(逐行 + 摘要)
  ├─ Claude Code 自定义规则审查(安全 / 性能 / 团队规范)
  └─ 严重问题 → 设置 commit status = failure → 阻断合并

两个 AI 审查器分工:CodeRabbit 做通用全面审查(覆盖广),Claude Code 做团队特定规则(精准卡你最在意的几类问题)。互补而非重复。

落地路线:分三阶段,别一步到位

直接上"阻断合并"是新手最容易翻车的地方——AI 误报会卡住所有人,团队两天就把你的流水线绕过去了。建议分阶段:

  1. 阶段一(第 1 周):只装 CodeRabbit,纯评论模式,不阻断。让团队习惯 AI 评论的存在,观察误报率。
  2. 阶段二(第 2-3 周):加 Claude Code 自定义规则,仍只评论。调 prompt 直到误报可接受。
  3. 阶段三(误报率够低后):开启"严重问题阻断合并",且只阻断安全类(注入、密钥),其余仍是建议。

下面按这个顺序配。

第一步:CodeRabbit 接入(阶段一)

CodeRabbit 是开箱即用的 GitHub App,装上就自动 review。

  1. 去 coderabbit.ai 安装 GitHub App
  2. 选择要 review 的仓库
  3. 在仓库根目录加 .coderabbit.yaml
reviews:
  auto_review:
    enabled: true
    drafts: false          # 草稿 PR 不审,省配额
  path_filters:
    - "!**/*.lock"          # 不审 lock 文件
    - "!**/dist/**"         # 不审构建产物
    - "!**/*.generated.ts"  # 不审生成代码
  instructions: |
    - 用中文评论
    - 重点关注 SQL 注入、XSS、敏感信息泄露
    - 不要评论代码风格(用 ESLint 管)
    - 性能问题只在 O(n²) 以上才报
  1. 提交一个 PR 测试,CodeRabbit 会在约 30 秒内出评论。

path_filtersinstructions 是这步的关键——前者省配额、防刷屏,后者把 CodeRabbit 的"啥都说"收敛到你团队真正在意的范围。

第二步:Claude Code 自定义规则(阶段二)

CodeRabbit 是通用审查,团队特定规范(你们项目独有的约定)用 Claude Code 补。

创建 .github/workflows/ai-review.yml

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

jobs:
  claude-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0          # 必须,否则 git diff 拿不到完整历史

      - name: Get changed files
        id: changed
        run: |
          files=$(git diff --name-only ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }})
          echo "files=$files" >> $GITHUB_OUTPUT

      - name: Claude Code Review
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            审查以下文件的改动,重点关注:
            1. 是否有未处理的 Promise rejection
            2. 是否有 SQL 拼接(而非参数化查询)
            3. 是否有 console.log 遗留在生产代码中
            4. 是否有 hardcoded 密钥 / token

            输出格式:
            - 🔴 严重问题(必须修复):文件:行号 + 原因
            - 🟡 建议(可选):文件:行号 + 建议
            - ✅ 没问题的文件不用提

            改动的文件:
            ${{ steps.changed.outputs.files }}

把 prompt 里的检查项换成你团队真正踩过坑的那几类——这才是 Claude Code 比 CodeRabbit 值钱的地方:它管的是"我们项目特有的雷"。

第三步:严重问题阻断合并(阶段三)

误报率调到可接受后,再开阻断。在 review workflow 末尾加 commit status:

      - name: Set check status
        if: steps.claude-review.outputs.severity == 'critical'
        run: |
          curl -X POST \
            -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            -H "Accept: application/vnd.github.v3+json" \
            https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.event.pull_request.head.sha }} \
            -d '{"state": "failure", "context": "AI Review / Critical Issues", "description": "发现严重问题,请修复后重新提交"}'

然后在 GitHub 仓库设置 → Branch protection → Require status checks → 添加 AI Review / Critical Issues

只阻断安全类严重问题(SQL 注入、密钥泄露)。 把"风格""性能建议"也设成阻断,开发者会想尽办法绕过你的流水线——这是落地失败最常见的原因。

效果

某团队上线一个月后的实测变化(供参考,具体因团队而异):

指标之前之后
PR 平均 review 时间8 小时2 小时
人工 review 评论数15 条/PR5 条/PR
合并后发现的 bug3 个/周1 个/周
开发者满意度6/108/10

人工评论从 15 条降到 5 条不是"人变懒了",而是机械性问题被 AI 提前清掉,人只需对剩下的判断性问题发言。

成本估算

成本备注
CodeRabbit开源仓库免费 / 私有 $24/seat/mo小团队可只给核心仓库开
Claude Code API约 $0.1-0.5/PR取决于改动量,月费一般 $50 内
GitHub Actions公开仓库免费额度足够私有仓库算入 Actions 分钟数

控制 API 成本的关键:path_filters 排除无意义文件、drafts: false 不审草稿、只在 opened/synchronize 触发而非每次 push。

踩坑记录

  1. 别一上来就开阻断——分三阶段落地,先纯评论养成习惯、压低误报,再开阻断。
  2. 只阻断安全类严重问题——风格/性能设成阻断,开发者会绕过整条流水线。
  3. path_filters 必配——不加会审 lock 文件、dist 目录,既浪费 API 又刷屏。
  4. Claude Code Action 需要 fetch-depth: 0——否则 git diff 拿不到完整历史,diff 范围错乱。
  5. 两个审查器会有重叠评论——CodeRabbit 和 Claude 偶尔报同一个问题,用 instructions 把两者的职责划清(CodeRabbit 管通用、Claude 管团队特定)减少重复。
  6. secrets 配置别漏——ANTHROPIC_API_KEY 要在仓库 Settings → Secrets 里配,组织级仓库注意 secret 作用域。

延伸阅读