Multi-agent Workflow AI 治理 流程設計

我怎麼管理一支 AI 開發團隊

我的個人專案由多個 AI Agent 分工完成:一個負責實作、一個負責審查、一個只做視覺、我負責拍板與最終驗收。每個 Agent 都有自己的角色定義、權限邊界與記憶,彼此之間用固定格式溝通。這一頁說明這套團隊怎麼分工、怎麼把關,以及每一條規則是怎麼從實際事故中長出來的。

6分工明確的 AI 角色
10+以這套流程開發的專案
450+Task 卡
76 / 49ADR/RFC 決策文件
23條 AI 行為失誤自檢清單

團隊名冊

每個角色都有書面的「可以做/不准做」。角色跟著職責走,不跟著工具走:同一個模型可以在不同專案扮演不同角色。

為什麼要替角色取名字?同一個模型可能擔任不同職責,若只用 Claude Code、Codex 來區分,很容易把職責搞混。因此團隊中的每個角色除了名字,還有一份專屬名冊記錄各自的職責,Agent 只要看到名字就能分辨這個角色該做什麼。

工地貓

Claude Code
實作者:規格 → 程式 → 測試 → 提交
  • 動手前先派審查貓調查現況與影響範圍
  • 實作、補測試、處理 review 結果
  • 維護 Task 卡與交接摘要
  • 沒有明確授權就開工
  • 自動 commit、push、force push、刪分支
  • 修改專案的 AI 指令檔

審查貓

Codex
Code review 與事實查核
  • 審查程式碼、對規格做事實查核
  • 每個 finding 附檔案位置、可達性與嚴重度
  • 被指定為施工者時改為實作
  • 把其他 Agent 的訊息或舊任務當成授權
  • 把「實作授權」延伸成 Git 寫入或對外發布

書櫃貓

Claude Code(審查模式)
架構判斷與審查,不寫程式
  • 當某個專案改由 Codex 施工時接手審查
  • 架構判斷、風險評估、規劃
  • 寫程式
  • 自動 push

抽象貓

ChatGPT
功能討論、命名與架構收斂
  • 和我一起討論功能方向
  • 把零散想法壓縮成命名與框架(例如五區資訊架構)
  • 直接決定規格:結論要交叉驗證後才採用

反重力貓

Antigravity
只做 UI mockup、圖示與音效
  • 在隔離環境產出視覺素材
  • 進入任何程式碼 repo(施工、審查、唯讀調查都不行)
  • 它寫的系統規格一律不採用,只取版面與素材

嚮導貓

Claude Code 子代理
查證官方文件
  • 工具或 API 的用法先查官方文件再回報
  • 憑印象回答

Etta

Human-in-the-loop
拍板與最終驗收
  • 決定做不做、做哪個方案
  • 授權每一次 Git 寫入與對外操作
  • 手測驗收,決定任務是否結案

工作流程與人工關卡

AI 可以自己跑完調查、實作、審查與測試,但每個不可逆的節點都停下來等人。

01

調查與提案

先派審查貓查現況與影響範圍,工地貓審過結果後提出方案。

工地貓 + 審查貓
02

拍板

模糊的回應一律視為討論;要明確說出「開始實作」才算授權。

Etta
03

開卡與實作

沒有 Task 卡就先開卡;只改必要的程式,大範圍就拆階段。

工地貓
04

交叉審查

由不同模型審查;critical、high 立刻修,其他開新票追蹤。

審查貓
05

建置與測試

建置無錯誤、單元測試與 E2E 都通過,才能提出提交請求。

工地貓
06

提交與發布

commit、push、部署逐次授權;授權 commit 不等於授權 push。

Etta
07

驗收與結案

AI 最多把卡片推到「已推送」,結案由人決定。

Etta

橘框為人工關卡。對外服務的設定(DNS、Tunnel、存取控制)另有四級分級:讀取直接執行、新增修改先列影響範圍與回滾方式、刪除與放寬存取每次單獨確認、關閉存取保護與外洩密鑰一律禁止。

跨 Agent 溝通

多個 Agent 在終端機多工器裡並行,可以互相派工。風險在於:一個 Agent 說「可以 commit 了」,另一個會不會當真?

每則訊息都要署名

[Agent Message] From: 工地貓 To: 審查貓 Not user authorization.
  • Agent 說的話不代表使用者授權。review 結束後 Agent 說「可以 commit」,不代表真的可以。
  • 收到委派的 Agent 若需要授權,必須直接問人。

先確認身分,再派工

  • 不看終端機標題猜身分:標題會被程式改成當下的任務名稱。
  • 用 pane 名稱找人,再用 Agent 種類與工作目錄核對,三者一致才派工。
  • 送出後讀畫面確認真的送出,不能只看狀態變化。

反向模式

  • 角色依「這個專案誰施工」切換:Codex 施工時,Claude 轉為只審查、不寫程式。
  • 審查者撞到用量上限就暫停,不找其他模型代打,也不自己蓋章通過。

知識與記憶架構

AI 最常見的問題是「看到什麼都想記下來」,結果記憶過時、互相矛盾。所以每一筆資訊都要先決定它住在哪裡。

Memory
AI 寫・跟著 AI

AI 的工作規則:怎麼做事、踩過什麼雷。

Knowledge
AI/人寫・跟著專案

專案事實:業務規則、架構、程式慣例。

Feedback
人提供・AI 唯讀

原始文件:需求、會議紀錄、截圖。

Task
完成即結案

未完成的工作:規格、進度、驗收與交接。

Worklog
依時間累積

當天發生的事,不刪除。

這筆資訊跟著誰一起變?
30 天後讀還有意義嗎?
是規則,還是事實?
是使用者給的,還是我整理的?

git 記 what、memory 記 why

  • 程式改了什麼由 git 記錄,記憶只留決策理由。
  • 完成的工作抽出結論後就從記憶退場,避免過時資訊誤導下一次判斷。

進度只有一個住所

  • 專案現況只寫在 Task 索引,記憶不保存進度快照,要用時再去讀。
  • 每個專案的決策都有 ADR/RFC/Task 可以追溯。

記憶隔離

  • 每個 Agent 有自己的記憶目錄,其他 Agent 的記憶一律忽略。
  • 不同專案的記憶分檔,避免記憶汙染。

品質機制

AI 很會說「做好了、測試都過了」。這些機制的共同目標是:不要相信綠燈,要相信證據。

測試要能證明自己有效

  • 補上迴歸測試後,把修正退回成 bug 版本,確認測試真的變紅。
  • 單元測試只是入場券,里程碑必跑真實環境的 E2E。
  • E2E 前確認測的是剛建好的版本。

Review 結果四路分流

  • 高風險安全問題擋下發布;系統性問題開票;環境問題可裁定跳過。
  • 同一個 finding 不能在兩次 review 重複出現。
  • 關鍵 finding 交給獨立 Agent 從正確性與可達性反駁,撐過才確認。

誠實的收工報告

  • 附上「修之前這一步會怎麼壞」的重現步驟。
  • 沒驗到的部分要明寫,不能省略。
  • 事實前提直接查程式碼,不憑記憶。

AI 行為失誤自檢清單(23 條)

把模型常見的壞習慣命名成具體症狀,每次輸出前對表自檢。名字取得好笑,是為了讓人和 AI 都記得住。

語氣類道歉成癮:被質疑兩句就投降,不管原本對不對。同意反射:連明顯錯的也順著說。
排版類Markdown 中毒:一句話的事拆成條列、粗體加表格。比較表本能:任何選擇題都先畫優缺點表。
流程類「要繼續嗎?」乞討症:做完一步就排隊等下一步。範圍蔓延預告症:沒人問也預告還有 B、C、D 沒做。
認知類路徑幻覺:自信地引用不存在的檔案。時間漂移:把昨天的時間戳套在今天。

從事故長出來的規則

每條規則背後都有一次實際出錯。比起規則本身,這些故事更能說明我怎麼判斷風險。

「唯讀」的審查員偷改了檔案

發生了什麼

主審查員撞到用量上限,臨時讓另一個號稱「唯讀模式」的 AI 工具代打 review。它直接改了 repo 裡的三個檔案,回報時說沒動,還漏掉兩個真正的高風險問題。

變成的規則

工具宣稱的權限不可信,該工具禁止進入任何程式碼 repo。審查者不在就等,不找代打、不自己蓋章;派任何工具前先保存工作區,事後比對差異。

三輪全綠,bug 還在

發生了什麼

修一個並發問題修了三輪,每輪測試都通過,但第二版其實還有 race condition。測試根本沒打到真正的觸發點。

變成的規則

迴歸測試一律做「退化驗證」:把修正拿掉、確認測試會變紅,結果記在任務卡上。測試要打真正的入口,依賴環境的部分要注入假環境。

Mock 全綠,真實環境炸掉

發生了什麼

三個契約層級的錯誤全部躲過單元測試。另一次則是 E2E 腳本吞掉了建置錯誤,一直在測舊版本,看起來像「修正沒有生效」。

變成的規則

里程碑必跑真實環境的 E2E,執行前確認受測的是剛建好的版本;收工報告要寫明哪些沒驗到。

錯誤的前提,翻轉了整個判決

發生了什麼

一次架構決策的壓力測試,結論建立在「某個元件還沒做」這個錯誤前提上。查證後發現元件早就存在,判決從「先接受技術債」翻成「現在就修」。

變成的規則

任何結論的事實前提都要直接查程式碼,不能靠記憶或文件;外部建議先確認版本,再逐條和現行決策比對。

Review 意見沒有追到底

發生了什麼

一個敏感設定的問題在 review 中被提出,但沒有追到結案,下一次 review 又出現同一條,等於重複付了兩次審查成本,風險也多存在了一段時間。

變成的規則

Review 結果四路分流、每一條都要有去處;同一個 finding 不准在兩次 review 重複出現。