MapleCheng

在浩瀚的網路世界中無限潛水欸少年郎!

0%

讓 Coding Agent 排隊,不是為了多跑幾個模型

最近很多團隊都在想同一件事:既然 AI coding 工具已經能讀 repo、改程式、跑測試,是不是做一個地方把需求排進去,讓它們輪流執行就好了?

表面上,這像是在做一個「派工平台」:收到需求、挑一個模型、塞進 prompt、等結果回來。但從 CTO 的角度看,我認為真正該被產品化的不是 prompt 派送,而是整個執行過程的主控權。Agent 可以是很好的 worker,卻不該自己兼任流程引擎、稽核系統與最終決策者。

這個差別,在 demo 階段不太明顯。一個人坐在終端機前,用互動介面一路回答問題,看到它要改哪個檔案、要不要執行某個指令,隨時可以插手。這種方式很有效率,也很適合探索。但當任務開始變長、同時有多個需求、多人要交接,或是工作牽涉正式 repository,互動式 session 就會變成不可靠的流程骨幹。

原因不是模型不夠聰明,而是 session 本質上是暫時的。它可能中斷、壓縮上下文、換模型、換機器,或因為一個沒有預期到的提問停住。若我們只知道「某個 Agent 好像跑到一半」,卻不知道它讀了哪個版本、改了什麼、測試跑到哪裡、為何停下來,這不是自動化,只是把不確定性包成一個背景程序。

先把任務當成有生命週期的工作

我會先替每個 coding 任務畫出明確的狀態,而不是只用「進行中」和「完成」兩個欄位。舉例來說,任務可以經過:準備上下文、規劃、實作、測試、審查、等待決策、完成或失敗。每一次轉換都要有原因、輸入和輸出。

這聽起來很老派,像是在替 AI 加一層傳統工作流;但恰恰是這層老派的結構,讓 AI 可以真的進入工程流程。當任務從規劃走到實作,我們應該知道核准的是哪個 plan;當測試失敗,系統應該區分是程式缺陷、環境問題還是需求不清;當任務被取消,也要留下它停在什麼位置,而不是讓下一個人從一大段對話紀錄裡考古。

狀態不該只記 Agent 想做什麼,而要記已被確認的事實。這對重試尤其重要。重跑一個任務,不代表把所有事情從頭再做一次;平台必須能判斷哪些步驟已完成、哪些證據仍有效、哪些工作區需要清掉重建。否則「重試」很容易變成多改一次檔案、多送一次請求,最後誰也說不清結果是怎麼來的。

把決策從 TUI 裡救出來

我很不喜歡把正式流程建立在解析終端機畫面上。TUI 很適合人機協作,卻不適合當平台與 Agent 之間唯一的協定。畫面文案會變、輸出格式會變、不同版本的行為會變;更重要的是,畫面上的選項往往沒有被保存成可查詢的業務資料。

比較穩健的做法是:當 Agent 遇到需要決定的地方,明確產生一筆結構化的「需要決策」事件。它要說清楚問題是什麼、目前上下文、受影響範圍、有哪些選項、各自風險、建議方案,以及後續如何恢復執行。

這裡的重點不在 JSON 長得多漂亮,而在於決策從「某人當時在視窗裡按了一個鍵」變成流程的一部分。低風險的選項可以依 policy 自動採用;需要審查的工作交給 reviewer;真正影響正式環境的動作才交給有責任的人確認。無論選了哪一條路,決策本身都會留下來,下一輪 Agent 取得的是已確認的事實,而不是猜測前一個人當時的意圖。

工作區隔離,是讓速度不變成事故

另一個容易被忽略的地方是執行環境。若多個 Agent 直接在同一個工作目錄改東西,速度看起來很快,實際上是在累積互相踩檔、污染未提交變更、測試結果失真的風險。

我傾向讓每一份工作都有隔離的 Git worktree,必要時再往下加 sandbox。這不表示每個任務都要做得像高安全實驗室,而是先保住幾個基本原則:它從哪一個 commit 開始、改動是否只屬於它、測試在哪個環境跑、產出能否被獨立檢視。預設不直接 push、不自動部署、不取得正式憑證,並不是不信任 Agent,而是把信任放在可以逐步增加的地方。

隔離還有一個管理上的好處:review 不必相信一段口頭摘要。平台可以交出明確的 diff、測試結果、使用的基準版本與任務事件,讓人看得懂這次改動到底解了什麼,又留下哪些風險。AI 寫程式最容易被誤解的地方,就是大家只看它最後說「完成了」,卻沒有把完成的證據當成產物。

Queue 的 source of truth 應該是資料庫,不是某個 session

因此,真正的 orchestrator 不該只是排隊器。它至少要保存需求原文、程式版本、核准計畫、工作區、步驟事件、Agent 執行紀錄、測試證據、成本與人類決策。命令列 session 可以拿來 resume,卻只能是最佳化,不該是唯一真相。

這個設計會多一些工程成本,也會讓一開始的架構沒有那麼炫。但我寧可先把最小流程做窄:從需求進來、建立隔離工作區、分階段執行、跑測試、回傳 diff 與結果,而且不自動 push。等這條路穩了,再談平行執行、更複雜的 policy、更多模型和更高的自動化程度。

AI coding 的價值從來不只是讓更多模型同時工作。真正的價值,是讓團隊可以放心把更多可驗證的工作交出去,同時仍知道誰在做什麼、為何停下來、下一步由誰負責。當平台掌握狀態、證據與停止權,Agent 才不只是會寫程式的聊天工具,而會成為可以被管理的工程產能。