代码审查终结者:使用 n8n 与 GPT 自动化指南摆脱手动检查
Source: Dev.to
引言
手动代码审查虽然必不可少,但成本高、速度慢且容易不一致。虽然 GitHub Copilot 的代码审查功能需要付费订阅(Copilot Pro 每月 10 美元或每年 100 美元;Copilot Pro+ 每月 39 美元或每年 390 美元),但你完全可以构建一个低成本、自动化的 AI 代码审查助手,让它免费或几乎免费运行。
工具
| 工具 | 系统中的角色 |
|---|---|
| n8n | 工作流创建 – 将 GitHub 与 OpenAI 连接,管理逻辑并格式化输出。 |
| NHost | 托管的 PostgreSQL 数据库 – 存储 n8n 工作流数据和凭证(免费层)。 |
| Render | 托管 n8n Web 服务,提供域名 URL,并连接到 NHost 数据库。 |
| OpenAI | 提供用于审查代码的 LLM。 |
为什么选择 PostgreSQL(NHost)而不是 SQLite?
n8n 默认使用 SQLite,适合本地开发,但在高并发事务和可扩展性方面表现不佳。NHost 上的 PostgreSQL 实例提供稳定、可扩展的存储,同时仍然符合免费层个人项目的预算。
数据库设置与托管
基础设施遵循文章《The Ultimate Guide to Self‑Hosting n8n for Free using Render and Nhost》中描述的步骤。
步骤 1 – NHost
- 在 NHost 上创建账户。
- 新建项目并设置 PostgreSQL 数据库。
- 记录生成的环境变量(后续会用到)。

步骤 2 – Render
- 在 Render 注册并创建一个新的 Web Service。
- 使用 Docker 镜像
n8nio/n8n:latest。 - 将 NHost 的环境变量添加到 Render 项目设置中。
- Render 会部署 n8n 并提供一个域名。

步骤 3 – 配置 Webhook URL
为了让 GitHub 能访问你的 n8n 实例,在 Render → Web Service → Environment Variables 中设置以下变量:
WEBHOOK_URL="https://[your-render-domain].onrender.com/"
N8N_HOST="[your-render-domain].onrender.com"
N8N_PROTOCOL="https"
所需凭证
- GitHub 访问令牌 – 生成一个拥有 repo 权限的个人访问令牌(用于读取 PR 数据和发布评论)。
- OpenAI API 密钥 – 需要一个有效的密钥;新用户可能拥有免费试用额度,但大多数人需要至少花费 5 美元以避免
insufficient_quota错误。 - 成本控制 – 本指南使用
gpt-5-nano(最便宜的模型)以最小化 token 使用。任何能够胜任的模型都可以替换,虽然 “Mini” 系列在性能与成本之间提供了良好的平衡。
创建工作流

在 n8n 中,将以下节点拖入画布(右侧面板):
- GitHub Trigger – 在拉取请求事件触发。
- HTTP Request – 获取 PR diff。
- Code (JS) – 为 OpenAI 构建提示词。
- OpenAI – 生成审查结果。
GitHub Trigger
- 在 GitHub 中创建一个拥有完整 repo 权限的个人访问令牌。
- 在 n8n 中搜索 GitHub,添加 “on a pull request” 触发节点。
- 使用你的 GitHub 凭证配置节点并保存。
- 节点会显示一个唯一的 Webhook URL – 将其复制用于下一步。

获取代码 Diff
触发节点在 $json.body.pull_request 中提供 PR 详情。构造用于获取变更文件的 API 端点:
{{ $json.body.pull_request.url }}/files
添加一个 HTTP Request 节点,设置为:
- 调用上述 URL。
- 使用 GitHub Access Token 凭证,设置
Authorization: Bearer <token>。

定义 AI 人设
创建一个 Code (JS) 节点,用于构建发送给 OpenAI 的提示词。示例结构:
const reviewPrompt = `
You are a Senior Software Engineer tasked with reviewing a pull request.
Provide concise, actionable feedback covering:
- Code correctness
- Security concerns
- Performance implications
- Style and best‑practice adherence
- Suggested improvements
`;
return {
model: "gpt-5-nano",
messages: [
{ role: "system", content: reviewPrompt },
{ role: "user", content: $json["diff"] } // 之前获取的 diff
]
};
根据团队规范随意自定义 reviewPrompt。

生成审查结果
添加一个 OpenAI 节点,选择最便宜且能胜任的模型(例如 gpt-5-nano),并将前面 JavaScript 节点输出的 model 与 messages 字段映射进去。该节点会返回 AI 生成的审查文本,随后可以使用另一个 GitHub 节点(如 “Create Issue Comment”)将其作为评论发布回 PR。
继续将 OpenAI 节点的输出连线到 GitHub “Create Comment” 节点,提供 PR 编号和审查文本即可。