從一人 AI 工作流到團隊工程系統

謝浩哲 (HAO) · TSMC Senior IT Engineer

· ABCDEF 會議室 · 主題演講 · Keynote

官方場次介紹 ↗
🕒 錄音長度 48:5314,886 字25 張照片

會議重點

本議程以講者豪在一人專案與 Side Project 的實踐為起點,說明如何讓需求、設計、規則與驗證機制成為 AI 可讀取、執行及接受回饋的工程環境。核心是將程式碼產出轉化為可維護的交付成果,再透過共享、分發與治理累積團隊工程資產;團隊導入仍在推動與驗證中。

待辦追蹤

討論摘錄

AI 加速產出背後的維護風險

AI 加快程式碼產出,不代表交付也會加快。講者豪指出,若未明確提供目標、規則與回饋機制,快速生成的程式碼可能累積重複實作與耦合,讓後續修正、除錯及 review 的成本超過省下的實作時間。

豪以大型檔案與 Copy Paste 說明 AI 開發的常見風險:即使功能完成、驗收通過,重複實作與耦合仍可能持續累積。

Cursor-Based Pagination API 是具體案例。既有 Codebase 已有至少五支相似 API,interface 與 encode、decode 邏輯大致相同,卻各自實作,未整理共用層。新增 API 時,AI 再複製一份既有程式碼;這次改動範圍雖小,也不會破壞其他 API,但未來若要統一調整 Pagination 的 interface 或實作方式,就必須修改多個位置。

Cursor-Based Pagination API 案例呈現相似介面與邏輯的重複實作;新增時再複製一份,降低了當次改動範圍,卻增加日後統一調整的成本。

豪強調,這類問題在 AI 出現前就已存在,只是產出速度提升後,累積得更快。落差不在於 AI 無法完成任務,而在於它選擇的完成方式,未必符合工程師對長期維護的期待;若期待只留在工程師腦中,AI 並不知道應如何取捨。

模組依賴也有相同風險。在 Controller、Service、Repository 的分層架構中,豪不希望 Repository 反向依賴 Service,也不希望 Service 反向依賴 Controller。然而,這些規則既未告知 AI,也沒有工具檢查。AI 為重用 Controller 中的常數,直接在 Service 中 import Controller;程式雖然編譯通過,預期的模組邊界卻已被打破。

經歷重複實作與反向依賴後,豪重新思考 AI 的工作環境:除了加速產出,更要讓 AI 理解完成標準、應遵守的規則,以及如何發現偏離。

豪將工程師的責任定位為打造工程紀律與工作環境,而非只要求 AI 更快生成程式碼。當有效做法能被重用、共同維護,才有機會將個人的效率提升延伸至團隊,並避免把省下的實作時間轉化為更重的維護負擔。

豪介紹自身工程背景,並以一人專案與 Side Project 的實踐經驗,探討如何兼顧 AI 產出速度與軟體品質。

需求共識與可執行的拆單流程

需求流程的核心,是先與 AI 取得共識,再將共識轉成可執行、可驗證的工作。講者豪以三個問題作為流程設計的起點:開發前如何對齊需求、實作偏離時如何及早發現,以及有效做法如何讓下一個人或下一個專案不必重新踩坑。

流程設計從三個問題出發:開發前對齊需求、及早發現偏移,以及讓有效做法延續到其他人與專案。

收到 PM 的功能需求後,講者不再直接要求 AI 修改程式,而是先使用自行打造的 Idea-discussion Skill,討論目標、限制、要做與不做的範圍,以及需求如何落地到既有專案。重點不是立即產出程式碼,而是確認雙方對工作內容有一致理解。

取得共識後,再透過 to-tickets Skill,依特定模板拆成帶有驗收條件的工單。這兩個 Skill 分別承擔需求釐清與工作拆解,目的在於讓討論結果不只停留在對話,而能成為後續可執行、可驗證的工作。

Idea-discussion Skill 用於釐清目標與範圍,to-tickets 則將討論共識轉成具驗收條件的工單。

流程不必每次完整套用,應依需求複雜度與可用模型的能力調整。例如,將前端按鈕由藍色改為黃色,目的已十分明確,跑完整流程反而增加不必要的步驟與 token 消耗;但仍應先確認共識,再讓 AI 動手。

「我們在做事情之前,應該要先跟AI取得共識,我們再叫它動手做。」
— 豪
Totifics 與 Matt Pocock 的 Skill Set 採用不同流程,但都先釐清需求共識,再轉成可執行、可驗證的工作。

Skill 可以自行打造、採用開源版本,或依工作習慣重新組合。流程與工具名稱可以改變,不變的是先釐清共識,再形成可執行且能驗證的工作,而非把需求直接交給 AI 猜測。

專案知識與驗收條件的文件化

需求討論中的 domain language 與 context 應留在專案內,作為人與 AI 共同維護的知識。若每次對話都以不同方式描述同一術語,AI 可能產生不同理解;將用語明確記錄,並讓工單文件與程式命名一致,才能降低理解偏差。

專案術語的意義需要明確提供:HAO point 指會員點數,Super HAO 指管理員。將定義留在專案,讓工單與程式採用一致用語,避免不同對話產生不同解讀。

工單也需要承載完整的背景與邊界,而不只是把討論結果拆成多張單。講者使用的模板包含四項資訊,讓 AI 在實作時能讀到變動原因、明確目標、不應處理的範圍,以及可驗收的預期行為。

工單模板以 Background、Goal、Non Goal 與驗收條件界定工作內容;其中 Non Goal 保留不做的範圍,驗收條件則以 Given When Then 將預期行為具體化。

這套工單格式可納入 Totifics 這類 Skill,讓拆單時每張工單都保留關鍵資訊、工作邊界與驗收條件。重點不是增加工單數量,而是讓討論共識轉成實作時可讀取、完成後可驗證的內容。

精簡 policy 與既有技術債重構

工單定義要做什麼,policy 則補充專案內必須遵守的工程規則。講者將重要規則寫進專案,讓 AI 能讀取共用層的使用要求、模組依賴方向,以及不同職責檔案的配置位置。

工單聚焦工作目標,policy 補足專案工程限制,讓 AI 知道實作時必須遵守哪些規則。

policy 應聚焦專案特有且重要的限制,而非蒐集所有開發知識。以 React 為例,講者認為模型已具備相關知識,只需提醒遵守 React best practice,不必逐條重寫。過度龐大的規則文件會在對話中反覆帶入,增加 token 負擔。

對既有技術債,應先完成合理重構,再留下後續可遵守的條件。Pagination 案例採取兩個步驟,先建立可用的共用層,再以 policy 防止重複實作。

Pagination 的改善順序是先抽出共用層並讓各 API 採用,再將不得重複造輪子的要求寫成 policy。

寫下 policy 並不代表 AI 一定遵守。講者觀察到,任務變複雜、context 拉長並經過多輪上下文壓縮後,AI 可能忘記使用共用層的要求,再次自行實作。文字規則無法保證完全符合預期,仍須補上驗證,透過可檢查的規則降低偏移可能性。

長任務與多輪上下文壓縮可能讓 AI 遺忘 policy;除了留下文字規則,也需要驗證機制來降低實作偏移。

工具檢查與可修正的品質回饋

模組依賴等明確規則,應交由程式穩定檢查,不必全部依賴 AI 判斷。透過工具分析依賴關係、辨識不合法引用,比單純提醒 AI 記住分層規則,更能有效約束開發行為。

將可明確判定的工程規則轉成工具檢查:TypeScript 可用 ESLint 約束 coding style,模組依賴則可透過 NX 或依賴分析工具驗證。

工具必須納入工作流,不能只期待 AI 自行執行。講者以 Git Hook 在 commit 時觸發依賴檢查;若發現 Service import Controller 裡的內容,就會攔截該次 commit,讓違規在提交時被發現。

攔截之外,錯誤訊息也必須提供具體原因與修正線索。若只回報 error 或 fail,AI 就得猜測問題所在,增加無效嘗試與 token 消耗。良好的品質回饋應讓 AI 知道哪裡違規,以及如何著手修正,而不只是告知檢查失敗。

Git Hook 攔截違規時,應同步呈現明確錯誤原因與修正線索,避免 AI 只能依據 error 或 fail 猜測問題,耗費額外 token。

Git Hook 在本地端執行,不能作為唯一的品質防線。所有重要檢查仍須在 CI 再跑一次,補上工作流中的驗證。

review agent 的分工與人工責任

是否值得抽出共用邏輯,需要工程判斷,不能只靠工具檢查。以 Pagination 為例,重點不只是辨識重複程式碼,還要判斷當下抽共用是否有價值。豪因此將 review 方法寫成 Skill,交由獨立的 review agent 執行,以乾淨的 context window 專注檢查,降低實作過程中多次上下文壓縮、遺忘規則的影響。

Pagination 是否應抽出共用邏輯,涉及工程價值判斷;獨立 review agent 可補足工具不適合處理的審查需求。
review agent 依專案 policy 與 Code Review Skill 審查相關程式;以新增 API 的 Pagination 重複實作為例,回報違規與建議,但不直接修改。

獨立 AI review 並非百分之百的品質保證。review agent 仍可能漏判,也可能與實作 agent 具有相似盲點。其作用是協助找出 policy 定義的技術問題、檢查交付條件是否達成,讓人將注意力集中在需求合理性、商業邏輯、架構取捨與風險決策。

AI review 仍可能漏判或與實作 agent 共享盲點;技術檢查可由 agent 協助,需求、商業邏輯與風險的最終判斷仍由人負責。
「那這個agent呢,他就只是我們review的合作夥伴」
— 豪

最終審查決策仍由人負責,不應因 agent 回報 OK 就直接 approve。豪目前會先請 AI 協助審查,再親自查看測試與核心邏輯,並驗證最終結果;他也強調,這是目前採用、供參考的做法,而非唯一正確的審查方式。

以 TDD 保護行為而非鏡像實作

TDD 的重點是先鎖定預期行為,而不是等程式碼完成後才檢查。工單中的驗收條件可作為測試案例的依據:先整理測試情境、預期結果與必要邊界,再透過測試約束 AI 的實作結果。

從工單驗收條件整理測試情境、預期結果與邊界,透過 TDD 在實作前鎖定應有行為。

講者的實務經驗顯示,測試能擋下許多「改 A 壞 B」的情況,但 AI 產出的測試是否合格,仍須另外審查。測試應保護需求所描述的行為,而非只確認程式碼目前的寫法。

Pagination 測試應針對跨頁資料、最後一頁 Cursor 與重構後既有 API 行為,避免只驗證實作細節。

例如,只檢查模組中的某個常數是否等於 300,屬於「鏡像實作」的測試,與實作高度耦合,容易變成為了寫測試而寫測試。即使這類測試全部通過,也無法保證行為正確;審查時應確認案例是否真正對應驗收條件與預期行為,而非只看通過結果。

atomic implementation loop 與 context 控制

atomic implementation loop 將工單、專案 context、policy、測試、工具檢查與人工審查串成開發循環:AI 在明確條件下實作,以測試保護既有行為、以工具檢查明確規則,再由 agent 與人共同審查;遇到失敗,就回到適當步驟修正與驗證。這些機制並非 AI 時代才出現,關鍵是讓既有工程紀律成為 AI 能遵守、也能取得回饋的工作環境。

工單與驗收條件、domain language、ADR 及 policy 提供實作依據,再以測試、工具與審查形成回饋循環,讓問題能回到適當步驟處理。

取得需求共識並備妥工單、驗收條件及專案 context 後,主 agent 只負責一個明確目標,並以 atomic commit 的思維規劃 incremental。實作、驗證與提交逐步推進,而不是完成所有改動後才一次提交。

atomic implementation loop 將每個 incremental 的實作、測試、主 agent 驗證與 atomic commit 串接起來,完成後再由 policy reviewer 與 business reviewer 分別檢查規範與預期結果。

atomic commit 的目的,是讓每次提交都有清楚的變更目的,並在繼續前先確認當下結果。人也能透過 commit message 追查 AI 處理工作的脈絡,避免所有改動被包成單一 commit,增加審查難度。

循環也需要停止條件。講者舉例,可設定連續三輪 review 未通過就先停止並回報,而非無限制修正。依其使用觀察,這套流程能明顯提升品質,但也會消耗更多 token。

QA 關注主 agent 累積過多 context 後,compact 可能遺漏資訊的風險。講者的回應是從拆單控制工作量:取得共識後,每張工單的顆粒度應夠小,避免單一 scope 過大。他以每單可能消耗不超過 30 萬 token 作為個人的控制例子,而非通用上限;核心仍是縮小每次任務範圍,降低 context 膨脹與壓縮造成資訊流失的機會。

工作環境診斷與漸進補強

AI 出現不符預期的行為時,應先診斷工作環境的缺口,而不是只追加 Prompt,期待它猜對指令。講者提出 context、constraint、feedback 三個檢查角度,分別確認需求理解、規則約束與錯誤回饋是否到位。

講者以 context、constraint、feedback 診斷 AI 工作環境,檢查需求脈絡、工程規則與錯誤回饋是否完整,作為選擇補強方案的依據。

診斷後,再依缺口選擇最簡單、最適合的機制。policy、Skill、tool 與 agent 各有用途,也可以組合使用,不必把所有問題都交給單一機制處理。

以模組邊界為例,可以同時建立 policy 與檢查工具,再透過 hook 整合進工作流程;Code Review 則可由 agent 執行,搭配 Skill 中的方法與流程,並以 Policy 作為判斷依據。重點是讓各機制互補,而非為了導入工具而增加流程。

建立 AI 工作流不必等到所有 Skill 與工具都準備齊全。講者建議先處理最痛的問題,再依三個診斷角度選擇補強方案,讓機制從真實需求中逐步長出來。

工程環境應持續累積有價值的 context、工程規則,以及驗證與回饋機制。透過人的判斷吸收每次問題帶來的教訓,再迭代補強,才能逐步提高對 AI 產出程式碼的信心。

共享能力與專案特有規則的邊界

講者目前已在個人與一人專案中實踐這套流程,觀察到交付速度提升,也兼顧軟體品質。將流程導入團隊、驗證整體交付效率與品質效益,仍是後續希望驗證的目標,尚不能視為已確認的團隊成果。

共享的重點是抽出可重用的規則與能力,而不是集中所有 Policy,再要求所有團隊一律採納。是否共享,應區分跨專案適用的工程紀律,以及只服務特定專案的局部需求。

共享應先辨識規則的適用範圍:發 PR 前通過測試與 Lint,可作為共通工程紀律;依專案而異的檔案配置,則保留為專案特有的 Policy。

共享範圍與採用強度仍須依公司性質及專案情境判斷。先評估機制是否具有跨專案價值,再決定分享給哪些團隊,以及是否需要強制或部分強制採用,不應將所有局部需求一律升級為共同標準。

資產分發、共同維護與組織共識

共享資產需要可落地的分發方式,也需要明確的治理責任。工具可透過 Package 提供;Skill 則可使用 Vercel Skills CLI,從共同維護的 Skill Library 選取並安裝至特定專案,安裝後的內容也能納入版控。

共享資產的分發可依類型選擇工具:Skill 可透過 Vercel Skills CLI 安裝至專案,Agent、Policy 等資產則可採用適合的工具或自建 CLI。

Agent、Policy 等資產也可透過適合的工具或團隊自建 CLI 分發。重點不只是集中存放,而是讓各專案能實際取得並使用共享內容。不過,有了分發機制,不代表已具備治理;團隊仍須決定誰可以修改規則、改動是否經過 Review,以及由誰持續維護。

做法先經個別專案驗證,再評估跨專案價值;納入共享資產後,仍須安排 Review 與維護責任,而非立即升格為全專案標準。

QA 中,與會者追問團隊是否真的出現多個 Skill 處理同一問題的情況,以及如何取得共識。講者確認確有重複,現階段正以共用 repo 推動共同維護,但導入仍在進行中,需要整個組織形成共識,不能只靠一人推動。

資產同步的範圍仍需與團隊討論,尤其應關注測試、核心 domain 與重要腳本的版控;一次性內容是否值得共享,也需另外評估,優先同步真正重要的內容。

整體結論是:軟體品質不能只靠更換 AI model,而要讓既有工程紀律可被 AI 讀取、遵守與驗證。從需求共識、設計、規則、測試到 Linter、Git Hooks 與 CI,先解決真實痛點,再把有效經驗沉澱為可審查、可維護的共享資產,才有機會從個人工作流走向團隊工程系統。

工程紀律domain languageADRpolicyTDDGit HooksCIatomic implementation loopcontextconstraintfeedback共享資產治理

由爪爪聽寫圖文報告生成AI 生成