開場
老師的話
透過SDLC(軟體開發生命週期)來探討n8n workflow,進行設計前的探索到提案與規格確定。即可明確整個完整的n8n workflow順暢。接下來再來透過AI Agent進行task設計。可確保n8n工作流的完整性與正確性。這一段影片敘述如何進行具有事前規劃的workflow設計步驟與概念。尤其是n8n workflow node會進行許多外部的API Connector或者是進行MCP Function calling,這些如果都採用節點進行相關設定,卻沒有整個專案的外部組態配置管理?維護工作流將會產生若干的問題。另外關於CI/CD架構與維運的問題,是否可以被確保? 這設計步驟影片給大家參考看看。
影片 13 分鐘,在 YouTube 開啟。下面照影片順序整理,圖都取自影片的投影片,點圖可以放大。
第 1 節
規格驅動開發:先寫檔案,再寫程式
這個做法叫規格驅動開發(Spec-Driven Development,SDD)。AI 拿到需求不會馬上寫程式,而是先把幾份檔案寫清楚,每份只回答一個問題:
| 檔案 | 回答的問題 |
| 提案 | 為什麼要做、要改變什麼、明確不做什麼 |
| 規格 | 系統對外看得到的行為 |
| 設計 | 怎麼做、為什麼這樣做、捨棄了哪些方案 |
| 任務清單 | 步驟,還有每一步怎麼驗證做完了 |
🔍 點圖放大
一句口語需求 → 探索 → 提案 → 規格/設計 → 任務 → 實作 → 驗證。
為什麼要這麼麻煩?AI 寫程式很快,可是方向一錯,錯得也很快。先把檔案對齊,後面實作就是照表操課,每一步都查得到理由。
第 2 節
探索:先查資料,也查實際環境
起點是一段很口語的需求:定期抓台北市 YouBike 資料、存到 Google Drive 的 Ubike 資料夾、打包成 Docker 映像,而且需求裡直接附上了 Google 帳號密碼。AI 做的第一件事不是動手,而是把需求裡的每個假設拿出來檢查。
探索一:資料從哪裡來
直覺會想寫爬蟲,但台北市本來就有公開的 JSON:一千多個站點、約 940 KB、不用金鑰、大約每分鐘更新一次。有現成 API 就不要自己爬,這是第一個決策。
探索二:帳號密碼能不能用
🔍 點圖放大
密碼:Google 已停用而且有外洩風險;個人 Gmail 的 Service Account 沒有自己的儲存空間,上傳會失敗;只剩 OAuth2。
密碼一旦出現在對話或程式碼裡,就要當作已經外洩、馬上換掉。
🔍 點圖放大
OAuth2 流程:在 Google Cloud 建 Client ID/Secret 放進環境變數 → 在 n8n 按一次「用 Google 登入」由本人同意 → n8n 把拿到的 Token 加密存起來,之後每次排程都用它上傳。程式拿到的是有範圍、可以隨時撤銷的授權,不是你的密碼。
探索三:「最新資訊」怎麼存
🔍 點圖放大
只留最新沒有歷史;每次都存一天 144 個檔;最後兩個都要:最新檔每 10 分鐘覆蓋、每小時另存一份快照。一份不到 1 MB,一個月約 680 MB,免費 15 GB 可以用一年半。
設計習慣:先問資料要拿來做什麼,再用數字估算成本。
探索四:檢查實際環境
🔍 點圖放大
映像標 latest 實際是 1.100.1,所以固定版本;主機上的舊 n8n 容器沒有 volume,一刪資料就沒了,所以不動它、另開新的;5678 埠已被占用,改用 5679。
這些都不是事先想得到的,是實際查了才知道。
第 3 節
提案:寫下「明確不做的事」
提案回答為什麼要做:YouBike 資料只有當下狀態、沒有歷史,所以需要一個不用人管的流程把它一直存下來。
🔍 點圖放大
不爬網頁、不轉 CSV 也不做分析、不自動刪除舊快照、不動既有的 n8n 容器。
重點:寫出不做什麼,實作的時候就不會越做越多,範圍才守得住。
第 4 節
規格:只寫外部看得到的行為
🔍 點圖放大
6 條需求、15 個情境:定期取得、寫入前驗證、覆蓋最新檔、每小時快照、OAuth2 授權、自動部署。
判斷小技巧:換一種實作方式,外部看到的行為都不變,那段內容就不屬於規格,應該放進設計。所以規格裡看不到任何節點名稱。
🔍 點圖放大
需求用 SHALL/MUST NOT 這種不留餘地的字眼寫;每條至少配一個 WHEN/THEN 情境,例如「回應是空陣列時不寫入,執行標為失敗」。每個情境都能直接變成一個測試案例。
🔍 點圖放大
前四條需求串起來就是一次執行:抓資料(失敗重試最多 3 次)→ 驗證是不是非空陣列,不過關就失敗、不碰任何檔案 → 更新最新檔 → 分鐘數在 00–09 就另存整點快照。
第 6 節
任務清單:六組二十四項,每項都寫怎麼驗證
🔍 點圖放大
Google 端準備(本人操作 4 項,黃色)→ 專案骨架 3 項 → 憑證與工作流 5 項 → Docker 部署 5 項 → 端到端驗證 6 項 → 文件 1 項。建 OAuth 用戶端要帳號本人操作,AI 沒辦法代勞。
🔍 點圖放大
每條需求至少對應一個實作任務和一個驗證任務。例如「寫入前驗證」對應任務 5.4:故意餵一個空陣列,確認最新檔沒被改動。找不到驗證任務的需求,就代表清單有漏洞——這是 AI 自我檢查的方法。
第 7 節
實作與驗證:照設計長出來的工作流
檔案都齊了才進實作。10 個節點的工作流跟設計圖幾乎一模一樣(節點逐一說明見本課第 3 節)。這次抓到 1,807 個站點,快照檔名已經用台北時間算好。
🔍 點圖放大
執行紀錄:每 10 分鐘自動跑一次都成功;點開 9:00 那次,下面的整點快照支線也亮了——規格裡「整點快照」的情境在真實環境被驗證過。
憑證畫面顯示帳號已連線,Client ID 和 Secret 都從環境變數帶進來,工作流檔案裡找不到任何機密。最後用指令跑 OpenSpec 的嚴格驗證,提案、規格、設計、任務四份檔案都完整。
第 8 節
重點回顧
- 先探索:查資料來源,也查實際環境,不要憑想像設計。
- 規格只寫行為,設計才寫怎麼做、為什麼。
- 每個決策都記下被捨棄的方案,之後回頭看才知道當初在想什麼。
- 每條需求都要有驗證任務,做完了才有證據。
對照老師提的兩個問題(整理者補充):
① 外部組態配置管理:這條流程的做法是金鑰、Client ID、資料夾 ID 全放 .env,憑證用固定 ID 的骨架、值在啟動時由環境變數帶入(決策 D5),節點裡不寫死任何設定。換帳號或換資料夾只改 .env,不用進畫面一個一個節點改。
② CI/CD 與維運:映像固定版本(D7)、工作流 JSON 每次啟動都重新匯入並啟用(D6),所以 git 裡的那份就是正本,重建容器結果一樣。再往前一步,可以把 OpenSpec 的嚴格驗證和「空陣列不寫入」這類驗證任務放進 CI,每次改工作流都自動跑一遍才准部署。