Claude Code Agent 实战:30 分钟从零搭建一个 PR 自动审查助手

2026-05-03 20:49 Claude Code Agent 实战:30 分钟从零搭建一个 PR 自动审查助手已关闭评论

Claude Code Agent 实战:30 分钟从零搭建一个 PR 自动审查助手

上周我在几个开源项目上做 contributor,维护者反馈 PR 太多人工 review 不过来,我就想能不能用 Claude Code 的 Agent 能力写一个自动 PR 审查 bot。

问题是什么

维护开源项目时,PR 一多,光靠人肉 review 根本看不完。

每个 PR 都要检查代码风格、测试覆盖、有没有安全漏洞、是不是引入了 breaking change……这些工作重复性极高,但又不能不做。

我的目标很明确:写一个 AI Agent,当有人在 GitHub 上提 PR 时,它能自动拉代码、跑检查、给 review 意见,再把结果贴回 PR 评论区。整个过程不需要人盯着。

解决思路

选型时我对比了三种方案:

方案 优点 缺点
GitHub Actions + 脚本 免费、原生集成 写起来麻烦,逻辑复杂的场景脚本很难维护
OpenAI Function Calling 自建 灵活可控 要自己搞服务器、处理 webhook、管理状态
Claude Code Agent 自带 tool use、文件操作、git 能力 需要一点配置,整体是最轻量的

我最后选了 Claude Code 的 Remote Trigger 功能——在 claude.ai 上创建一个 trigger(触发点),通过 API 调用它。Trigger 里可以配置一个 Agent,给它一组工具(读文件、写文件、跑测试、git 操作等),它就能自主完成整个 review 流程。

操作步骤

步骤 1:创建 Remote Trigger

登录 claude.ai,进 Code > Remote Triggers,创建一个新 trigger:

名称:pr-reviewer
描述:Automatically review pull requests

这个 trigger 暂时是个空壳,下一步给它配行为。

步骤 2:配置 Agent 的 system prompt

关键在这里——Agent 不知道自己要干什么,你得告诉它。这是我的 system prompt:

你是一个 PR review 助手。当收到一个 PR 的 URL 时,执行以下步骤:

1. 使用 `gh pr view <url>` 获取 PR 的详细信息(标题、描述、文件列表)
2. 使用 `gh pr diff <url>` 获取代码变更
3. 对于每个变更文件:
   a. 检查代码风格和命名规范
   b. 检查是否有明显的 bug 或安全漏洞
   c. 检查测试是否覆盖了变更逻辑
4. 运行 `npm test` 确认测试通过
5. 汇总 review 意见,使用 `gh pr comment <url> -b "<意见>"` 贴到 PR 上

注意:评论要逐条列出问题,标注严重等级(critical / major / minor),每个问题附上行号和建议修复方案。

prompt 里给的指令越具体,Agent 的执行结果越稳定。别只写"review this PR",要明确告诉它每一步做什么、用什么命令、输出格式是什么。

步骤 3:创建触发脚本(本地 webhook)

在本地写一个脚本监听 GitHub webhook 事件,调用 Remote Trigger。我用 Node.js 写了个最简单的 Express 服务器:

import express from 'express';
import { Anthropic } from '@anthropic-ai/sdk';

const app = express();
const anthropic = new Anthropic();

app.post('/webhook', express.json(), async (req, res) => {
  const { action, pull_request } = req.body;

  if (action === 'opened' || action === 'synchronize') {
    const prUrl = pull_request.html_url;

    // 调用 Remote Trigger
    await anthropic.triggers.run('pr-reviewer', {
      body: { pr_url: prUrl }
    });

    console.log(`Triggered review for ${prUrl}`);
  }

  res.send('ok');
});

app.listen(3000);

ngrok 把这个本地服务暴露到公网,然后在 GitHub 仓库的 Settings > Webhooks 里添加一个 webhook,指向 https://your-ngrok.ngrok.io/webhook,只订阅 pull_request 事件。

步骤 4:配置 GitHub token

Agent 要操作 GitHub(看 PR、写评论),需要认证。在 claude.ai 的 Remote Trigger 环境变量里设置:

GITHUB_TOKEN=ghp_your_token_here

然后在 Agent 的 prompt 里加一句:

注意:GitHub CLI 的认证信息已通过环境变量 GITHUB_TOKEN 配置,直接使用 gh 命令即可。

步骤 5:测试整个流程

提一个测试 PR 看看效果。我故意留了几个问题:

  • 一个变量命名用了 `x` 而不是有意义的名称
  • 一个 `console.log` 忘记删了
  • 一个潜在的 XSS(直接把用户输入拼到了 innerHTML 里)
  • 提交后大约 30 秒,Agent 完成了 review:

    ## PR Review: fix/user-input-sanitization
    
    ### Critical ❗
    - **src/components/comment.tsx:42** — 用户输入直接拼接到 innerHTML,存在 XSS 风险
      建议使用 textContent 或 DOMPurify 清理
      
    ### Major ⚠️
    - **src/utils/format.ts:15** — 变量名 `x` 语义不明确,建议改为 `userInput`
    
    ### Minor ℹ️
    - **src/utils/format.ts:8** — 遗留的 console.log,建议删除
    
    ### ✅ 测试通过
    - 所有 47 个测试用例通过
    - 新增测试覆盖了 XSS 清理逻辑
    

    结果与总结

    效果出乎意料地好。Agent 准确发现了 XSS 问题(这是最关键的)、命名问题和遗留调试代码。整个过程从 PR 提交到 review 完成大概 30-40 秒,比人工快太多了。

    踩的几个坑:

  • **Token 权限要给够** — GITHUB_TOKEN 需要有 `contents: read`、`pull_requests: write` 和 `checks: read` 权限,少一个 gh 命令就报 403
  • **Agent 有时会"发散"** — prompt 不够具体的话,Agent 会自己去翻仓库里的其他文件,review 耗时一下就上去了。后来我在 prompt 里加了约束:"只 review 变更文件,不要检查无关代码"
  • **webhook 超时** — GitHub webhook 默认 30 秒超时,Agent 执行很可能超过 30 秒。解决方案是把 webhook 做成异步的(收到事件后立即返回 200,后台再慢慢处理),或者用 GitHub 的 `check_run` 接口来轮询
  • 延伸思考

    这只是 Remote Trigger 最简单的一个用法。继续深挖的话,还可以:

  • **多 Agent 协作** — 创建多个 trigger,一个负责 code quality、一个负责安全审查、一个负责性能分析,并行执行后汇总结果
  • **自动修复** — 遇到简单问题(比如缺少分号、变量命名),Agent 可以直接提一个修正 commit 追加到 PR 分支上
  • **学习仓库风格** — 给 Agent 提供项目的 `.eslintrc`、`.prettierrc` 和已有的代码样本,让它按项目自身的规范来审查
  • **集成到 CI** — 在 GitHub Actions 里调用 Remote Trigger,把 review 结果作为 CI check 的一部分,不通过就不让合并
  • 你可能感兴趣的文章

    来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
    转载请注明出处: https://teachcourse.cn/4043.html ,谢谢支持!

    资源分享

    分类:Android 标签:
    harmony学习组件(@Component)生命周期 harmony学习组件(@Component)生
    debug-specialist.skill debug-specialist.skill
    AI周报助手 AI周报助手
    实例说明kotlin关键字until、map和joinToString的用法 实例说明kotlin关键字until、map

    评论已关闭!