代码审查终结者:使用 n8n 与 GPT 自动化指南摆脱手动检查

发布: (2025年12月2日 GMT+8 11:07)
6 min read
原文: Dev.to

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

  1. NHost 上创建账户。
  2. 新建项目并设置 PostgreSQL 数据库。
  3. 记录生成的环境变量(后续会用到)。

NHost 设置

步骤 2 – Render

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

Render 设置

步骤 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 中,将以下节点拖入画布(右侧面板):

  1. GitHub Trigger – 在拉取请求事件触发。
  2. HTTP Request – 获取 PR diff。
  3. Code (JS) – 为 OpenAI 构建提示词。
  4. OpenAI – 生成审查结果。

GitHub Trigger

  1. 在 GitHub 中创建一个拥有完整 repo 权限的个人访问令牌。
  2. 在 n8n 中搜索 GitHub,添加 “on a pull request” 触发节点。
  3. 使用你的 GitHub 凭证配置节点并保存。
  4. 节点会显示一个唯一的 Webhook URL – 将其复制用于下一步。

GitHub 触发器

获取代码 Diff

触发节点在 $json.body.pull_request 中提供 PR 详情。构造用于获取变更文件的 API 端点:

{{ $json.body.pull_request.url }}/files

添加一个 HTTP Request 节点,设置为:

  • 调用上述 URL。
  • 使用 GitHub Access Token 凭证,设置 Authorization: Bearer <token>

获取代码 Diff

定义 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

定义 AI 人设

生成审查结果

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

继续将 OpenAI 节点的输出连线到 GitHub “Create Comment” 节点,提供 PR 编号和审查文本即可。

Back to Blog

相关文章

阅读更多 »

切换账户

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 正如大家所知,我正重新开始记录我的进展,我认为最好在一个不同的…

Strands 代理 + Agent Core AWS

入门指南:Amazon Bedrock AgentCore 目录 - 前置要求(requisitos‑previos) - 工具包安装(instalación‑del‑toolkit) - 创建…