--- title: 從賽車到高鐵:AI Coding 在大型專案的框架思維 tags: [ai-coding, architecture, erp, framework-design, software-engineering] --- # 從賽車到高鐵:AI Coding 在大型專案的框架思維 > 大多數人用 AI 寫程式像 F1 賽車——速度很快,但跑得好不好全看車手。大型專案需要的是高鐵:靠軌道,不靠車手。 ![ai-coding-railway-model](https://hackmd.io/_uploads/SJxuMTsh-x.png) # 1️⃣ 問題:AI 的寫法太自由 目前主流的 AI Coding 工作流大致如下: 1. 寫規格或 User Story 2. 讓 AI 生成程式碼 3. 用單元測試驗證品質 4. Code Review,發現問題再修正 這個流程在小型專案或獨立功能上運作得很好。但放到 ERP 級別的大型專案,問題就浮現了: - 每個工程師用 AI 的方式不同,**同一類功能可能有十種實作方式** - 測試覆蓋率高,不代表架構一致性高 - 隨著功能增加,維護成本以非線性速度上升 - AI 生成的程式碼沒有「記憶」,不知道專案已有的慣例 根本原因不是 AI 不夠聰明,而是 **AI 可選的寫法太多**——不是寫錯,而是合法的寫法太多種。我們給了它一片空白,它能寫出一百種正確但彼此不相容的答案。 --- # 2️⃣ 核心思路:縮小選擇空間,而不是加更多 Prompt | F1 賽車模型(現況) | 高鐵模型(目標) | |---|---| | 結果取決於車手(工程師)技術 | 結果取決於軌道(框架)規範 | | AI 自由選擇實作方式 | AI 只能填空,不能選路 | | 每個功能都長得不一樣 | 所有功能共享骨架 | | 靠測試事後補救 | 框架本身就是 constraint | | 維護人員需讀懂 AI 的意圖 | 維護人員只需懂框架 | 重點在於:**不要試圖用更精準的 Prompt 控制 AI,而是先建一條 AI 只能在上面跑的鐵軌。** 這條鐵軌,就是開發框架。 --- # 3️⃣ 解法:Framework-First,AI-Second ### 角色分工 ``` Feature Layer ← 工程師 / PM 用 AI 填空,只寫業務邏輯 ───────────────── Framework Layer ← 架構師建置,Transaction / Auth / Audit / Routing ───────────────── Infrastructure Layer ← DB / Queue / Cache / API GW ↑ 越往下越需要高品質,越往上越需要簡單 ``` 架構師負責建鐵軌,其他開發參與者在上面開列車。 ### 框架設計的核心原則:讓錯誤的寫法無法編譯 框架不是「建議大家這樣寫」,而是「其他寫法根本跑不起來」。 框架對外只暴露必要的抽象介面,隱藏所有底層實作細節。開發者無法繞過框架直接操作資料庫、無法跳過驗證層、無法忽略權限檢查——不是因為有人盯著,而是因為框架根本沒有提供那條路。 AI 的任務因此從「自由發揮」變成「在框架定義的邊界內填入業務邏輯」。AI 可選的寫法從整個程式語言,縮小到業務邏輯本身。 ### 用靜態分析機器強制執行架構規範 框架的約束力必須是機器強制的,不能依賴 Code Review 的人工自律。 透過靜態分析工具,可以在編譯期或 CI 階段自動檢查:跨模組是否透過正確的通道溝通、業務邏輯是否混入了不該有的基礎設施操作、單一功能的規模是否超出合理範圍。 AI 生成的程式碼如果違反框架規範,在 CI 就直接擋下來,不進入人工審核流程。 --- # 4️⃣ 終極目標:AI 開發閉環 框架建好之後,才有可能實現真正的 AI 開發閉環: ``` 結構化需求(PM 填寫 YAML / 表單) │ ▼ AI Orchestrator 識別 Pattern → 生成骨架 → 填入業務邏輯 → 測試 → 自動修正重試 │ ▼ Human Review 人只審核業務邏輯,架構與安全性由框架保證 ``` ### 閉環成立的三個前提 **1. Pattern 可識別性** 框架需要明確定義功能 Pattern 清單,AI 才能判斷「這個需求套哪條鐵軌」: ``` Pattern Taxonomy(以 ERP 為例) ├── SimpleCrud → 基本主檔維護(供應商、客戶) ├── ApprovalFlow → 需審核的單據(採購單、請假) ├── Calculation → 批次運算(薪資、成本分攤) ├── Integration → 對接外部系統(EDI、銀行) ├── Report → 查詢報表(唯讀) └── Composite → 以上組合(需人介入拆解) ``` **2. 需求結構化** PM 的自然語言無法直接餵給閉環。需求必須先結構化——明確定義功能名稱、對應的 Pattern、欄位定義、審核規則、業務規則。這個格式比自然語言精確,比程式碼容易讓非工程師填寫,是閉環的起點。 **3. 可量測的閉環成功率** 閉環不是 100% 全自動,而是有明確的人工介入觸發條件: | 狀態 | 條件 | |------|------| | **閉環成功(全自動)** | Pattern 識別信心度達門檻、Build + Test 全過、無跨模組新依賴 | | **需人介入(半自動)** | Pattern 為 Composite、需求涉及現有邏輯修改、Test coverage 不足 | | **退回重新設計** | 需求隱含框架尚未支援的 Pattern → 這是框架演進的 signal | --- # 5️⃣ 對組織的影響 導入框架驅動的 AI 開發後,開發流程會從: ``` PM → 需求文件 → 工程師 → 程式碼 → QA → 部署 ``` 轉變為: ``` PM → 結構化需求 → AI Pipeline → PR → 人工審核 → 部署 ``` 知識不再只存在工程師腦中,而是沉澱在框架和 Pattern 庫裡。人員異動的衝擊降低,新人學會框架就能上手,技術債也集中在框架層統一管理。 --- # 6️⃣ 框架建置的優先順序 框架不是一次建完,而是漸進建置: ``` Phase 1 — 鐵軌鋪設(最重要) ├── Base classes / interfaces 定義 ├── Scaffolding CLI(一個指令生成模組骨架) └── Reference Implementation(給 AI 學習的 few-shot 範本) Phase 2 — 邊界強制化 ├── 靜態分析規則(編譯期檢查架構規範) ├── Architecture unit test └── Code review checklist → 轉成自動化檢查 Phase 3 — AI Prompt 標準化 ├── 每類 Pattern 各一套 system prompt template ├── Context injection(自動帶入相關 Entity 定義) └── Output validation(產出的 code 跑 build + 靜態分析) ``` --- # 7️⃣ 框架方法的風險與取捨 框架不是銀彈,選擇這條路也有代價: - **框架設計錯的成本很高**:框架是地基,地基歪了,上面蓋的功能全部跟著歪。修正框架往往意味著大範圍的連鎖調整,不像單一功能改完就結束。 - **框架需要持續演進**:業務需求會變,框架也得跟著調整。向後相容、版本遷移、deprecation 策略——這些都是持續的維護負擔,不會因為「框架建好了」就停止。 - **過度約束會綁住手腳**:不是所有功能都能套進預定義的 Pattern。如果框架沒有留給例外情境合理的逃生出口,開發者就會被迫用扭曲的方式硬套,反而製造更多問題。 這些風險不是說框架方法不可行,而是框架的設計品質直接決定了整套方法的成敗。 建議框架在開放使用前,先用三個差異很大的真實功能來驗證: 1. **簡單 CRUD**(最基本的情境) 2. **複雜審核流程**(有狀態、有規則) 3. **跨模組整合**(有依賴、有副作用) 如果框架能優雅地容納這三種情境,才算真正完成。 --- # ✅ 結語 **框架設計本身的品質,決定了一切。** 架構師的最終產出不是程式碼,而是一條讓整個組織可以持續高速運行的鐵軌。框架建得好,換誰來開都能準點到站。 這套做法不一定適合所有專案——如果你的專案規模不大、團隊人數固定、AI 使用方式已經有默契,靠 F1 模式也能跑得很好。但如果你面對的是持續擴張、人員流動頻繁的大型系統,或許值得認真考慮:先把鐵軌鋪好,再讓 AI 上路。 --- 📘 **HackMD 原文筆記:** 👉 https://hackmd.io/@jeff377/ai-coding-railway-model **📢 歡迎轉載,請註明出處** **📬 歡迎追蹤我的技術筆記與實戰經驗分享** [Facebook](https://www.facebook.com/profile.php?id=61574839666569) | [HackMD](https://hackmd.io/@jeff377) | [GitHub](https://github.com/jeff377) | [NuGet](https://www.nuget.org/profiles/jeff377)