iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Software Development

AI 驅動的 Code Review:MCP 與 n8n 自動化實踐系列 第 19

[Day19] n8n Code Review 自動化: 使用 API 取代 MCP Tool 的完整解決方案

  • 分享至 

  • xImage
  •  

n8n Code Review 自動化:使用 API 取代 MCP Tool 的完整解決方案

前言

在前一篇文章中,我們深入探討了為什麼要從 MCP Tool 轉向 API 方式來實現 Code Review 自動化。今天我們將詳細介紹如何透過兩種不同的 API 方式來協助進行 Code Review,首先從最基礎的 overview 留言方式開始。

流程概述圖

API Workflow 整體架構

我們的自動化流程設計如下圖所示,包含五個主要步驟:

API Workflow 流程圖

流程概覽

  1. 取得差異資料:調用 GitLab API 獲取 merge request 的 diff 資訊
  2. 資料整理:(選擇性)格式化和整理 diff 資料
  3. 條件判斷:檢查是否需要進行 code review
  4. AI 分析:請 AI 進行程式碼審查
  5. 結果回饋:透過 GitLab API 在 merge request 中留言

詳細實作步驟

步驟 1:取得 Diff 資料

使用 GitLab 的 merge request changes API,透過 webhook 參數動態構建 API 請求:

https://swissknife.vip/api/v4/projects/{{ $json["body"]["project"]["id"] }}/merge_requests/{{ $json["body"]["object_attributes"]["iid"] }}/changes

這個 API 呼叫會返回該 merge request 中所有檔案的變更資訊。

步驟 2:資料整理與預處理(選擇性)

資料整理節點設定

雖然標示為選擇性步驟,但為了提升程式碼可讀性和維護性,建議加入這個資料預處理階段。你也可以直接使用 n8n 的內建節點或 $json 語法來處理資料。

const changes = $json.changes || [];
const isChange = $json.changes ? true : false;
const isOpen = $json.state == "opened" ? true : false;
const shouldDoCodeReview = isChange && isOpen;

const mergedDiffs = changes.map(change => {
  return `📄 檔案:${change.new_path}\n${change.diff}`;
}).join('\n\n');

const projectId = $json.project_id || 0;
const iid = $json.iid || 0;

return [{
  json: {
    mergedDiffs,
    projectId,
    iid,
    shouldDoCodeReview
  }
}];

這段程式碼的主要功能:

  • 檢查是否有檔案變更且 merge request 處於開啟狀態
  • 將所有變更的檔案和差異內容合併成易讀格式
  • 提取必要的 project ID 和 merge request ID

步驟 3:條件判斷邏輯

條件判斷節點

使用 n8n 的 IF 條件 節點來決定是否需要進行 code review:

條件設定 - True 分支
條件設定 - False 分支

邏輯判斷:

  • True 分支:當 shouldDoCodeReview 為 true 時,繼續執行 AI code review
  • False 分支:當條件不滿足時,流程結束,不進行任何操作

步驟 4:AI Code Review 執行

在 AI 節點的設定中:

  • Model 與 Memory:使用前面章節介紹的設定
  • Tool 設定:由於我們改用 API 流程,不需要配置任何 MCP Tool
  • Prompt 設計
針對 {{ $json["mergedDiffs"] }} 的程式碼給建議
code review

這個 prompt 會將前一步驟整理好的所有檔案變更內容傳送給 AI 進行分析。

步驟 5:結果回饋與留言

GitLab API 留言設定

使用 GitLab 的 Notes API 將 AI 的審查結果留言到 merge request 中。API 參數來源為前一個 AI 節點的輸出結果。

實際執行結果

透過這套自動化流程,我們可以獲得完整且詳細的 code review 反饋:

Code Review 結果展示

方案優勢與小結

主要優勢

  1. 流程清晰:透過 API 拆解動作的流程圖,可以一眼看出整個 code review 的執行步驟
  2. 資訊確定性:透過節點化的資訊整理,確保每個步驟的資料都是可預期且可控的
  3. 職責分離:只有需要智慧分析的部分交給 AI 處理,其他邏輯都通過確定性的程式碼控制

開發歷程

這個解決方案是我在公司進行 POC(概念驗證)時,花費兩天時間開發出的第一個版本。雖然功能完整,但在實際使用場景中,我們發現需要更精確的留言方式。

下一步規劃

目前團隊已經進一步優化了這個方案,改用 Discussion API 來實現更精確的程式碼行級別留言功能。這樣可以讓 code review 的建議直接標註在對應的程式碼行上,大幅提升使用者體驗和實用性。

在下一篇文章中,我們將詳細介紹這個進階版本的實作方式和技術細節。


上一篇
[Day18] 為什麼我改用 API 打造 Code Review 自動化,取代 MCP Tool?
下一篇
[Day20] 團隊使用 n8n + AI + API 做 Code Review 的最終方案:Discussion API 實戰 (上)
系列文
AI 驅動的 Code Review:MCP 與 n8n 自動化實踐22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言