n8n软件代码评审AI 评分 · 79/100AI 辅助编辑·未发现明显提示词注入风险n8n.io

用 AI 审阅 GitHub PR 并记录到 PostgreSQL 与 Slack

GitHub Webhook 触发 → 获取 PR 变更文件与 diff → 提取并结构化代码变更 → 评分与分级 → 按严重程度路由 → 回写 GitHub PR 评论 → 存入 PostgreSQL → Slack 通知

经验丰富步骤流程提示词贴士
给谁
需要自动化代码审阅的软件开发团队或 DevOps 工程师
你会得到
PR 创建或更新时自动触发,提取 diff,生成评分与分级,回写 GitHub 评论,存入数据库并推送 Slack 摘要
你需要
n8n · GitHub · PostgreSQL · Slack

硬约束

基于 n8n 模板导入。前置条件:n8n 实例(建议自托管以使用 webhook)、GitHub 仓库管理员权限(添加 webhook 与 PAT)、PostgreSQL 数据库、Slack Webhook URL。需配置凭证:githubApi、postgres。workflow.json 中的 AI 审阅节点为 Code 节点占位(评分逻辑),实际 LLM 调用需按模板说明自行接入。

他们做了什么

模板作者 oneclick-ai 在 n8n 上构建了一个工作流模板,包含 15 个节点(5 个 Sticky Note + 10 个功能节点),实现从 GitHub PR webhook 触发到 diff 提取、评分、路由、GitHub 评论回写、PostgreSQL 存储、Slack 通知的完整链路。workflow.json 中提供了 Extract Code Diffs 与 Score Review 两个 Code 节点的具体 JavaScript 实现,以及 Slack 消息体模板。

效果如何

作者声称该模板可自动检测 PR、仅获取变更文件、使用 AI 提供上下文感知反馈、覆盖质量/安全/性能/最佳实践多维度、直接回写格式化的 GitHub 评论、将历史记录存入 PostgreSQL、并实时推送高严重度通知。(author_report,未经本站实测)

值得知道

1. workflow.json 中未包含实际 LLM 调用节点,'AI Review' 仅为文档描述与占位评分逻辑,用户必须自行接入 AI 服务。2. Slack 节点的 Webhook URL 为占位符 YOUR_SLACK_WEBHOOK_URL,需替换。3. PostgreSQL 节点使用 autoMapInputData 且未预设列映射,需提前创建 code_reviews 表或手动配置。4. 大文件 diff 会被截断,超大 PR 可能需要分块处理。5. 模板建议的 AI 模型包括 Grok、OpenAI GPT-4o/o1、Claude、Gemini 等,但节点层面未锁定具体模型。

n8n 工作流模板

结构已检查 · 未实际运行

下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。

配置与测试清单

需要绑定的凭证

  • GitHub Webhook - PR Events 节点:绑定GitHub API 凭证。
  • Store Review Results in PostgreSQL 节点:绑定Postgres 凭证。

需要替换的配置

  • 源模板来自 n8n 公开库 #13652(约 15 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
  • Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。

测试输入与预期结果

  • 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
  • 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。

模板处理说明

  • 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
  • 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。

模板获取日期: 2026-10-24

步骤

  1. 触发 PR 检测

    在 n8n 中配置 GitHub Webhook 节点,监听 pull_request 事件(opened、synchronize、reopened、ready_for_review)。可选添加 Filter 节点以忽略草稿 PR、dependabot PR 或特定分支。支持手动触发用于测试。

  2. 获取并分析代码

    使用 GitHub 节点获取 PR 详情(标题、正文、编号、仓库、base/head 提交)。通过 HTTP Request 节点调用 GitHub API `/pulls/{number}/files` 获取变更文件列表与 diff 内容。使用 Merge 节点合并 PR 元数据与文件数据。在 Code 节点 'Extract Code Diffs' 中运行 JavaScript,将变更文件映射为结构化对象(filename、status、additions、deletions、changes、patch),并计算总增删行数,输出包含 reviewId、timestamp、prNumber、prTitle、prAuthor、branch、changedFiles 等的 JSON。

    运行提示词 · 来源原文。Code 节点 'Extract Code Diffs' 的 jsCode 参数

    const data = $input.item.json;
    const changedFiles = data[1] || [];
    const prDetails = data[0] || {};
    
    const fileAnalysis = changedFiles.map((file) => {
      return {
        filename: file.filename || 'unknown',
        status: file.status || 'modified',
        additions: file.additions || 0,
        deletions: file.deletions || 0,
        changes: file.changes || 0,
        patch: file.patch || '',
        blob_url: file.blob_url || ''
      };
    });
    
    const timestamp = new Date().toISOString();
    const reviewId = `REV-${Date.now()}`;
    
    const totalAdditions = fileAnalysis.reduce((sum, f) => sum + f.additions, 0);
    const totalDeletions = fileAnalysis.reduce((sum, f) => sum + f.deletions, 0);
    const totalChanges = fileAnalysis.reduce((sum, f) => sum + f.changes, 0);
    
    return {
      json: {
        reviewId,
        timestamp,
        prNumber: prDetails.number || 'unknown',
        prTitle: prDetails.title || 'Untitled',
        prDescription: prDetails.body || '',
        prAuthor: prDetails.user?.login || 'unknown',
        prUrl: prDetails.html_url || '',
        branch: prDetails.head?.ref || 'unknown',
        baseBranch: prDetails.base?.ref || 'main',
        totalFiles: fileAnalysis.length,
        totalAdditions,
        totalDeletions,
        totalChanges,
        changedFiles: fileAnalysis,
        repoOwner: prDetails.base?.repo?.owner?.login || 'unknown',
        repoName: prDetails.base?.repo?.name || 'unknown'
      }
    };
  3. AI 审阅与评分

    模板描述中此步骤应发送结构化 diff 数据与上下文(语言、仓库规范、自定义指南)到 AI 模型进行代码正确性、安全漏洞、性能优化、可读性、SOLID 原则、最佳实践等维度的分析。但 workflow.json 中对应节点 'Score Review & Categorize Issues' 仅为 Code 节点占位,执行启发式评分(additions>500 扣 10 分,files>10 扣 5 分),未实际调用 LLM。用户需自行在 Extract Code Diffs 之后、评分之前插入 OpenAI/Claude/Grok 等 AI 节点,并将 AI 输出接入评分节点。

    运行提示词 · 来源原文。Code 节点 'Score Review & Categorize Issues' 的 jsCode 参数(占位评分逻辑;实际 LLM 审阅需按模板文档自行接入)

    const review = $input.item.json;
    
    const categories = {
      critical: [],
      major: [],
      minor: [],
      suggestion: []
    };
    
    const issueCount = {
      critical: 0,
      major: 0,
      minor: 0,
      suggestion: 0
    };
    
    let reviewScore = 95;
    if (review.totalAdditions > 500) reviewScore -= 10;
    if (review.totalFiles > 10) reviewScore -= 5;
    
    return {
      json: {
        ...review,
        reviewScore: Math.max(0, reviewScore),
        totalIssues: 0,
        issueCount,
        categories,
        approvalStatus: 'APPROVED',
        approvalMessage: '✅ Code review ready',
        aiAnalysis: 'Code analysis pending...'
      }
    };
  4. 按严重程度路由

    使用 Switch 节点 'Route by Review Severity' 根据 issueCount.critical 的值进行分支:若 critical > 0 走 'Critical Issues' 分支,否则走 'Good Review' 分支。不同分支可触发不同的后续处理(如 critical 时立即 Slack 告警)。【首次测试安全】首次运行优先使用测试仓库/测试库/测试 Slack 频道;确认评审载荷无误前保持生产写入/发送节点断开。

  5. 发布审阅并通知

    根据路由结果执行以下并行或串行操作:使用 HTTP Request 节点向 GitHub API POST `/pulls/{prNumber}/reviews` 发布审阅评论;使用 PostgreSQL 节点将审阅结果存入 code_reviews 表(需确保表已存在,当前使用 autoMapInputData);使用 HTTP Request 节点向 Slack Webhook URL 发送 JSON 格式的摘要消息(含 PR 标题、作者、评分、状态);最后使用 Code 节点 'Log Review Completion' 输出执行日志。【首次测试安全】首次测试前,建议先断开 Post Review to GitHub PR、Store Review Results in PostgreSQL、Send Summary to Slack 节点,或改用测试仓库/测试数据库/测试 Slack 频道,确认数据流正确后再接通。

    运行提示词 · 来源原文。HTTP Request 节点 'Send Summary to Slack' 的 jsonBody 参数(需将 YOUR_SLACK_WEBHOOK_URL 替换为真实 URL)

    ={
      "text": "Code Review: PR #{{ $json.prNumber }}",
      "blocks": [
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*PR: {{ $json.prTitle }}*\n*Author:* {{ $json.prAuthor }}\n*Score:* {{ $json.reviewScore }}/100\n*Status:* {{ $json.approvalStatus }}"
          }
        }
      ]
    }

    运行提示词 · 来源原文。Code 节点 'Log Review Completion' 的 jsCode 参数

    const review = $input.item.json;
    const timestamp = new Date().toISOString();
    
    console.log(`✅ CODE REVIEW COMPLETED | PR #${review.prNumber} | Author: ${review.prAuthor} | Score: ${review.reviewScore}/100`);
    
    return {
      json: {
        success: true,
        reviewId: review.reviewId,
        prNumber: review.prNumber,
        reviewScore: review.reviewScore,
        timestamp
      }
    };

可复制提示词

搭建指导 · 本站建议版本。交给搭建助手,先确认输入和权限,再按步骤检查凭证、webhook、AI 节点插入、Slack URL 替换与数据库表准备

这一段是提示词,页面不会在这里插入广告。

你正在搭建一个 n8n 工作流,用于自动审阅 GitHub Pull Request 并将结果记录到 PostgreSQL 与 Slack。请先确认以下前置条件:
1. 拥有可访问的 n8n 实例(建议自托管以支持 webhook);
2. GitHub 仓库管理员权限,可添加 Webhook 并生成含 repo 范围的 Personal Access Token;
3. PostgreSQL 数据库及连接信息;
4. Slack Incoming Webhook URL(可选)。

导入 workflow.json 后,依次完成:配置 githubApi 与 postgres 凭证;在仓库 Settings → Webhooks 添加 n8n webhook URL 并选择 Pull requests 事件;检查 'Score Review & Categorize Issues' 节点——当前为占位评分逻辑,需自行插入 AI 节点(OpenAI/Claude/Grok)以实现真正的代码审阅;将 Slack 节点中的 YOUR_SLACK_WEBHOOK_URL 替换为真实地址;确保 PostgreSQL 中 code_reviews 表已创建或手动配置列映射;最后手动触发测试并激活工作流。

此提示词为编辑建议的搭建启动词,非节点运行指令。实际 LLM 审阅提示词需用户根据仓库规范自行编写并填入 AI 节点。

来源

Review GitHub pull requests with AI and log results to PostgreSQL and Slack · oneclick-ai · n8n.io · 2026-02-24

留言与反馈

试过这个方法吗?分享效果、遇到的问题或改进建议。留言审核后公开,请勿填写敏感信息。

正在加载…

    相关用例